先上图(舒服):
- 所有模块统一编译环境(很重要)
support包版本28.0.0 (推荐这个版本)
buildToolsVersion "28.0.3"
targetSdkVersion 28
com.android.tools.build:gradle:3.2.0+ (最低3.2)
gradle4.6+
一些三方库support包会造成冲突 强制指定版本
根目录build.gradle
configurations.all {
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
def requested = details.requested
if (requested.group == 'com.android.support') {
if (!requested.name.startsWith("multidex")) {
details.useVersion '28.0.0'
}
}
}
}
使用rebuild project编译通过进入下一步
遇到了一个小问题
canvas.save(Canvas.CLIP_SAVE_FLAG)报错,更改为 canvas.save();
- gradle.properties配置
## Android 插件会使用对应的 AndroidX 库而非支持库。
android.useAndroidX=true
## Android 插件会通过重写现有第三方库的二进制文件,自动将这些库迁移为使用 AndroidX。
android.enableJetifier=true
- 从菜单栏中依次选择 Refactor > Migrate to AndroidX
- rebuild project 解决报错
在这一步主要遇到的坑就是版本冲突编译不过,然后寻找冲突的库很麻烦,如果第一步支持库版本号为28并且编译通过的话那么这一步问题不会太多。我是踩了坑然后回退代码重新更改为28重新来过。 - 搜索support包引用更改
由于这个替换工具有一些小问题,不可能做到全部替换,所以我们需要手动全局替换,主要存在于未被引用到的类和xml。官方类类映射对照表 - 混淆更改
# androidx
-keep class com.google.android.material.** {*;}
-keep class androidx.** {*;}
-keep public class * extends androidx.**
-keep interface androidx.** {*;}
-keep @androidx.annotation.Keep class *
-keepclassmembers class * {
@androidx.annotation.Keep *;
}
-dontwarn com.google.android.material.**
-dontnote com.google.android.material.**
-dontwarn androidx.**
- 版本库统一管理
由于升级插件的原因,原来的使用gradle全局管理依赖的不在生效直接被替换了,比如以前引用是这样的
implementation rootProject.ext.dependencies.libSupportAppcompatV7
被替换之后就是这样了
implementation "androidx.appcompat:appcompat:1.0.0"
为了我们方便管理我们需要手动更改一下,然后根据我们的需要在对应的引入文件替换。
//androidx
libXAnnotation : "androidx.annotation:annotation:${ANDROIDX_LIB_VERSION}",
libXAppcompat : "androidx.appcompat:appcompat:${ANDROIDX_LIB_VERSION}",
libXRecyclerview : "androidx.recyclerview:recyclerview:${ANDROIDX_LIB_VERSION}",
libXCoreKtx : "androidx.core:core-ktx:$ANDROIDX_LIB_VERSION",
libXFragmentKtx : "androidx.fragment:fragment-ktx:$ANDROIDX_LIB_VERSION",
libXSwiperefreshlayout : "androidx.swiperefreshlayout:swiperefreshlayout:$ANDROIDX_LIB_VERSION",
libXMaterial : "com.google.android.material:material:${ANDROIDX_LIB_VERSION}",//替代com.android.support:design
libXMultidex : 'androidx.multidex:multidex:2.0.0',
libConstraintLayout : 'androidx.constraintlayout:constraintlayout:1.1.3',//暂时有需要用到
libXCardView : 'androidx.cardview:cardview:1.0.0',//替代com.android.support:cardview-v7
具体查看官方组建映射对照表,更换之后编译解决报错即可,主要是一些三方依赖造成依赖冲突的问题,可以类似第一步强制指定版本号。
参考链接:
官方androidx说明
android.support升级到androidx踩坑记录