最近,我将我的项目迁移到使用AndroidX
我的应用程序在迁移到AndroidX之后崩溃,原因是库仍然使用Support Library。下面是我的第三方依赖项/库的列表,它未能转换为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.x.x,因为主要的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.enableJetifier=true
& android.useAndroidX=true
:app:dependencies
,第三方依赖项已经迁移到使用AndroidX工件,但只有少数(上面的依赖项列表失败)。./root_project/.idea
、./root_project/.gradle
和~/.gradle/caches
(要修复编译错误/IDE错误,引用:AndroidX迁移依赖/库 )~/.gradle
目录中的jetified-*
库jetified
aar存在,不幸的是,它对clevertap
和上面列出的其他库失败了。
我的结论是,jetifier
的工作方式是重写第三方库的二进制.class
(如果Support Library导入/类检测到,并分别将其修改为AndroidX )。
但在我的示例中,上面列出的依赖项没有使用正确的AndroidX导入并导致运行时崩溃,这是因为支持库具有传递依赖关系。
嘲笑者目前也不支持第三方库中的传递依赖吗?但是,奇怪的是,它在一些图书馆工作(上面没有列出)。
更新1
同时(快速修正):
aar
使用aar
命令aar
及其依赖项手动添加到app/build.gradle.kts
中作为flatDirs
这真的是个解决办法吗,还有什么更好的办法吗?
更新2
我也使用了一个维护版本的恰克。但也发现了同样的问题:
cannot generate view binders com.sun.tools.javac.code.Symbol$CompletionFailure: class file for android.support.v7.widget.AppCompatImageView not found
在检查了第三方库之后,在对这个库使用aar
之后,我还手动添加了jetifier-standalone
:
com.clevertap.android:clevertap-android-sdk:3.4.2
com.github.nikartm:image-support:1.0.5
许多人还建议使用implementation
,但对我来说,我不想用传递依赖来充实我的项目
在其他情况中,还建议如下:
jetifier-standalone
作为本地aar (这是我现在最好的方法)。除非jetifier
能够在正式文档中说明这一点,因为它的限制:https://developer.android.com/jetpack/androidx/releases/jetifier
看来我们至少可以做些什么,希望许多第三方作家很快就能升级到AndroidX。
这里有一篇值得参考的文章:
发布于 2020-07-13 20:21:39
原来我目前的解决办法是使用以下方法:https://github.com/bumptech/glide/issues/3080#issuecomment-495430590
将黑名单变成白名单的神奇法则
android.jetifier.blacklist=^(?!.*[\\\\/](com\\.github\\.bumptech\\.glide|com\\.clevertap\\.android|com\\.facebook\\.android|com\\.github\\.nikartm|com\\.github\\.PierfrancescoSoffritti|com\\.github\\.prolificinteractive)[\\\\/]).*$
如果引发NoClassDef
异常,则将库包名称添加到android.jetifier.blacklist
中,以使其白化。
在上述情况下,我试图用白名单:
https://stackoverflow.com/questions/61179356
复制相似问题