版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zsp_android_com/article/details/87710486
场景
应用htttp而非https系统禁应用进行该请求,WebView之url用http协议亦加载失败,https无影响。
分析
Android 9.0 (Pie)限明文流量网络请求,系统禁非加密流量请求。OkHttp3对明文流量场景默于Android 9.0 (Pie)抛异常CLEARTEXT communication to " + host + " not permitted by network security policy
。
if (!Platform.get().isCleartextTrafficPermitted(host)) {
throw new RouteException(new UnknownServiceException("CLEARTEXT communication to " + host + " not permitted by network security policy"));
}
解决一
- res新建xml目录并创一名为
network_security_config.xml
文件:<?xml version="1.0" encoding="utf-8"?> <network-security-config> <base-config cleartextTrafficPermitted="true" /> </network-security-config>
- 清单文件之application标签配:
android:networkSecurityConfig="@xml/network_security_config"
解决二
服务器和本地应用都改用https(推荐)。
解决三
targetSdkVersion降级至27。
引错
场景
集成帆软用android-async-http-1.4.6-fr.jar
报错。
日志
Didn't find class "com.loopj.android.http.AsyncHttpResponseHandler" on path: DexPathList[[zip file "/data/app/com.self.zsp.dfs-8-
Vx5BPhY0KAxa3nrB_wQQ==/base.apk", zip file "/data/app/com.self.zsp.dfs-8-
Vx5BPhY0KAxa3nrB_wQQ==/split_lib_dependencies_apk.apk", zip file "/data/app/com.self.zsp.dfs-8-
Vx5BPhY0KAxa3nrB_wQQ==/split_lib_slice_0_apk.apk", zip file "/data/app/com.self.zsp.dfs-8-
Vx5BPhY0KAxa3nrB_wQQ==/split_lib_slice_1_apk.apk", zip file "/data/app/com.self.zsp.dfs-8-
Vx5BPhY0KAxa3nrB_wQQ==/split_lib_sl
com.fr.android.platform.utils.http.IFNetworkHelper.loadJSONDataAsyncWithWaitDialog(IFNetworkHelper.java:189)
分析
路径下找不到指定类,通因构建路径问题致。
解决
类名以字符串形式标识,可信度较低。调Class.forName("")、Class.findSystemClass("")、Class.loadClass("")等时找不到类名将报错。
- 找不到的Class是系统Class时或为系统版本兼容、厂家Rom兼容问题。找对应设备尝试重现,更换API或自实现Class替代。
- 找不到的Class是应用自由Class(含第三方SDK的Class)。反编译查对应apk真缺该Class否,再进行定位,这种往往发生在:
- 所找Class被混淆,存但名变;
- 所找Class未被打入Dex,确实不存在。或自己疏忽,或编译环境冲突;
- 所找Class确实存在,但Classlorder找不到该Class。通因Classloder是自实现(插件化应用常见)。
建议
所找Class是系统Class时或为系统版本兼容、厂家Rom兼容问题且场景Android 9.0 (Pie)(限明文流量网络请求,系统禁非加密流量请求)时设compileSdkVersion
、targetSdkVersion
为27及以下即可。