1、什麼是AndroidX?
官方文檔上說
AndroidX是對原始Android 支持庫的重大改進 。與支持庫不同,AndroidX軟件包是單獨維護和更新的。從版本1.0.0開始。您可以單獨更新項目中的AndroidX庫。
也就是說,以前的話,如果appcompat這個庫使用的是27這個版本,那麼其他的庫比如recyclerview也要使用27這個版本;使用AndroidX,就可以使用不同版本的庫,可以單獨更新項目中使用的庫。很多老的項目如果繼續維護,建議升級到 Android X
2.升級步驟:Android Studio 提供了非常方便的升級Android X的方法:Refactor ------>Migrate to AndroidX... -------->Migrate
3.遇到的坑
坑1:本以爲一鍵升級到了AndroidX 就大功告成了呢,迫不及待的運行下,結果一片紅😭,接下來排查原因,發現是註解的問題,目前項目中的註解一方面是support包中的 一方面是butterknife用到了註解 ,分析下問題毫無疑問就是butterknife 的事情了,目前項目中使用的butterknife的版本是8.81 去GitHub 看下butterknife :https://github.com/JakeWharton/butterknife 的最新版本是10.2.1 果斷升級到最新,然後在測試環境運行了下,真的運行起來了
這裏提醒下:升級Android X 一定要把 ButterKnife升級到10.0以上
implementation 'com.jakewharton:butterknife:10.2.1' annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.1'
坑2:debug 環境可以跑起來了 切換到Release再測試下 運行了一會,項目可以運行起來 但是運行起來直接Crash,看下日誌,class not found,毫無疑問就是混淆的問題了,仔細分析下確實有問題 之前混淆文件keep 了support類 但是沒有加AndroidX 的類 ,然後就去Android Developer :https://developer.android.com/jetpack/androidx 看了下文檔,加上混淆就可以了:
#------------------AndroidX start------------- -keep class com.google.android.material.** {*;} -keep class androidx.** {*;} -keep public class * extends androidx.** -keep interface androidx.** {*;} -dontwarn com.google.android.material.** -dontnote com.google.android.material.** -dontwarn androidx.** #------------------AndroidX End-------------
坑3:還有一些之前的三方庫 比如:Utilcode庫 ,Lottie庫等 要升級到最新的AndroidX的版本 一些方法使用上也可能會有差別
歡迎留言 撩,一起探討 個人GitHub:https://github.com/HuaDanJson