解決安卓Android7.0兼容問題(兼容Android6.0到Android9.0)
當你處於Android7.0環境下開發項目快收尾完了的時候進入測試環境Android9.0發生錯誤
是不是特別鬱悶怎麼突然錯誤了我們先來看看錯誤(這裏使用HUAWEI Mate 20 Pro爲例,ps:華爲的系統是基於安卓之上再次開發封裝的系統):
錯誤:
Process: com.dynamic_img1.braindevelopment, PID: 5221
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object com.alibaba.fastjson.JSONObject.get(java.lang.Object)' on a null object reference
at com.jzy.braindevelopment.MainActivity$1.handleMessage(MainActivity.java:60)
沒錯,在Android7.0環境下運行好好的程序到了Android9.0環境下發生錯誤
不難看出空指針問題,接下來我們看看Android7.0與Android9.0的不同:
經過百度的瞭解發現有那麼幾個改動
1.Android9.0訪問網絡有改變了 像之前的okhttp都不能跑了
2.Black list:三方應用不允許調用
3.API 等級低於24的設備上,org.apache.http.legacy 庫不可用(在這些設備上,Apache HTTP 類在 bootclasspath 上可用)
總而言之就是在網絡請求方面發生了改動
接下來就是解決這些問題
找到項目的父build.gradle
改成:
targetSdkVersion 26
找到AndroidManifest.xml 文件中添加:
<uses-libraryandroid:name="org.apache.http.legacy"android:required="false"/>
項目成功在Android9.0環境下運行
想着兼容了Android9.0不如連Android6.0一起兼容當我準備好環境跑時,Android Studio提示:
好吧,又發生錯誤了繼續修改還是找到項目的父build.gradle
targetSdkVersion 26
minSdkVersion 23
maxSdkVersion 29
再次運行成功完美解決了Android6.0–Android9.0差異
環境參數:
defaultConfig {
applicationId "com.dynamic_img1.braindevelopment"
useLibrary 'org.apache.http.legacy'
versionCode currentVersionCode
versionName currVersionName
testInstrumentationRunner "android.support.Test.runner.AndroidJUnitRunner"
vectorDrawables.useSupportLibrary = true
signingConfig signingConfigs.debug
targetSdkVersion 26
minSdkVersion 23
maxSdkVersion 29
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileSdkVersion = 29
}
因爲公司沒前端而接觸安卓前端開發確實有點頭疼,有興趣學習安卓的小夥伴可以看下《第一行代碼——Android》非常詳情
如有錯誤聯繫更正謝謝