解決安卓Android7.0兼容問題

解決安卓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》非常詳情
如有錯誤聯繫更正謝謝

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章