繁体   English   中英

Android N 预览版不允许到 myserver.com 的明文 HTTP 流量

[英]Cleartext HTTP traffic to myserver.com not permitted on Android N preview

昨天我获得了 Android N 预览版的新升级。 自从我升级后,我无法再启动我的应用程序。

java.io.IOException: Cleartext HTTP traffic to myserver.com not permitted

我试图在清单中将usesCleartextTraffic设置为true或添加network_security_config.xml

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">myserver.com</domain>
    </domain-config>
</network-security-config>

都没有工作。 关于那里发生了什么的任何想法?

当我尝试在清单中定义 networkSecurityConfig 时,出现编译错误

Error:(35) No resource identifier found for attribute 'networkSecurityConfig' in package 'android'

不太确定为什么。 文件在那里,一切看起来都很好。

在 Google 的 Android 问题跟踪器中找到了这个建议。 他们建议将network_security_config定义移动到meta-data 尽管如此,我仍然遇到相同的异常。

android:usesCleartextTraffic="true"

将此行放在清单文件的应用程序标记中

Android N Developer Preview 4 中存在一个已知问题,如果应用程序修改其ApplicationInfo.flags ,它会触发阻止来自应用程序的明文流量,即使应用程序没有请求阻止明文流量。 修复程序在下一个开发者预览版中。 因此,这与您的网络安全配置无关。 事实上,看起来您甚至不需要声明自定义网络安全配置。

如果您迫不及待地等到下一个 Android N 开发者预览版,请检查您的应用是否有修改自己的ApplicationInfo.flags 通常这采用getApplicationInfo().flags &= ApplicationInfo.FLAG_DEBUGGABLEgetApplicationInfo().flags = ApplicationInfo.FLAG_DEBUGGABLE 这些用法的修复是(getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE)

或者,作为一种变通方法,请尽可能早地在应用程序的生命周期中调用NetworkSecurityPolicy.isCleartextTrafficPermitted() 如果在篡改ApplicationInfo.flags的代码之前调用此解决方法应该有效。

在您的应用程序标签中只尝试一行

机器人:使用CleartextTraffic =“真”

<?xml version="1.0" encoding="utf-8"?>
<manifest ...>
    <uses-permission android:name="android.permission.INTERNET" />
    <application
       ...
       android:usesCleartextTraffic="true"
       ...>
    </application>
</manifest>

在此处输入图片说明

res/xml/network_security_config.xml
 <?xml version="1.0" encoding="utf-8"?> <network-security-config> <base-config cleartextTrafficPermitted="true"> <trust-anchors> <certificates src="system" /> </trust-anchors> </base-config> </network-security-config>
AndroidManifest.xml
 <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme" tools:ignore="GoogleAppIndexingWarning" android:networkSecurityConfig="@xml/network_security_config"> <activity android:name=".activity.MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application>
<?xml version="1.0" encoding="utf-8"?>
<manifest ...>
    <uses-permission android:name="android.permission.INTERNET" />
    <application
       ...
       android:usesCleartextTraffic="true"
       ...>
    </application>
</manifest>

这个非常适合我:)

我在这里提出的最佳解决方案是以下代码应该在清单中

android:usesCleartextTraffic="true"

从 API 级别 28 开始,默认情况下禁用usesCleartextTraffic 所以,如果你想启用它,然后将usesCleartextTraffic为真在这样的androidManifest文件,

<?xml version="1.0" encoding="utf-8"?>
<manifest ...>
    <uses-permission android:name="android.permission.INTERNET" />
    <application
       ...
       android:usesCleartextTraffic="true"
       ...>
    </application>
</manifest>

创建一个 XML res/xml/network_security_config.xml

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

在 AndroidManifest.xml 内的标记应用程序中引用此文件。 像:

android:networkSecurityConfig="@xml/network_security_config"

我添加了这个“ android:usesCleartextTraffic="true" "

但我的应用程序崩溃了....

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM