社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
当你处于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不如连Android6.0一起兼容当我准备好环境跑时,Android Studio提示:
好吧,又发生错误了继续修改还是找到项目的父build.gradle
targetSdkVersion 26
minSdkVersion 23
maxSdkVersion 29
环境参数:
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》非常详情
如有错误联系更正谢谢
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!