在Android N预览中不允许通过myart.com的明文HTTP流量

Sim*_*ays 12 https android http

昨天我获得了Android N预览的新升级.自从我升级以来,我再也无法启动我的应用了.

java.io.IOException: Cleartext HTTP traffic to myserver.com not permitted
Run Code Online (Sandbox Code Playgroud)

我试图在清单中设置usesCleartextTrafficto 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>
Run Code Online (Sandbox Code Playgroud)

两者都没有奏效.关于那里发生了什么的任何想法?

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

Error:(35) No resource identifier found for attribute 'networkSecurityConfig' in package 'android'
Run Code Online (Sandbox Code Playgroud)

不确定为什么.文件就在那里,一切都很好看.

在Google的Android问题跟踪器中找到建议.他们建议将network_security_config定义移到meta-data.我仍然得到相同的例外.

Ale*_*bin 14

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.

  • 从Android P我们需要指定自定义Network Security Config,其中包含cleartextTrafficPermitted = true,请检查安全行为更改 - https://developer.android.com/preview/features/security-behav#tls-enabled (4认同)

Mak*_*vin 9

android:usesCleartextTraffic="true"
Run Code Online (Sandbox Code Playgroud)

put this line in application tag in manifest file


San*_*iya 5

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

android:usesCleartextTraffic =“ true”

<?xml version="1.0" encoding="utf-8"?>
<manifest ...>
    <uses-permission android:name="android.permission.INTERNET" />
    <application
       ...
       android:usesCleartextTraffic="true"
       ...>
    </application>
</manifest>
Run Code Online (Sandbox Code Playgroud)