我最近迁移了我的项目以使用AndroidX
在我迁移到AndroidX后,我的应用程序崩溃了,因为库仍在使用Support Library。这是我的第 3 方依赖项/库的列表,它未能转换为AndroidX:
com.clevertap.android:clevertap-android-sdk:3.4.2
com.readystatesoftware.chuck:library:1.1.0
com.ncapdevi:frag-nav:2.4.0
jp.wasabeef:recyclerview-animators:2.3.0
com.github.chivorns:smartmaterialspinner:1.1.6
com.facebook.android:facebook-android-sdk:5.0.1
com.github.PierfrancescoSoffritti:AndroidYouTubePlayer:7.0.1
(我仍然无法将它升级到 10.xx,因为主要的 API 更改)com.github.nikartm:image-support:1.0.5
我的设置:
AS & AGP: 3.6.2
targetSdk: 29
minSdk: 16
Data & View Binding: Both enabled
Gradle DSL: Kotlin
Gradle: gradle-6.0.1-all
到目前为止我所做的:
- 使用Android Studio
Refactor -> Migrate to AndroidX
中的工具,但最终强制关闭它,因为需要很长时间 android.enableJetifier=true
&android.useAndroidX=true
- 使用 shell 脚本手动将支持库中的工件、类和导入映射到AndroidX,也感谢@Danlew感谢 @Danlew在 ADS '19 会谈中提到的这里
- 已经检查过我
:app:dependencies
的 3rd-party 依赖项已经迁移到使用AndroidX工件,但只有少数(上述依赖项列表失败) - 删除
./root_project/.idea
,./root_project/.gradle
&~/.gradle/caches
(修复编译错误/IDE错误,参考:AndroidX迁移依赖/库 - 了解喷射器:什么是喷射器?和官方安卓文档
- 做了一个解决方法来使用AndroidX注释处理器,比如:Glide & Dagger
- 检查aar 存在的库的
~/.gradle
目录,不幸的是,上面列出的 & 其他库失败了。jetified-*
jetified
clevertap
我的结论是,如果检测到支持库jetifier
导入/类,则通过重写.class
我们的第 3 方库的二进制文件,并将其分别修改(jetified/mapping)到AndroidX中。
但就我而言,上面列出的依赖项没有使用正确的 AndroidX导入并导致运行时崩溃,因为Support Library具有传递依赖项。
jetifier 目前是否也不支持 3rd-party 库中的传递依赖?但是,奇怪的是它适用于一些图书馆(上面未列出)
[更新 1]
与此同时(快速修复):
- 我确实一一详尽地下载了库的所有传递依赖项
- 使用
jetifier-standalone
命令代替库aar
- 手动将库
aar
及其依赖项添加到app/build.gradle.kts
asflatDirs
这真的是一种解决方法吗,我有什么更好的办法吗?
[更新 2]
我也使用了维护版本的卡盘。但也发现了同样的问题:
cannot generate view binders com.sun.tools.javac.code.Symbol$CompletionFailure: class file for android.support.v7.widget.AppCompatImageView not found
在检查了我的 3rd-party 库之后,我还最终手动添加了用于此库的aar
after :jetifier-standalone
com.clevertap.android:clevertap-android-sdk:3.4.2
com.github.nikartm:image-support:1.0.5
许多人还建议使用api
而不是,implementation
但对我来说,我不想让我的项目因传递依赖而变得臃肿
在其他 SO中也推荐如下:
- 要么删除图书馆,
- fork 支持 androidx / 等待作者升级
- 手动使用
jetifier-standalone
这些特定库,并作为本地 aar 包含(这是我现在最好的方法)
除非jetifier
能够在官方文档中说明这一点,否则由于其限制:https ://developer.android.com/jetpack/androidx/releases/jetifier
似乎我们能做的最少,希望许多第 3 方作者能尽快升级到AndroidX。
这是参考的奖励文章: