解决安卓Android7.0兼容问题(兼容Android6.0到Android9.0)
当你处于Android7.0环境下,开发的app直播源代码快收尾完了的时候,进入测试环境Android9.0发生错误
是不是特别郁闷怎么突然错误了,我们先来看看错误(这里使用HUAWEI Mate 20 Pro为例,ps:华为的系统是基于安卓之上再次开发封装的系统):
Process: com.dynamic_img1.braindevelopment, PID: 5221java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object com.alibaba.fastjson.JSONObject.get(java.lang.Object)' on a null object referenceat com.jzy.braindevelopment.MainActivity$1.handleMessage(MainActivity.java:60)
没错,在Android7.0环境下运行好好的app直播源代码到了Android9.0环境下发生错误
不难看出空指针问题,接下来我们看看Android7.0与Android9.0的不同:
经过百度的了解发现有那么几个改动
1.Android9.0访问网络有改变了 像之前的okhttp都不能跑了
2.Black list:三方应用不允许调用
3.API 等级低于24的设备上,org.apache.http.legacy 库不可用(在这些设备上,Apache HTTP 类在 bootclasspath 上可用)
总而言之就是在网络请求方面发生了改动
接下来就是解决这些问题
找到app直播源代码项目的父build.gradle
改成:
targetSdkVersion 26
找到AndroidManifest.xml 文件中添加:
<uses-libraryandroid:name="org.apache.http.legacy"android:required="false"/>
项目成功在Android9.0环境下运行
想着兼容了Android9.0不如连Android6.0一起兼容,当我准备好环境跑时,Android Studio提示:
好吧,又发生错误了继续修改,还是找到app直播源代码项目的父build.gradle
targetSdkVersion 26minSdkVersion 23maxSdkVersion 29
再次运行成功完美解决了Android6.0–Android9.0差异
环境参数:
defaultConfig {applicationId "com.dynamic_img1.braindevelopment"useLibrary 'org.apache.http.legacy'versionCode currentVersionCodeversionName currVersionNametestInstrumentationRunner "android.support.Test.runner.AndroidJUnitRunner"vectorDrawables.useSupportLibrary = truesigningConfig signingConfigs.debugtargetSdkVersion 26minSdkVersion 23maxSdkVersion 29}buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'}}compileSdkVersion = 29
}
以上就是有关于app直播源代码和安卓兼容的过程,如有错误联系更正谢谢
声明:本文由云豹科技转发自靜靜同學博客,如有侵权请联系作者删除