[英]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_DEBUGGABLE
或getApplicationInfo().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>
<?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.