Notice: 函数 WP_Scripts::localize 的调用方法不正确$l10n 参数必须是一个数组。若要将任意数据传递给脚本,请改用 wp_add_inline_script() 函数。 请查阅调试 WordPress来获取更多信息。 (这个消息是在 5.7.0 版本添加的。) in /data/www/appblog/wp-includes/functions.php on line 6131

Android P 适配踩坑记录

使用 org.apache.http.legacy 库在Android 9.0上运行出现崩溃

日志内容

java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/http/message/BasicNameValuePair

问题分析

出现此问题主要是apache的http库在Android 9.0删除导致的,不要在Android 9.0中使用HttpClient访问网络,替换成HttpURLConnection或者OKHttp。

解决方案

如果是引用的第三方库使用HttpClient导致无法回避,则

(1)在build.gradle文件中声明编译时依赖

android {
    useLibrary 'org.apache.http.legacy'
}

(2)在AndroidManifest.xml文件的application标签里面添加

<uses-libraryandroid:name="org.apache.http.legacy"android:required="false"/>

参考:https://www.cnblogs.com/renhui/p/9798335.html
参考:https://stackoverflow.com/questions/50446148/how-to-use-apache-http-on-android-p
参考:https://juejin.im/post/5b8959f96fb9a019fe685eb3

OKHttp 请求网络 CLEARTEXT communication to host not permitted by network

问题:由于Android P限制了明文流量的网络请求,非加密的流量请求都会被系统禁止掉。

如果当前应用的请求是http请求,而非https,就会导系统禁止当前应用进行该请求,如果WebView的url使用 http协议,同样会出现加载失败,https不受影响。

为此,OkHttp3做了检查,如果使用了明文流量,默认情况下,在Android P版本OkHttp3就抛出异常: 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"));
}

解决:

(1)在res下新建一个xml目录,然后创建一个名为:network_security_config.xml文件,该文件内容如下:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="true" />
</network-security-config>

(2)然后在AndroidManifest.xmlapplication标签内应用上面的xml配置:

<application
    android:name=".AppApplication"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:networkSecurityConfig="@xml/network_security_config"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:theme="@style/AppTheme">
</application>
上一篇 Android 7.0及以上利用FileProvider安装apk注意事项
下一篇 Java中使用Gradle中声明的变量