{ "id": "124810", "key": "TIMOB-16189", "fields": { "issuetype": { "id": "1", "description": "A problem which impairs or prevents the functions of the product.", "name": "Bug", "subtask": false }, "project": { "id": "10153", "key": "TIMOB", "name": "Titanium SDK/CLI", "projectCategory": { "id": "10100", "description": "Titanium and related SDKs used in application development", "name": "Client" } }, "fixVersions": [], "resolution": { "id": "1", "description": "A fix for this issue is checked into the tree and tested.", "name": "Fixed" }, "resolutiondate": "2014-06-27T17:53:27.000+0000", "created": "2014-01-15T01:25:47.000+0000", "priority": { "name": "Critical", "id": "1" }, "labels": [ "qe-3.2.0-GA2" ], "versions": [], "issuelinks": [ { "id": "50063", "type": { "id": "10002", "name": "Duplicate", "inward": "is duplicated by", "outward": "duplicates" }, "inwardIssue": { "id": "153270", "key": "AC-506", "fields": { "summary": "INSTALL_PARSE_FAILED_NO_CERTIFICATES on Android 4.2 older devices", "status": { "description": "A resolution has been taken, and it is awaiting verification by reporter. From here issues are either reopened, or are closed.", "name": "Resolved", "id": "5", "statusCategory": { "id": 3, "key": "done", "colorName": "green", "name": "Done" } }, "issuetype": { "id": "1", "description": "A problem which impairs or prevents the functions of the product.", "name": "Bug", "subtask": false } } } }, { "id": "34296", "type": { "id": "10003", "name": "Relates", "inward": "relates to", "outward": "relates to" }, "outwardIssue": { "id": "122722", "key": "TIMOB-15759", "fields": { "summary": "CLI: Android apk won't install to Kindle Fire due to certificates error", "status": { "description": "The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.", "name": "Closed", "id": "6", "statusCategory": { "id": 3, "key": "done", "colorName": "green", "name": "Done" } }, "priority": { "name": "Critical", "id": "1" }, "issuetype": { "id": "1", "description": "A problem which impairs or prevents the functions of the product.", "name": "Bug", "subtask": false } } } }, { "id": "34295", "type": { "id": "10003", "name": "Relates", "inward": "relates to", "outward": "relates to" }, "outwardIssue": { "id": "122902", "key": "TIMOB-15817", "fields": { "summary": "CLI: Java 1.7 on Mavericks will cause packaged app to fail on install to Android device", "status": { "description": "The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.", "name": "Closed", "id": "6", "statusCategory": { "id": 3, "key": "done", "colorName": "green", "name": "Done" } }, "priority": { "name": "Critical", "id": "1" }, "issuetype": { "id": "1", "description": "A problem which impairs or prevents the functions of the product.", "name": "Bug", "subtask": false } } } }, { "id": "34340", "type": { "id": "10003", "name": "Relates", "inward": "relates to", "outward": "relates to" }, "inwardIssue": { "id": "124908", "key": "TIDOC-1464", "fields": { "summary": "Add additional information to Android keystore generation guide", "status": { "description": "The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.", "name": "Closed", "id": "6", "statusCategory": { "id": 3, "key": "done", "colorName": "green", "name": "Done" } }, "priority": { "name": "High", "id": "2" }, "issuetype": { "id": "1", "description": "A problem which impairs or prevents the functions of the product.", "name": "Bug", "subtask": false } } } }, { "id": "34342", "type": { "id": "10003", "name": "Relates", "inward": "relates to", "outward": "relates to" }, "inwardIssue": { "id": "124912", "key": "TIMOB-16213", "fields": { "summary": "CLI: Packaging - CLI should throw a warning if you are using a SHA256withRSA signature keystore when packaging to a non-KitKat device", "status": { "description": "The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.", "name": "Closed", "id": "6", "statusCategory": { "id": 3, "key": "done", "colorName": "green", "name": "Done" } }, "priority": { "name": "High", "id": "2" }, "issuetype": { "id": "1", "description": "A problem which impairs or prevents the functions of the product.", "name": "Bug", "subtask": false } } } }, { "id": "34346", "type": { "id": "10003", "name": "Relates", "inward": "relates to", "outward": "relates to" }, "inwardIssue": { "id": "124916", "key": "TISTUD-6038", "fields": { "summary": "Android: Keystore - When creating a new Android keystore, there should be a drop down list to select the different signature algorithm", "status": { "description": "The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.", "name": "Closed", "id": "6", "statusCategory": { "id": 3, "key": "done", "colorName": "green", "name": "Done" } }, "priority": { "name": "High", "id": "2" }, "issuetype": { "id": "4", "description": "An improvement or enhancement to an existing feature or task.", "name": "Improvement", "subtask": false } } } } ], "assignee": { "name": "ayeung", "key": "ayeung", "displayName": "Allen Yeung", "active": true, "timeZone": "America/Los_Angeles" }, "updated": "2015-12-08T06:01:32.000+0000", "status": { "description": "The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.", "name": "Closed", "id": "6", "statusCategory": { "id": 3, "key": "done", "colorName": "green", "name": "Done" } }, "components": [ { "id": "10202", "name": "Android", "description": "Android Platform" }, { "id": "13103", "name": "CLI", "description": "Node-based command line interface" } ], "description": "*Details:* After packaging an app from Studio *or* CLI (see CLI command below) and installing to a non-KitKat Android device (4.4), install will fail with INSTALL_PARSE_FAILED_NO_CERTIFICATES. However, installing a packaged app to a KitKat Android device (e.g. Nexus 5 (4.4)) works fine.\r\n\r\nThis seems to occur after a clean install of Windows (so far) i.e. no Java, no node.js.\r\n\r\nHere is the CLI command used by Studio:\r\n{code}\r\n\"C:\\Users\\Tester\\AppData\\Roaming\\npm\\titanium.CMD\" \"--no-colors\" \"--no-progress-bars\" \"--no-prompt\" \"--no-banner\" \"build\" \"--platform\" \"android\" \"--sdk\" \"3.2.0.GA\" \"--build-type\" \"production\" \"--log-level\" \"trace\" \"--project-dir\" \"C:\\Users\\Tester\\Documents\\Appcelerator_Studio_Workspace\\monkeyAlloy\" \"--target\" \"dist-playstore\" \"--android-sdk\" \"C:\\android-sdk-win\" \"--output-dir\" \"C:\\Users\\Tester\\Desktop\" \"--api-level\" \"10\" \"--alias\" \"wluu\" \"--keystore\" \"C:\\Users\\Tester\\Desktop\\wilsons_keystore\" \"--store-password\" \"**********\" \"--skip-js-minify\"\r\n{code}\r\n\r\nTo work around this for a non-kitkat device, you will need to manually sign the packaged app ([source|http://developer.appcelerator.com/question/153717/installing-apk-file-on-device---installparsefailednocertificates]): jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore KEYSTORE_FILE_LOCATION APK_FILE_LOCATION KEYSTORE_ALIAS\r\n\r\n*Steps to reproduce:*\r\n1. Create a default Titanium Classic *or* Alloy app\r\n2. Package the app to the Android App Store from Studio *or* using the above CLI command\r\n3. After the app is packaged, go to the packaged app directory and install app to a non-KitKat device: adb install .apk\r\n\r\n*Actual:* App will fail with INSTALL_PARSE_FAILED_NO_CERTIFICATES in the cmd.\r\n\r\n*Expected:* App should not fail with INSTALL_PARSE_FAILED_NO_CERTIFICATES after packaging from Studio.", "attachment": [ { "id": "45160", "filename": "build.log", "author": { "name": "wluu", "key": "wluu", "displayName": "Wilson Luu", "active": false, "timeZone": "America/Los_Angeles" }, "created": "2014-01-15T17:49:34.000+0000", "size": 41531, "mimeType": "text/plain" }, { "id": "45155", "filename": "diagnostics.txt", "author": { "name": "wluu", "key": "wluu", "displayName": "Wilson Luu", "active": false, "timeZone": "America/Los_Angeles" }, "created": "2014-01-15T02:52:31.000+0000", "size": 15085, "mimeType": "text/plain" }, { "id": "45181", "filename": "kit_kat_log.txt", "author": { "name": "wluu", "key": "wluu", "displayName": "Wilson Luu", "active": false, "timeZone": "America/Los_Angeles" }, "created": "2014-01-16T04:41:08.000+0000", "size": 4549, "mimeType": "text/plain" }, { "id": "45182", "filename": "non_kitkat_log.txt", "author": { "name": "wluu", "key": "wluu", "displayName": "Wilson Luu", "active": false, "timeZone": "America/Los_Angeles" }, "created": "2014-01-16T04:41:08.000+0000", "size": 14829, "mimeType": "text/plain" }, { "id": "45156", "filename": "ti_info.txt", "author": { "name": "wluu", "key": "wluu", "displayName": "Wilson Luu", "active": false, "timeZone": "America/Los_Angeles" }, "created": "2014-01-15T02:52:31.000+0000", "size": 14084, "mimeType": "text/plain" } ], "flagged": false, "summary": "Android: Package - Installing a packaged app fails with INSTALL_PARSE_FAILED_NO_CERTIFICATES on a non-KitKat device ", "creator": { "name": "wluu", "key": "wluu", "displayName": "Wilson Luu", "active": false, "timeZone": "America/Los_Angeles" }, "subtasks": [], "reporter": { "name": "wluu", "key": "wluu", "displayName": "Wilson Luu", "active": false, "timeZone": "America/Los_Angeles" }, "environment": "Appcelerator Studio, build: 3.2.0.201312191455\r\nSDK build: 3.2.0.GA (dev drop 1)\r\nOS: Windows 8.1 (32-bit, 64-bit)\r\nJava: 1.7.0_40\r\nDevices: Droid 3 (2.3.4), Galaxy Tab 8.9 inch (4.0.4), Galaxy Note II (4.1.2)", "closedSprints": [ { "id": 133, "state": "closed", "name": "2014 Sprint 13 SDK", "startDate": "2014-06-23T21:55:20.791Z", "endDate": "2014-07-04T00:00:00.000Z", "completeDate": "2014-07-07T17:32:18.561Z", "originBoardId": 100 } ], "comment": { "comments": [ { "id": "288211", "author": { "name": "wluu", "key": "wluu", "displayName": "Wilson Luu", "active": false, "timeZone": "America/Los_Angeles" }, "body": "Here is the command that Studio is using: \r\n{code:java}\r\n\"C:\\Users\\Tester\\AppData\\Roaming\\npm\\titanium.CMD\" \"--no-colors\" \"--no-progress-bars\" \"--no-prompt\" \"--no-banner\" \"build\" \"--platform\" \"android\" \"--sdk\" \"3.2.0.GA\" \"--build-type\" \"production\" \"--log-level\" \"trace\" \"--project-dir\" \"C:\\Users\\Tester\\Documents\\Appcelerator_Studio_Workspace\\monkeyAlloy\" \"--target\" \"dist-playstore\" \"--android-sdk\" \"C:\\android-sdk-win\" \"--output-dir\" \"C:\\Users\\Tester\\Desktop\" \"--api-level\" \"10\" \"--alias\" \"wluu\" \"--keystore\" \"C:\\Users\\Tester\\Desktop\\wilsons_keystore\" \"--store-password\" \"**********\" \"--skip-js-minify\"\r\n{code}", "updateAuthor": { "name": "wluu", "key": "wluu", "displayName": "Wilson Luu", "active": false, "timeZone": "America/Los_Angeles" }, "created": "2014-01-15T02:45:34.000+0000", "updated": "2014-01-15T02:45:54.000+0000" }, { "id": "288213", "author": { "name": "wluu", "key": "wluu", "displayName": "Wilson Luu", "active": false, "timeZone": "America/Los_Angeles" }, "body": "Also, attached the ti info and diagnostics from studio.", "updateAuthor": { "name": "wluu", "key": "wluu", "displayName": "Wilson Luu", "active": false, "timeZone": "America/Los_Angeles" }, "created": "2014-01-15T02:52:31.000+0000", "updated": "2014-01-15T02:52:31.000+0000" }, { "id": "288216", "author": { "name": "ingo", "key": "ingo", "displayName": "Ingo Muschenetz", "active": true, "timeZone": "America/Los_Angeles" }, "body": "Okay, it now appears that we should get the complete log file from the SDK build process, since it appears its not Studio's responsibility to pass in \"-digestalg SHA1 -sigalg MD5withRSA\"", "updateAuthor": { "name": "ingo", "key": "ingo", "displayName": "Ingo Muschenetz", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2014-01-15T02:58:00.000+0000", "updated": "2014-01-15T02:58:00.000+0000" }, { "id": "288266", "author": { "name": "thomashuelbert", "key": "thomashuelbert", "displayName": "Thomas Huelbert", "active": true, "timeZone": "America/Los_Angeles" }, "body": "Hey Wilson, can you please provide the build log?\n", "updateAuthor": { "name": "thomashuelbert", "key": "thomashuelbert", "displayName": "Thomas Huelbert", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2014-01-15T16:54:05.000+0000", "updated": "2014-01-15T16:54:05.000+0000" }, { "id": "288286", "author": { "name": "wluu", "key": "wluu", "displayName": "Wilson Luu", "active": false, "timeZone": "America/Los_Angeles" }, "body": "Added the build logs from studio console.", "updateAuthor": { "name": "wluu", "key": "wluu", "displayName": "Wilson Luu", "active": false, "timeZone": "America/Los_Angeles" }, "created": "2014-01-15T17:49:16.000+0000", "updated": "2014-01-15T17:49:16.000+0000" }, { "id": "288413", "author": { "name": "wluu", "key": "wluu", "displayName": "Wilson Luu", "active": false, "timeZone": "America/Los_Angeles" }, "body": "Also, included logcats when installing the packaged apps to a kitkat device (kit_kat_log.txt) and to a non-kikat device (non_kitkat.log.txt).\r\n\r\nIn both log files, search for com.appcelerator.classic", "updateAuthor": { "name": "wluu", "key": "wluu", "displayName": "Wilson Luu", "active": false, "timeZone": "America/Los_Angeles" }, "created": "2014-01-16T04:41:08.000+0000", "updated": "2014-01-16T04:41:08.000+0000" }, { "id": "288555", "author": { "name": "wluu", "key": "wluu", "displayName": "Wilson Luu", "active": false, "timeZone": "America/Los_Angeles" }, "body": "After some investigation, the following was realized:\n\n1. If you create an Android keystore from Studio or use the default keytool command from [here|http://docs.appcelerator.com/titanium/latest/#!/guide/Distributing_Android_apps] AND your machine is using Java 1.7.X, then by default, keytool will use SHA256withRSA signature algorithm to sign your keystore.\n\n2. Next, if you package your app with the keystore from step 1 and install the app to a KitKat device, then that should install without any issues (as noted in the bug description).\n\n3. However, if you install the packaged app with the SHA256withRSA signature keystore onto a non-KitKat (< 4.4) device, then you will see the above bug behavior\n\n4. Only a packaged app with a signed SHA1withRSA signature keystore can be installed onto a non-KitKat device; hence, for the manual jarsigner workaround", "updateAuthor": { "name": "wluu", "key": "wluu", "displayName": "Wilson Luu", "active": false, "timeZone": "America/Los_Angeles" }, "created": "2014-01-17T01:33:35.000+0000", "updated": "2014-01-17T01:33:35.000+0000" }, { "id": "292711", "author": { "name": "michael", "key": "michael", "displayName": "Michael Gangolf", "active": true, "timeZone": "Europe/Berlin" }, "body": "Same here: SHA1withRSA works on a non kitkat device, TI Studio 3.2.1 (alloy 1.3.1, sdk 3.2.1) uses SHA256withRSA by default and app installation will fail", "updateAuthor": { "name": "michael", "key": "michael", "displayName": "Michael Gangolf", "active": true, "timeZone": "Europe/Berlin" }, "created": "2014-02-12T17:59:37.000+0000", "updated": "2014-02-12T17:59:37.000+0000" }, { "id": "296208", "author": { "name": "mnenomic77", "key": "mnenomic77", "displayName": "Michael Sharman", "active": true, "timeZone": "Australia/Sydney" }, "body": "Same problem here. \r\n\r\nBut I resolved it by creating a new key in my keystore with the signature algorithm set to SHA1withRSA. It appears that Titanium reads the algorithm type to sign by querying the keystore with keytool. I must have created my keystore with Java 7 without specifying the signature algorithm, as a result the key is permanently set to SHA256withRSA instead of SHA1withRSA. \r\n\r\nI solved the problem by recreating key with Titanium Studio running with Java 6.\r\n\r\nNow the dist-playstore build signs using the correct algorithm.\r\n", "updateAuthor": { "name": "mnenomic77", "key": "mnenomic77", "displayName": "Michael Sharman", "active": true, "timeZone": "Australia/Sydney" }, "created": "2014-03-07T23:43:59.000+0000", "updated": "2014-03-07T23:44:49.000+0000" }, { "id": "310661", "author": { "name": "michael", "key": "michael", "displayName": "Michael Gangolf", "active": true, "timeZone": "Europe/Berlin" }, "body": "You can also just copy the command from the TIStudio console, paste it and change SHA256withRSA to MD5withRSA and run the command again. Thats how I use my old key and it will work with non-kitkat devices. \r\n\r\nWhen you create a new key in your keystore you can't compile updates for existing apps, or?", "updateAuthor": { "name": "michael", "key": "michael", "displayName": "Michael Gangolf", "active": true, "timeZone": "Europe/Berlin" }, "created": "2014-06-24T16:49:03.000+0000", "updated": "2014-06-24T16:49:03.000+0000" }, { "id": "311312", "author": { "name": "lchoudhary", "key": "lchoudhary", "displayName": "Lokesh Choudhary", "active": true, "timeZone": "America/Los_Angeles" }, "body": "This issue has been fixed & working as expected.\r\nAlso all the related tickets are fixed and closed.\r\n\r\nClosing.", "updateAuthor": { "name": "lchoudhary", "key": "lchoudhary", "displayName": "Lokesh Choudhary", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2014-06-27T17:48:53.000+0000", "updated": "2014-06-27T17:48:53.000+0000" }, { "id": "311314", "author": { "name": "lchoudhary", "key": "lchoudhary", "displayName": "Lokesh Choudhary", "active": true, "timeZone": "America/Los_Angeles" }, "body": "Reopening to fix Spint", "updateAuthor": { "name": "lchoudhary", "key": "lchoudhary", "displayName": "Lokesh Choudhary", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2014-06-27T17:53:07.000+0000", "updated": "2014-06-27T17:53:07.000+0000" }, { "id": "311315", "author": { "name": "lchoudhary", "key": "lchoudhary", "displayName": "Lokesh Choudhary", "active": true, "timeZone": "America/Los_Angeles" }, "body": "Closing ", "updateAuthor": { "name": "lchoudhary", "key": "lchoudhary", "displayName": "Lokesh Choudhary", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2014-06-27T17:53:27.000+0000", "updated": "2014-06-27T17:53:27.000+0000" }, { "id": "372063", "author": { "name": "c3k", "key": "c3k", "displayName": "carlo", "active": true, "timeZone": "Europe/Berlin" }, "updateAuthor": { "name": "c3k", "key": "c3k", "displayName": "carlo", "active": true, "timeZone": "Europe/Berlin" }, "created": "2015-12-03T16:33:39.000+0000", "updated": "2015-12-03T16:33:39.000+0000" } ], "maxResults": 16, "total": 16, "startAt": 0 } } }