先上圖(舒服):
升級(jí)結(jié)果展示
- 所有模塊統(tǒng)一編譯環(huán)境(很重要)
support包版本28.0.0 (推薦這個(gè)版本)
buildToolsVersion "28.0.3"
targetSdkVersion 28
com.android.tools.build:gradle:3.2.0+ (最低3.2)
gradle4.6+
一些三方庫(kù)support包會(huì)造成沖突 強(qiáng)制指定版本
根目錄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編譯通過(guò)進(jìn)入下一步
遇到了一個(gè)小問(wèn)題
canvas.save(Canvas.CLIP_SAVE_FLAG)報(bào)錯(cuò)篮条,更改為 canvas.save();
- gradle.properties配置
## Android 插件會(huì)使用對(duì)應(yīng)的 AndroidX 庫(kù)而非支持庫(kù)。
android.useAndroidX=true
## Android 插件會(huì)通過(guò)重寫(xiě)現(xiàn)有第三方庫(kù)的二進(jìn)制文件,自動(dòng)將這些庫(kù)遷移為使用 AndroidX缭付。
android.enableJetifier=true
- 從菜單欄中依次選擇 Refactor > Migrate to AndroidX
-
rebuild project 解決報(bào)錯(cuò)
在這一步主要遇到的坑就是版本沖突編譯不過(guò)漩氨,然后尋找沖突的庫(kù)很麻煩,如果第一步支持庫(kù)版本號(hào)為28并且編譯通過(guò)的話那么這一步問(wèn)題不會(huì)太多莱找。我是踩了坑然后回退代碼重新更改為28重新來(lái)過(guò)。 -
搜索support包引用更改
由于這個(gè)替換工具有一些小問(wèn)題蝙泼,不可能做到全部替換,所以我們需要手動(dòng)全局替換劝枣,主要存在于未被引用到的類(lèi)和xml汤踏。官方類(lèi)類(lèi)映射對(duì)照表 - 混淆更改
# 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.**
-
版本庫(kù)統(tǒng)一管理
由于升級(jí)插件的原因,原來(lái)的使用gradle全局管理依賴的不在生效直接被替換了舔腾,比如以前引用是這樣的
implementation rootProject.ext.dependencies.libSupportAppcompatV7
被替換之后就是這樣了
implementation "androidx.appcompat:appcompat:1.0.0"
為了我們方便管理我們需要手動(dòng)更改一下溪胶,然后根據(jù)我們的需要在對(duì)應(yīng)的引入文件替換。
//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',//暫時(shí)有需要用到
libXCardView : 'androidx.cardview:cardview:1.0.0',//替代com.android.support:cardview-v7
具體查看官方組建映射對(duì)照表稳诚,更換之后編譯解決報(bào)錯(cuò)即可哗脖,主要是一些三方依賴造成依賴沖突的問(wèn)題,可以類(lèi)似第一步強(qiáng)制指定版本號(hào)扳还。