{ "id": "113146", "key": "TIMOB-13634", "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": [ { "id": "15492", "description": "2013 Sprint 12 JS", "name": "2013 Sprint 12 JS", "archived": true, "released": true, "releaseDate": "2013-06-17" }, { "id": "15110", "description": "2013 Sprint 12", "name": "2013 Sprint 12", "archived": true, "released": true, "releaseDate": "2013-06-17" }, { "id": "14982", "description": "Release 3.2.0", "name": "Release 3.2.0", "archived": false, "released": true, "releaseDate": "2013-12-19" } ], "resolution": { "id": "1", "description": "A fix for this issue is checked into the tree and tested.", "name": "Fixed" }, "resolutiondate": "2013-06-05T21:06:07.000+0000", "created": "2013-04-19T22:31:06.000+0000", "priority": { "name": "High", "id": "2" }, "labels": [ "qe-closed-3.2.0" ], "versions": [], "issuelinks": [], "assignee": { "name": "cbarber", "key": "cbarber", "displayName": "Chris Barber", "active": true, "timeZone": "America/Chicago" }, "updated": "2013-11-20T01:42:25.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": "13103", "name": "CLI", "description": "Node-based command line interface" } ], "description": "The CLI dies when an add-on doesn't have a manifest.ini:\r\n\r\n{code}\r\n[ERROR] Application Installer abnormal process termination. Process exit value was 1\r\nc:\\Users\\Johnny\\AppData\\Roaming\\npm\\node_modules\\titanium\\node_modules\\longjohn\\dist\\longjohn.js:181\r\n throw e;\r\n ^\r\nError: ENOENT, no such file or directory 'C:\\Android\\add-ons\\android-ndk-r7\\manifest.ini'\r\n at fs.openSync (fs.js:338:18)\r\n at fs.readFileSync (fs.js:182:15)\r\n at exports.detect.async.series.targets (C:\\Users\\Johnny\\AppData\\Roaming\\Titanium\\mobilesdk\\win32\\3.1.0.v20130409124549\\node_modules\\node-appc\\lib\\android.js:168:25)\r\n at exports.visitDirsSync (C:\\Users\\Johnny\\AppData\\Roaming\\Titanium\\mobilesdk\\win32\\3.1.0.v20130409124549\\node_modules\\node-appc\\lib\\fs.js:99:3)\r\n at Array.forEach (native)\r\n at exports.visitDirsSync (C:\\Users\\Johnny\\AppData\\Roaming\\Titanium\\mobilesdk\\win32\\3.1.0.v20130409124549\\node_modules\\node-appc\\lib\\fs.js:98:5)\r\n at exports.detect.async.series.cached (C:\\Users\\Johnny\\AppData\\Roaming\\Titanium\\mobilesdk\\win32\\3.1.0.v20130409124549\\node_modules\\node-appc\\lib\\android.js:167:10)\r\n at exithandler (child_process.js:538:7)\r\n at EventEmitter.emit (events.js:99:17)\r\n---------------------------------------------\r\n at exports.execFile (child_process.js:594:9)\r\n at exports.exec (child_process.js:481:18)\r\n at exports.detect.async.series.cached (C:\\Users\\Johnny\\AppData\\Roaming\\Titanium\\mobilesdk\\win32\\3.1.0.v20130409124549\\node_modules\\node-appc\\lib\\android.js:81:4)\r\n at async.series.results (C:\\Users\\Johnny\\AppData\\Roaming\\Titanium\\mobilesdk\\win32\\3.1.0.v20130409124549\\node_modules\\async\\lib\\async.js:486:21)\r\n at _asyncMap (C:\\Users\\Johnny\\AppData\\Roaming\\Titanium\\mobilesdk\\win32\\3.1.0.v20130409124549\\node_modules\\async\\lib\\async.js:185:13)\r\n at async.forEachSeries.iterate (C:\\Users\\Johnny\\AppData\\Roaming\\Titanium\\mobilesdk\\win32\\3.1.0.v20130409124549\\node_modules\\async\\lib\\async.js:108:13)\r\n at async.forEachSeries.iterate (C:\\Users\\Johnny\\AppData\\Roaming\\Titanium\\mobilesdk\\win32\\3.1.0.v20130409124549\\node_modules\\async\\lib\\async.js:119:25)\r\n at _asyncMap (C:\\Users\\Johnny\\AppData\\Roaming\\Titanium\\mobilesdk\\win32\\3.1.0.v20130409124549\\node_modules\\async\\lib\\async.js:187:17)\r\n---------------------------------------------\r\n at exports.execFile (child_process.js:594:9)\r\n at exports.exec (child_process.js:481:18)\r\n at exports.detect.async.series.exec.cwd (C:\\Users\\Johnny\\AppData\\Roaming\\Titanium\\mobilesdk\\win32\\3.1.0.v20130409124549\\node_modules\\node-appc\\lib\\android.js:68:4)\r\n at async.series.results (C:\\Users\\Johnny\\AppData\\Roaming\\Titanium\\mobilesdk\\win32\\3.1.0.v20130409124549\\node_modules\\async\\lib\\async.js:486:21)\r\n at _asyncMap (C:\\Users\\Johnny\\AppData\\Roaming\\Titanium\\mobilesdk\\win32\\3.1.0.v20130409124549\\node_modules\\async\\lib\\async.js:185:13)\r\n at async.forEachSeries.iterate (C:\\Users\\Johnny\\AppData\\Roaming\\Titanium\\mobilesdk\\win32\\3.1.0.v20130409124549\\node_modules\\async\\lib\\async.js:108:13)\r\n at async.forEachSeries.iterate (C:\\Users\\Johnny\\AppData\\Roaming\\Titanium\\mobilesdk\\win32\\3.1.0.v20130409124549\\node_modules\\async\\lib\\async.js:119:25)\r\n at _asyncMap (C:\\Users\\Johnny\\AppData\\Roaming\\Titanium\\mobilesdk\\win32\\3.1.0.v20130409124549\\node_modules\\async\\lib\\async.js:187:17)\r\n{code}\r\n\r\nThe fix is trivial, we just need to check that the manifest.ini exists:\r\n\r\n{code}\r\n// Create the list of target directories and their properties\r\nafs.visitDirsSync(path.join(sdkPath, 'add-ons'), function(subDir, subDirPath) {\r\n\tvar manifestFile = path.join(subDirPath, 'manifest.ini');\r\n\tif (afs.exists(manifestFile)) {\r\n\t\tvar manifest = fs.readFileSync(manifestFile).toString();\r\n\t\ttargetDirs.push({\r\n\t\t\tdirPath: subDirPath,\r\n\t\t\tname: manifest.match(manifestNameRegex)[1],\r\n\t\t\tvendor: manifest.match(manifestVendorRegex)[1],\r\n\t\t\tapi: manifest.match(manifestApiRegex)[1],\r\n\t\t\trevision: manifest.match(manifestRevisionRegex)[1]\r\n\t\t});\r\n\t}\r\n});\r\n{code}\r\n\r\nRelated Q&A question: http://developer.appcelerator.com/question/151052/cant-build-project-after-studio-update", "attachment": [], "flagged": false, "summary": "CLI: Reading Android add-on fails if missing manifest.ini file", "creator": { "name": "cbarber", "key": "cbarber", "displayName": "Chris Barber", "active": true, "timeZone": "America/Chicago" }, "subtasks": [], "reporter": { "name": "cbarber", "key": "cbarber", "displayName": "Chris Barber", "active": true, "timeZone": "America/Chicago" }, "environment": null, "comment": { "comments": [ { "id": "256043", "author": { "name": "cbarber", "key": "cbarber", "displayName": "Chris Barber", "active": true, "timeZone": "America/Chicago" }, "body": "Node-appc master pull request: https://github.com/appcelerator/node-appc/pull/49", "updateAuthor": { "name": "cbarber", "key": "cbarber", "displayName": "Chris Barber", "active": true, "timeZone": "America/Chicago" }, "created": "2013-06-05T04:37:19.000+0000", "updated": "2013-06-05T04:37:19.000+0000" }, { "id": "256044", "author": { "name": "cbarber", "key": "cbarber", "displayName": "Chris Barber", "active": true, "timeZone": "America/Chicago" }, "body": "To test, locate your android-sdk installation, then go into the \"addons\" directory. Next select any addon folder and rename the \"manifest.ini\" file in it to \"manifest2.ini\" (or whatever). Run \"titanium info\" and watch the crash.", "updateAuthor": { "name": "cbarber", "key": "cbarber", "displayName": "Chris Barber", "active": true, "timeZone": "America/Chicago" }, "created": "2013-06-05T04:38:59.000+0000", "updated": "2013-06-05T04:38:59.000+0000" }, { "id": "280282", "author": { "name": "oromero", "key": "oromero", "displayName": "Olga Romero", "active": true, "timeZone": "America/Los_Angeles" }, "body": "Followed test steps and got\n{code}\n! The Android emulator \"4.1.2_Android_API16\" has a problem: Unknown target 'Google Inc.:Google\n APIs:16' in /Users/oromero/.android/avd/4.1.2_Android_API16.ini\n{code}\n\nEnvironment\nCLI 3.2.0-alpha", "updateAuthor": { "name": "oromero", "key": "oromero", "displayName": "Olga Romero", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2013-11-20T01:42:04.000+0000", "updated": "2013-11-20T01:42:04.000+0000" } ], "maxResults": 3, "total": 3, "startAt": 0 } } }