我是新来的。我构建了一个简单的应用程序,它将一些数据发送到服务器并接收响应。
该应用程序在Android N的设备上运行良好。但是没有在O和P上工作。似乎问题是在互联网许可下。我已经检查过,当应用程序在o和p上运行时,应用程序没有向服务器发送任何数据。如果我需要寻求任何特定的互联网访问权限,请告诉我。
我在清单中添加了这个
<uses-permission android:name="android.permission.INTERNET" />
任何帮助,将不胜感激。
这可能是因为你正在使用http
。从Android O开始,您需要使用https
而不是http
,否则您将遇到错误Cleartext HTTP traffic to * not permitted
。因此,您需要创建配置以允许此操作。你可以把它推荐给Opt out of cleartext traffic
文件细节:
注意:本节中的指南仅适用于针对Android 8.1(API级别27)或更低级别的应用。从Android 9(API级别28)开始,默认情况下禁用明文支持。
打算仅使用安全连接连接到目标的应用程序可以选择退出支持明文(使用未加密的HTTP协议而不是HTTPS)到这些目的地。此选项有助于防止由于外部源(如后端服务器)提供的URL更改而导致应用中的意外回归。有关详细信息,请参阅
NetworkSecurityPolicy.isCleartextTrafficPermitted()
。例如,应用可能希望确保与
secure.example.com
的所有连接始终通过HTTPS完成,以保护敏感流量免受恶意网络的攻击。
res/xml/network_security_config.xml
:<?xml version="1.0" encoding="utf-8"?> <network-security-config> <domain-config cleartextTrafficPermitted="false"> <domain includeSubdomains="true">secure.example.com</domain> </domain-config> </network-security-config>
.
您也可以在android:usesCleartextTraffic="true"
中使用AndroidManifest.xml
作为开发模式,但不应在发布模式下使用它。关于它的更多细节在Android Developer Blog,这里摘录:
阻止生产中的明文流量
要保护应用程序的已安装基础免受回归到明文流量的影响,请在应用程序的AndroidManifest.xml中的应用程序元素上声明android:usesCleartextTraffic =“false”属性。这声明应用程序不应该使用明文网络流量,并使Android Marshmallow的平台网络堆栈阻止应用程序中的明文流量。例如,如果您的应用程序意外尝试通过明文HTTP请求登录用户,则该请求将被阻止,并且用户的身份和密码不会泄漏到网络中。
您不必将应用程序的minSdkVersion或targetSdkVersion设置为23(Android Marshmallow)以使用android:usesCleartextTraffic。在较旧的平台上,此属性被简单地忽略,因此无效。
请注意,WebView尚未兑现此功能。
在某些情况下,明文流量可能仍会离开或进入应用程序。例如,Socket API忽略明文策略,因为它不知道它发送或接收的数据是否可以归类为明文。另一方面,Android平台HTTP堆栈遵守策略,因为它们知道流量是否明确。
Google AdMob也是为了遵守此政策而建立的。当您的应用声明它不使用明文流量时,只应向应用提供仅限HTTPS的广告。
鼓励第三方网络,广告和分析库添加对此策略的支持。他们可以通过NetworkSecurityPolicy类查询明文流量策略。
如果您的URL以http
开头,那么您必须使用它在Android Pie中使用,即API级别28
android:usesCleartextTraffic="true"
在应用程序标记内的清单中作为属性