Android support库迁移AndroidX
原因:目前很多流行的开源库都是AndroidX项目,并不支持Android support,加入到项目会报以下错误:

Manifest merger failed : Attribute application@appComponentFactory value=(android.support.v4.app.CoreComponentFactory) from [com.android.support:support-compat:28.0.0] AndroidManifest.xml:22:18-91
is also present at [androidx.core:core:1.0.0] AndroidManifest.xml:22:18-86 value=(androidx.core.app.CoreComponentFactory).
Suggestion: add ‘tools:replace=”android:appComponentFactory”‘ to <application> element at AndroidManifest.xml:36:5-364:19 to override.

按照日志提示
添加tools:replace=“android:appComponentFactory”
会报其他错误,其实是AndroidX和Android support共存问题,改来改去,bug越来越多,而且AndroidX是趋势,谷歌会逐步放弃对 support 的升级和维护。

*步
将build tools更新到3.2.0,gradle更新到4.6。升级之后才会有一键转换功能

第二步
修改当前项目的 gradle.properties

android.useAndroidX=true
android.enableJetifier=true

android.useAndroidX=true 表示当前项目启用 AndroidX
android.enableJetifier=true 表示将依赖包也迁移到AndroidX 。如果取值为 false ,表示不迁移依赖包到AndroidX,但在使用依赖包中的内容时可能会出现问题,当然了,如果你的项目中没有使用任何三方依赖,那么,此项可以设置为 false
第三步

%title插图%num

之后会出现提示,勾选是否需要备份zip,建议勾选。

%title插图%num
studio会自动搜索项目需要修改的地方,只需跟修改项目名称一样,搜索完成后点击Do Refactor即可。

第四步
之后建议直接重启,直接运行的话studio的缓存会报很多异常,直接

%title插图%num
重启之后基本没有问题了,如果有问题那就是依赖库不支持AndroidX,升级成*新的即可。例如:

出现以下异常
The given artifact contains a string literal with a package reference ‘android.support.v4.content’ that cannot be safely rewritten. Libraries using reflection such as annotation processors need to be updated manually to add support for androidx.

解决办法
升级butterknife:

implementation ‘com.jakewharton:butterknife:10.1.0’
annotationProcessor ‘com.jakewharton:butterknife-compiler:10.1.0’
以及:
classpath ‘com.jakewharton:butterknife-gradle-plugin:10.1.0’

之后可能会出现以下问题:

[TAG] Failed to resolve variable ‘${junit.version}’

或者类似的Failed to resolve variable…
这种还是用老办法 :Invaldate Caches/Restart…

我这个项目刚开始比较好转移,内容多的老项目没试过,如果有其他问题,欢迎讨论