普通网友 2025-07-24 17:35 采纳率: 99.1%
浏览 0
已采纳

安卓9.0系统设置APK常见技术问题: **如何在Android 9.0中正确配置APK的网络权限?**

在 Android 9.0(Pie)系统中,APK 如何正确配置网络权限以确保应用能够正常访问网络资源?许多开发者在适配 Android 9.0 时遇到网络请求失败的问题,尤其是在未正确声明 `INTERNET` 权限或未处理新版本中对明文网络请求的限制时。此外,Android 9.0 默认禁止明文 HTTP 请求以提升安全性,开发者需通过配置 `network_security_config` 来允许特定域名使用明文传输。本文将详解如何在 `AndroidManifest.xml` 中正确添加网络权限、配置网络安全策略,以及如何适配 Android 9.0 的网络限制,确保应用在该系统上稳定运行并顺利访问网络资源。
  • 写回答

1条回答 默认 最新

  • 关注

    一、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 地址,将被系统拦截并抛出异常。

    协议类型是否默认允许说明
    HTTPNo明文传输存在安全隐患,Android 9.0 默认禁止。
    HTTPSYes推荐使用,系统默认允许。

    若必须使用 HTTP 协议访问某些服务器,开发者需要通过配置 network_security_config 来允许特定域名的明文传输。

    四、配置 network_security_config 允许明文 HTTP 请求

    步骤如下:

    1. res/xml 目录下创建 network_security_config.xml 文件。
    2. 在该文件中定义允许明文传输的域名。
    3. 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 进行适配。
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 10月23日
  • 创建了问题 7月24日