在 Android 9.0(Pie)系统中,APK 如何正确配置网络权限以确保应用能够正常访问网络资源?许多开发者在适配 Android 9.0 时遇到网络请求失败的问题,尤其是在未正确声明 `INTERNET` 权限或未处理新版本中对明文网络请求的限制时。此外,Android 9.0 默认禁止明文 HTTP 请求以提升安全性,开发者需通过配置 `network_security_config` 来允许特定域名使用明文传输。本文将详解如何在 `AndroidManifest.xml` 中正确添加网络权限、配置网络安全策略,以及如何适配 Android 9.0 的网络限制,确保应用在该系统上稳定运行并顺利访问网络资源。
1条回答 默认 最新
我有特别的生活方法 2025-10-22 01:01关注一、Android 9.0(Pie)网络权限配置概述
随着 Android 系统的不断演进,Google 对应用的安全性要求越来越高。在 Android 9.0(Pie)版本中,系统默认禁止应用使用明文 HTTP 请求,以防止中间人攻击(MITM)。同时,应用必须在
AndroidManifest.xml中正确声明网络权限,否则将无法访问网络资源。开发者在适配 Android 9.0 时,常遇到网络请求失败的问题。这通常是因为未声明
INTERNET权限,或者未配置网络安全策略(network_security_config),导致应用无法通过 HTTPS 或 HTTP(明文)方式访问网络。二、基础配置:声明 INTERNET 权限
所有需要访问网络的应用,必须在
AndroidManifest.xml文件中声明如下权限:<uses-permission android:name="android.permission.INTERNET"/>- 作用:允许应用打开网络套接字并访问网络资源。
- 注意:此权限仅允许应用访问网络,不提供后台访问或访问其他网络状态的权限。
三、Android 9.0 的网络限制与 HTTPS 要求
从 Android 9.0 开始,系统默认禁止应用使用明文 HTTP 请求。这意味着如果应用尝试访问 HTTP 地址,将被系统拦截并抛出异常。
协议类型 是否默认允许 说明 HTTP No 明文传输存在安全隐患,Android 9.0 默认禁止。 HTTPS Yes 推荐使用,系统默认允许。 若必须使用 HTTP 协议访问某些服务器,开发者需要通过配置
network_security_config来允许特定域名的明文传输。四、配置 network_security_config 允许明文 HTTP 请求
步骤如下:
- 在
res/xml目录下创建network_security_config.xml文件。 - 在该文件中定义允许明文传输的域名。
- 在
AndroidManifest.xml中引用该配置。
示例配置文件内容如下:
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <domain-config cleartextTrafficPermitted="true"> <domain includeSubdomains="true">example.com</domain> </domain-config> </network-security-config>然后在
AndroidManifest.xml中添加引用:<application android:networkSecurityConfig="@xml/network_security_config" ...> ... </application>五、网络请求失败的常见排查流程
graph TD A[应用无法访问网络] --> B{是否声明INTERNET权限?} B -- 是 --> C{是否使用HTTP协议?} C -- 是 --> D{是否配置network_security_config?} D -- 是 --> E[尝试访问HTTPS接口] D -- 否 --> F[配置network_security_config] C -- 否 --> G[检查服务器证书是否有效] G --> H[确认是否使用了过期或不安全的SSL/TLS版本] H --> I[更新服务器证书或升级TLS版本] B -- 否 --> J[添加INTERNET权限]六、进阶建议与最佳实践
- 尽可能使用 HTTPS 协议进行网络通信,避免依赖明文 HTTP。
- 对第三方 API 接口进行安全评估,确保其支持 HTTPS。
- 定期更新
network_security_config配置,限制仅必要的域名使用明文传输。 - 使用
StrictMode检测主线程网络请求,避免 ANR。 - 对于混合内容(HTTP/HTTPS)场景,建议使用
mixedContentMode进行适配。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报