背景:
接手的老項(xiàng)目targetSdkVersion=28,為了使用新的api,養(yǎng)成好的編碼習(xí)慣,第三方sdk升級(jí)恰梢,Google上架等一些列原因吧,需要升級(jí)targetSdkVersion梗掰,擁抱新變化...代價(jià)就是一些列問題嵌言,記錄下留個(gè)腳印。
當(dāng)前時(shí)間Google要求上架是31及穗,對(duì)應(yīng)Android12摧茴,我這邊直接升級(jí)到33了,
android = [
compileSdkVersion: 33,
buildToolsVersion: "30.0.2",
minSdkVersion : 19,
targetSdkVersion : 33,
versionCode : 100,
versionName : "1.0.0"
]
1.Installed Build Tools revision 33.0.0 is corrupted. Remove and install again using the SDK Manager.
buildToolsVersion編譯版本設(shè)置30以上會(huì)有這個(gè)報(bào)錯(cuò)埂陆,buildeToolVersion是你構(gòu)建工具的版本苛白,其中包括了打包工具aapt、dx等等焚虱。這個(gè)工具的目錄位于..{$自己的sdk路徑}/build-tools/XX.XX.XX购裙。
這個(gè)可以不設(shè)置,不設(shè)置默認(rèn)就是最新的鹃栽;也可以考慮降低一下躏率;這兩個(gè)方式我這邊測試都可以編譯通過,網(wǎng)上也有說修改文件的,個(gè)人不喜歡的方式薇芝,嘗試新建一個(gè)項(xiàng)目蓬抄,也是沒有設(shè)置這個(gè)buildToolsVersion。
2.Type mismatch: inferred type is String? but String was expected
升級(jí)之后編譯檢查更嚴(yán)格了夯到,不規(guī)范的代碼都要修改嚷缭,沒啥可拉扯的,必須改了耍贾,苦力活~
1.確定是非空可以使用str!! 阅爽;
2.不確定的話可以使用?:"" 給個(gè)默認(rèn)值(看下代碼如果字段有默認(rèn)值,這里就一樣逼争,沒有默認(rèn)值給個(gè)空字符比null靠譜的)
推薦后者优床,起碼可以保證空安全,不會(huì)造成崩潰誓焦。這種一般都是剛開始用kotlin對(duì)空安全使用不規(guī)范造成的,編譯也不會(huì)報(bào)錯(cuò)着帽,額 我的項(xiàng)目可能需要改個(gè)99+處杂伟,整吧...逃不掉!
3.安裝失斎院病:INSTALL_PARSE_FAILED_MANIFEST_MALFORMED
安裝失敗赫粥,解決思路是去項(xiàng)目中所有的清單文件看看有啥報(bào)錯(cuò)
1.permission is only granted to system apps
報(bào)錯(cuò)位置添加 tools:ignore="ProtectedPermissions"
2.As of Android 12, android:exported must be set; use true to make the activity available to other apps, and false otherwise. For launcher activities, this should be set to true.
<intent-filter>標(biāo)簽所在的Activity,provider予借,receiver越平,service里 添加加 android:exported="true"
3.經(jīng)過上述還是存在安裝失敗的情況,要考慮是不是第三方sdk問題了
我這邊遇到的是AndroidStudio只提示安裝失敗也沒暴露什么信息灵迫,需要自己去看第三方的一些清單文件是不是也存在上述情況秦叛,有的話就需要更新輪子的版本。
- (如果猜測是第三方sdk問題瀑粥,Androidstudio 直接運(yùn)行安裝可能是沒有詳細(xì)報(bào)錯(cuò)信息的挣跋,我是通過adb install apk路徑 安裝的方式發(fā)送有個(gè)第三方依賴報(bào)錯(cuò)的,升級(jí)一下解決問題) *
4.使用 Android Studio 的 "Lint" 工具來檢查清單文件中的錯(cuò)誤或潛在問題狞换,tools-->App Links Assistant..
4.細(xì)分媒體權(quán)限:
將 READ_EXTERNAL_STORAGE 細(xì)分為IAMGES避咆、VIDEO、AUDIO權(quán)限