之前的android個人項目有一年多沒有維護了,盡兩年的重心也主要是小程序開發及.net,.net core相關開發,android從8以後開發比較少了,主要是維護,而因爲電腦一直沒換,所以維護也僅僅是解決部分bug,沒有做大版本升級...
近一個月來,不管是公司電腦還是個人電腦都換了,然後重新安裝了新的as及相關插件,於是,打開舊項目就有很多問題了,最初是原項目gradle版本過低,新裝的5.4.1,項目中用到的是3.5.3,編譯時老提示最低編譯版本爲26,然後又是butterknife版本用了10.2.1,然後提示對應build sdk要用28,於是,又有一大堆問題需要去解決。
這裏記錄下Android低版本升級到高版本後的幾個問題及解決方案:
問題一:butterknife10.2.1與android Api 28.0.0 support-v4/v7庫衝突問題
因爲太久沒搞android,所以這一問題花了些時間去處理,後來出現了androidx替代v4/v7包,於是找到了對應的解決方案:gradle.properties中增加下面兩句(其實28新建項目會帶有這兩句,只是我這是老項目,所以沒有,需要手動添加)
android.useAndroidX=true
android.enableJetifier = true
然後gradle sync,之前用到v4/v7的地方會報錯,這裏我也暫時沒啥好方法,只有一個個改,能想到的簡單點的操作有兩點:1.使用ctrl+R替換,2.用alt+enter自動添加import;這裏需要注意的是不僅僅是類中需要改,佈局文件中,AndroidManifest.xml中也可能要改。
ps: 後來發現這裏有比較輕鬆的解決方法,在gradle和build sdk切換爲高版本後使用Migrate to Androidx自動替換v4/v7位androidx, https://www.jianshu.com/p/f7a7a8765294
問題二:butterknife的@Bind(R .id .xxx)找不到
用@BindView(R .id .xxx)替換,全局替換下即可
問題三:java.lang.BootstrapMethodError: Exception from call site #0 bootstrap method問題
這裏需要在build.gradle的android節點下增加
compileOptions{
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
以及,Refactor菜單,點擊Migrate to Androidx...
問題四:Flag android.useDeprecatedNdk is no longer supported and will be removed in the next...
這裏去掉gradle.properties中的android.useDeprecatedNdk=true,換成在build.gradle中使用cmake即可
問題五:butterknife.bind()後,控件對象還是null
在gradle中應用butterknife,應該以下兩句都有
implementation 'com.jakewharton:butterknife:10.2.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.1'
問題六:Glide的crossfade沒有該方法
使用 .transition(withCrossFade()) 替代 .crossFade()
其實還有很多其他問題,只是這幾個問題是剛解決的,還留有一些記憶,就先記錄下來,後續再彙總其他問題
個人博客: IT老五 簡書:ThinkinLiu