Android 9 HTTP 和 HTTPS:如何在 2025 年配置所有网络

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

引言:为什么 Android 9 在 2025 年仍然重要



想象一下这种情况:你正在编写一个应用程序,它需要通过老旧的 HTTP 与服务器通信。或者你正在测试 localhost 上的本地 API。你在 Android 9 (Pie) 上运行它——然后你看到一个灰色屏幕、连接错误以及带有可怕字眼 Cleartext HTTP traffic not permitted 的日志。熟悉吗?



Android 9 (API 28) 成为了一个转折点:谷歌默认禁止了未加密的 HTTP 连接。这对开发者来说是一个挑战。即使在 2025 年,当 Android 14 和 15 已经发布时,仍有数百万台设备在运行“Pie”。此外,许多企业应用程序和遗留系统被迫支持 HTTP。该怎么办?如何在不破坏安全性的情况下允许所有类型的 HTTP 和 HTTPS 网络连接?



在本文中,我们将介绍在 2025 年实际有效的 Kotlin 最佳实践。你不仅会学到“如何做”,还会学到“如何正确地做”——这样既不会被 Google Play 屏蔽,用户也不会受到损害。



Android 9 的变化:简要历史回顾



在 Android 8.1 之前,开发者可以随意使用 HTTP。但随着 Pie 的发布,谷歌引入了一项安全策略,阻止明文流量——任何未通过 TLS 加密的流量。这影响了:



  • HTTP 请求(端口 80);
  • 未加密的 WebSocket (ws://);
  • 一些自定义协议。


例外情况是 HTTPS(端口 443)和本地 localhost。但是,如果你的服务器仍然使用 HTTP 怎么办?或者你正在为公司内部网络开发应用程序?



解决方案是网络安全配置。这是一个 XML 文件,它告诉系统:“嘿,这个域名是可信的。” 在 2025 年,这已成为事实上的标准,我们将展示如何正确配置它。



方法 1:最简单的方法——为整个应用程序禁用检查



如果你想为整个应用程序允许所有类型的 HTTP 和 HTTPS 网络连接(例如,用于原型或测试版本),你可以在清单中使用一个标志。但请注意:对于生产环境,这是不好的做法。



步骤 1:在 AndroidManifest.xml 中添加属性



<application    android:allowBackup="true"    android:icon="@mipmap/ic_launcher"    android:label="@string/app_name"    android:usesCleartextTraffic="true">    ...</application>


步骤 2:确保 targetSdkVersion 为 28 或更低



如果 targetSdkVersion >= 28,这个标志仍然有效。但 Google Play 可能会警告用户该应用程序不安全。在 2025 年,最好将此方法与更精细的配置结合使用。



优点:快速,适用于所有域名。
缺点:容易受到中间人攻击,无法通过 Google Play 审核。



方法 2:通过网络安全配置的正确路径(2025 版)



这种方法是黄金标准。你创建一个 XML 文件,在其中指定允许哪些域名和协议。在 2025 年,我们建议将其用于所有新项目。



步骤 1:创建文件 res/xml/network_security_config.xml



以下是一个示例,它允许任何域名的所有 HTTP 和 HTTPS(但有限制):



<?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>


步骤 2:在 AndroidManifest 中连接配置



<application    android:networkSecurityConfig="@xml/network_security_config"    ...></application>


继续

博客

书籍推荐