{ "id": "174707", "key": "TIMOB-27755", "fields": { "issuetype": { "id": "4", "description": "An improvement or enhancement to an existing feature or task.", "name": "Improvement", "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": "20949", "name": "Release 9.0.1", "archived": false, "released": true, "releaseDate": "2020-04-16" } ], "resolution": { "id": "1", "description": "A fix for this issue is checked into the tree and tested.", "name": "Fixed" }, "resolutiondate": "2020-04-15T18:03:17.000+0000", "created": "2020-02-08T04:45:57.000+0000", "priority": { "name": "Medium", "id": "3" }, "labels": [ "android", "build", "ndk", "sdk" ], "versions": [], "issuelinks": [ { "id": "58178", "type": { "id": "10003", "name": "Relates", "inward": "relates to", "outward": "relates to" }, "outwardIssue": { "id": "174722", "key": "DAEMON-322", "fields": { "summary": "androidlib: NDK side-by-side support", "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" } }, "priority": { "name": "Critical", "id": "1" }, "issuetype": { "id": "4", "description": "An improvement or enhancement to an existing feature or task.", "name": "Improvement", "subtask": false } } } } ], "assignee": { "name": "jquick", "key": "jquick", "displayName": "Joshua Quick", "active": true, "timeZone": "America/Los_Angeles" }, "updated": "2020-04-15T18:03:17.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": "*Summary:*\r\nAs of 2019, Google introduced a new NDK \"side-by-side\" feature which allows you to install multiple NDK versions under the Android SDK directory. All new NDK versions are downloaded to the side-by-side directory and it replaces the old \"ndk-bundle\" directory.\r\n\r\n*Example:*\r\nThe folder structure appear as follows on macOS...\r\n{{~/Library/Android/sdk/ndk/19.2.5345600}}\r\n{{~/Library/Android/sdk/ndk/20.1.5948922}}\r\n{{~/Library/Android/sdk/ndk/21.0.5935234}}\r\n{{~/Library/Android/sdk/ndk/21.0.6113669}}\r\n\r\nThere will be an \"ndk\" directory under the \"Android/sdk\" directory. Each subdirectory under \"ndk\" will be the version number of the installed NDK.\r\n\r\n*Old Behavior:*\r\nBefore the NDK side-by-side feature existed, Android Studio used to install the NDK under the Android SDK directory as shown below. Updating the NDK version used to replace the old version. Android Studio no longer installs to this directory.\r\n{{~/Library/Android/sdk/ndk-bundle}}\r\n\r\n*To be done:*\r\nThe CLI should search for the installed NDK directory in the following order.\r\n# The \"ANDROID_NDK\" environment variable, if set.\r\n# The newest NDK side-by-side version subdirectory, if available.\r\n# The \"ndk-bundle\" directory.\r\n\r\nWe will need to update the code here...\r\nhttps://github.com/appcelerator/node-titanium-sdk/blob/master/lib/android.js\r\n\r\n*Note:*\r\nThis is important for macOS Catalina. Google does not currently digitally sign the NDK tools. So, downloading/installing the NDK zip from Google's website will cause macOS Catalina to request the end-user's permission to execute the NDK tools. However, if you download the NDK via Android Studio (which is digitally signed), the installed NDK will inherit its permissions and you will not have this issue.\r\n", "attachment": [], "flagged": false, "summary": "Android: Add NDK side-by-side support", "creator": { "name": "jquick", "key": "jquick", "displayName": "Joshua Quick", "active": true, "timeZone": "America/Los_Angeles" }, "subtasks": [], "reporter": { "name": "jquick", "key": "jquick", "displayName": "Joshua Quick", "active": true, "timeZone": "America/Los_Angeles" }, "environment": null, "closedSprints": [ { "id": 1192, "state": "closed", "name": "2020 Sprint 8", "startDate": "2020-04-10T18:08:36.092Z", "endDate": "2020-04-24T18:08:00.000Z", "completeDate": "2020-04-24T16:23:30.466Z", "originBoardId": 114 } ], "comment": { "comments": [ { "id": "454388", "author": { "name": "jquick", "key": "jquick", "displayName": "Joshua Quick", "active": true, "timeZone": "America/Los_Angeles" }, "body": "PR: https://github.com/appcelerator/node-titanium-sdk/pull/143\r\nPR: https://github.com/appcelerator/node-titanium-sdk/pull/186", "updateAuthor": { "name": "jquick", "key": "jquick", "displayName": "Joshua Quick", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2020-02-22T05:17:38.000+0000", "updated": "2020-04-13T20:47:17.000+0000" }, { "id": "455068", "author": { "name": "jquick", "key": "jquick", "displayName": "Joshua Quick", "active": true, "timeZone": "America/Los_Angeles" }, "body": "In our current {{9_0_X}} branch, after the {{9.0.0.GA}} release, app builds will fail if you do the following.\r\n# Uninstall NDK if currently installed.\r\n# Open Android Studio's preferences window.\r\n# Go to: Appearances & Behavior -> System Settings -> Android SDK\r\n# Click on the \"SDK Tools\" tab.\r\n# Check the \"NDK (Side by side)\" option.\r\n# Click the OK button.\r\n# Attempt to build a Titanium app.\r\n\r\n{code}\r\n[ERROR] [GRADLE] FAILURE: Build failed with an exception.\r\n[ERROR] [GRADLE] \r\n[ERROR] [GRADLE] * What went wrong:\r\n[ERROR] [GRADLE] Execution failed for task ':app:stripDebugDebugSymbols'.\r\n[ERROR] [GRADLE] > No version of NDK matched the requested version 20.0.5594570. Versions available locally: 20.1.5948944, 21.0.5935234\r\n{code}\r\n\r\nThis ticket solves this issue because Titanium will correctly find the Android Studio installed NDK and provide it to the app build.\r\n\r\n*Notes:*\r\n- The app will build successfully if you do not have the NDK installed. You will get a warning about the NDK being missing instead.\r\n- Google requires the NDK because the app includes C/C++ libraries and wants to strip debug symbols from them. This is something they changed as of Android gradle tool v3.5.0.\r\n", "updateAuthor": { "name": "jquick", "key": "jquick", "displayName": "Joshua Quick", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2020-04-09T23:09:01.000+0000", "updated": "2020-04-09T23:09:01.000+0000" }, { "id": "455108", "author": { "name": "jquick", "key": "jquick", "displayName": "Joshua Quick", "active": true, "timeZone": "America/Los_Angeles" }, "body": "PR (master): https://github.com/appcelerator/titanium_mobile/pull/11627\r\nPR (9.0.x): https://github.com/appcelerator/titanium_mobile/pull/11626", "updateAuthor": { "name": "jquick", "key": "jquick", "displayName": "Joshua Quick", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2020-04-13T22:11:27.000+0000", "updated": "2020-04-13T23:12:12.000+0000" }, { "id": "455114", "author": { "name": "ssekhri", "key": "ssekhri", "displayName": "Satyam Sekhri", "active": true, "timeZone": "America/Los_Angeles" }, "body": "FR Passed.\r\nWaiting for Jenkins build on master.", "updateAuthor": { "name": "ssekhri", "key": "ssekhri", "displayName": "Satyam Sekhri", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2020-04-14T01:51:47.000+0000", "updated": "2020-04-14T01:51:47.000+0000" }, { "id": "455129", "author": { "name": "lchoudhary", "key": "lchoudhary", "displayName": "Lokesh Choudhary", "active": true, "timeZone": "America/Los_Angeles" }, "body": "PR's Merged.", "updateAuthor": { "name": "lchoudhary", "key": "lchoudhary", "displayName": "Lokesh Choudhary", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2020-04-14T18:08:20.000+0000", "updated": "2020-04-14T18:08:20.000+0000" }, { "id": "455147", "author": { "name": "ssekhri", "key": "ssekhri", "displayName": "Satyam Sekhri", "active": true, "timeZone": "America/Los_Angeles" }, "body": "Verified on:\r\nMac OS: 10.15.4\r\nSDK: 9.0.1.v20200415071927, 9.1.0.v20200415075143\r\nAppc CLI: 8.0.0\r\nJDK: 11.0.4\r\nNode: 10.17.0\r\nStudio: 6.0.0.202003181504\r\nDevice: Pixel3(v10.0) emulator,", "updateAuthor": { "name": "ssekhri", "key": "ssekhri", "displayName": "Satyam Sekhri", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2020-04-15T18:03:17.000+0000", "updated": "2020-04-15T18:03:17.000+0000" } ], "maxResults": 8, "total": 8, "startAt": 0 } } }