{ "id": "172467", "key": "TIMOB-26472", "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": "20033", "name": "Release 9.0.0", "archived": false, "released": true, "releaseDate": "2020-03-18" } ], "resolution": { "id": "1", "description": "A fix for this issue is checked into the tree and tested.", "name": "Fixed" }, "resolutiondate": "2020-01-31T11:00:19.000+0000", "created": "2018-10-19T08:29:04.000+0000", "priority": { "name": "High", "id": "2" }, "labels": [ "android", "dependencies", "library" ], "versions": [], "issuelinks": [ { "id": "57867", "type": { "id": "10003", "name": "Relates", "inward": "relates to", "outward": "relates to" }, "inwardIssue": { "id": "172006", "key": "TIMOB-26262", "fields": { "summary": "Android: Update used Google Support libraries to revision 28", "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": "Medium", "id": "3" }, "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-01-31T11:00:19.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" } ], "description": "The Android \"Support Libraries\" have been deprecated by Google in favor of the AndroidX libraries. Google will no longer be making updates to the Support Libraries (v28 is their last version). New features will be going to AndroidX instead.\r\nhttps://developer.android.com/jetpack/androidx\r\n\r\nThe Titanium SDK and its modules needs to migrate to the AndroidX libraries. Titanium's app builds will also need to leverage Google's \"jetifier\" tool which replaces prebuilt Android libraries, replaces their references from the Support libraries to AndroidX by hacking the binary (this is a Google sanctioned feature) so that 3rd party modules will be backward compatible.\r\nhttps://developer.android.com/jetpack/androidx/migrate\r\n\r\nAndroidX is best implemented in the app \"build.gradle\" file via...\r\n{code:groovy}\r\nandroid {\r\n\tuseAndroidX true\r\n\tenableJetifier true\r\n}\r\n{code}\r\n", "attachment": [], "flagged": false, "summary": "Android: Replace support libraries with AndroidX", "creator": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "subtasks": [], "reporter": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "environment": null, "comment": { "comments": [ { "id": "446101", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "Hey there (cc [~gmathews] & [~jquick]),\r\n\r\nis this on the roadmap for 2019? I see this being done in other frameworks and wondering what the benefits or downsides this has.", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2019-02-15T16:32:37.000+0000", "updated": "2019-02-15T16:32:37.000+0000" }, { "id": "446114", "author": { "name": "jquick", "key": "jquick", "displayName": "Joshua Quick", "active": true, "timeZone": "America/Los_Angeles" }, "body": "The plan is to first implement gradle support [TIMOB-19300] and then update the support libraries to rev 28 [TIMOB-26262], which is the last revision from Google that is not \"androidx\". Updating to rev 28 maintains backward compatibility and avoids having to recompile all modules.\r\n\r\nWe can't replace our support libraries with androidx libraries \"yet\" since that would break most modules and hyperloop users. Currently, everyone has hard-coded java imports to {{android.support.v4}}, {{android.support.v7}}, etc. and assumes Titanium includes those libraries. There will have to be a migration period. Google has a migration tool (such as jetifier) to help with this, but it is imperfect.\r\n_(This isn't trivial. Worst case scenario is a module that depends on a 3rd party pre-compiled JAR that depends on the \"old\" support libraries.)_\r\n\r\nOnce we have gradle support, you'll be able to reference the dependencies you want (such as androidx). The next challenge on our end is dealing with version conflicts such as the warning below. The below isn't unique to androidx. It'll happen if 2 libraries references 2 different revision of support libraries in general, such as between rev 27 and rev 28. (Gradle doesn't magically fix this.)\r\n{code}\r\nAll com.android.support libraries must use the exact same version specification\r\n{code}\r\n", "updateAuthor": { "name": "jquick", "key": "jquick", "displayName": "Joshua Quick", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2019-02-15T19:59:46.000+0000", "updated": "2019-02-15T20:01:37.000+0000" }, { "id": "446115", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "Sounds like a plan, thanks Josh!", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2019-02-15T20:42:40.000+0000", "updated": "2019-02-15T20:42:40.000+0000" }, { "id": "447106", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "First library updates are Android-X only now, like Lottie. I hope this can be scheduled soon.", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2019-03-24T15:56:25.000+0000", "updated": "2019-03-24T15:56:25.000+0000" }, { "id": "447507", "author": { "name": "titanium@webmasterei-hamburg.de", "key": "titanium@webmasterei-hamburg.de", "displayName": "Rainer Schleevoigt", "active": true, "timeZone": "Europe/Berlin" }, "body": "The Oboe library https://github.com/google/oboe/tree/master/samples/audio-device has changed to androidx 3 month ago. In my case I can simple downgrade ;-)) (they only use androidx for annotations)", "updateAuthor": { "name": "titanium@webmasterei-hamburg.de", "key": "titanium@webmasterei-hamburg.de", "displayName": "Rainer Schleevoigt", "active": true, "timeZone": "Europe/Berlin" }, "created": "2019-04-07T12:51:41.000+0000", "updated": "2019-04-07T12:51:41.000+0000" }, { "id": "451553", "author": { "name": "michael", "key": "michael", "displayName": "Michael Gangolf", "active": true, "timeZone": "Europe/Berlin" }, "body": "Any update here? The current ti.playservices (https://github.com/appcelerator-modules/ti.playservices/releases/tag/v16.1.5) module is not working correctly because it tries to use androidx libraries (https://github.com/appcelerator-modules/ti.playservices/issues/29). That should be downgraded in order to make it work for devs", "updateAuthor": { "name": "michael", "key": "michael", "displayName": "Michael Gangolf", "active": true, "timeZone": "Europe/Berlin" }, "created": "2019-09-21T07:57:09.000+0000", "updated": "2019-09-21T07:57:09.000+0000" }, { "id": "451575", "author": { "name": "jquick", "key": "jquick", "displayName": "Joshua Quick", "active": true, "timeZone": "America/Los_Angeles" }, "body": "We need to update the Titanium build system to use gradle first, which we're actively working on now. Once done, we can then update Titanium to use AndroidX. Google's gradle build system comes with a tool to change the binary in all JARs to replace the Android Support library references with AndroidX references. This is needed so that 3rd party prebuilt JARs won't break.\r\n\r\nFor now, yes, we should downgrade \"ti.playservices\". I agree.", "updateAuthor": { "name": "jquick", "key": "jquick", "displayName": "Joshua Quick", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2019-09-23T17:36:36.000+0000", "updated": "2019-09-23T17:36:36.000+0000" }, { "id": "451860", "author": { "name": "jonkravetz", "key": "jonkravetz", "displayName": "jon kravetz", "active": true, "timeZone": "America/Los_Angeles" }, "body": "Does this mean we can't use AndroidX libraries in a titanium module? This would be unfortunate. Currently trying to implement workmanager in a titanium module. Would we need to use Workmanager 1.01, since Workmanager 2+ has androidx dependencies? I have been trying to get the newer workmanager to work for days, but I'm getting a conflict when trying to compile my application with the module due to support library (V4). Would you suggest abandoning the use of workmanager altogether?\r\n\r\nDocumentation for android apps/modules without gradle or androidx is not easy to find at this point.", "updateAuthor": { "name": "jonkravetz", "key": "jonkravetz", "displayName": "jon kravetz", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2019-10-04T18:20:33.000+0000", "updated": "2019-10-04T18:20:33.000+0000" }, { "id": "451864", "author": { "name": "jquick", "key": "jquick", "displayName": "Joshua Quick", "active": true, "timeZone": "America/Los_Angeles" }, "body": "bq. Does this mean we can't use AndroidX libraries in a titanium module?\r\n\r\nYou cannot at the moment.\r\n\r\nThis is because you can't use a mix of the old Android support libraries and AndroidX libraries at the same time. This will cause a conflict. Every module, including the core Titanium libraries, would have to transition over to AndroidX for this to work.\r\n\r\nThis is something we're looking into doing in Titanium 9.0.0, but we don't have an ETA at the moment. (This is a huge task.)", "updateAuthor": { "name": "jquick", "key": "jquick", "displayName": "Joshua Quick", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2019-10-04T19:21:35.000+0000", "updated": "2019-10-04T19:21:35.000+0000" }, { "id": "453281", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "Pull request: https://github.com/appcelerator/titanium_mobile/pull/11409", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2019-12-22T10:57:08.000+0000", "updated": "2019-12-22T10:57:08.000+0000" }, { "id": "453663", "author": { "name": "jquick", "key": "jquick", "displayName": "Joshua Quick", "active": true, "timeZone": "America/Los_Angeles" }, "body": "I'm closing the above PR in favor of the one below.\r\n(But I did cherry-pick most of Hans' migration code. Thanks Hans!)\r\n\r\nPR (master): https://github.com/appcelerator/titanium_mobile/pull/11428", "updateAuthor": { "name": "jquick", "key": "jquick", "displayName": "Joshua Quick", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2020-01-11T06:27:07.000+0000", "updated": "2020-01-11T06:27:07.000+0000" }, { "id": "453967", "author": { "name": "smohammed", "key": "smohammed", "displayName": "Samir Mohammed", "active": true, "timeZone": "America/Los_Angeles" }, "body": "Closing ticket, fix verified in SDK version {{9.0.0.v20200130113429}}\r\n\r\nTest and other information can be found at: \r\nhttps://github.com/appcelerator/titanium_mobile/pull/11428", "updateAuthor": { "name": "smohammed", "key": "smohammed", "displayName": "Samir Mohammed", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2020-01-31T11:00:06.000+0000", "updated": "2020-01-31T11:00:06.000+0000" } ], "maxResults": 12, "total": 12, "startAt": 0 } } }