新項目接手以后闯第,發(fā)現(xiàn)targetSDK僅為22能犯,導(dǎo)致在新手機上運行時都會提示“此應(yīng)用專為舊版Android打造”,影響使用體驗沈贝。計劃逐步適配高版本API杠人。將適配過程中發(fā)現(xiàn)的問題記錄下來,方便其他人參考及后續(xù)處理相似問題宋下。如有任何錯誤嗡善,煩請讀者指正~
targetSDK 23 (Android6)
將targetSdkVersion升至23后,首先面對的就是權(quán)限問題学歧。Android 23對危險權(quán)限做出了限制罩引,必須要動態(tài)獲取。這里不詳細(xì)記錄危險權(quán)限列表枝笨,需要可以自行搜索袁铐。
問題是在啟動的Activity還沒有創(chuàng)建的時候揭蜒,應(yīng)用就直接崩潰了,猜測問題在Application類里面剔桨。經(jīng)檢查屉更,在Application啟動的Service當(dāng)中,有幾個涉及到文件操作洒缀,而文件操作顯然是涉及存儲這一權(quán)限的瑰谜。
android.permission.READ_EXTERNAL_STORAGE
android.permission.WRITE_EXTERNAL_STORAGE
因此,需要對代碼進行重構(gòu)树绩,將這些業(yè)務(wù)邏輯搬至啟動的Activity里面萨脑,最重要的,還是引入權(quán)限動態(tài)申請饺饭。為了方便起見渤早,引入Rxpermission:
//RxPermission
implementation ('com.github.tbruyelle:rxpermissions:0.10.2'){
? ? exclude group:'com.android.support'
}(exclude的原因是因為android.support那些包版本太低。砰奕。蛛芥。)
在onCreate里面使用RxPermission進行權(quán)限申請:
RxPermissions rxPermissions =new RxPermissions(this);
rxPermissions.request(Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_PHONE_STATE,
Manifest.permission.CAMERA,
Manifest.permission.ACCESS_COARSE_LOCATION)
.subscribe(new Consumer() {
@Override
? ? ? ? ? ? public void accept(Boolean aBoolean)throws Exception {
if (!aBoolean){
//need to approve later
? ? ? ? ? ? ? ? ? ? Log.w(TAG,"permission is denied");
}
}
});
targetSDK
31(Android12)
Android Studio升級到Arctic Fox之后,提供了Android 12相關(guān)的提醒军援,并且已經(jīng)可以把targetSDK提升到31仅淑。
1 exported
提升之后,遇到的第一個問題是清單文件的報錯胸哥,提示用到intent-filter的activity均需聲明android:exported的值涯竟,想必是為了加強安全性的控制。根據(jù)實際需求(是否可以被跨進程調(diào)用)設(shè)置對應(yīng)值即可解決空厌。
未完待續(xù)庐船。。嘲更。