# Android 设备与模拟器

> 使用桌面版 Proxyman 抓包 Android 真机和模拟器的 HTTP/HTTPS 流量，涵盖代理设置、证书、自动脚本以及 Google Play 系统镜像。

本指南介绍如何将 Android 设备或模拟器的流量发送到电脑上的 Proxyman。内容涵盖代理配置、证书安装，以及让应用信任证书以便检查 HTTPS 流量。

根据你的设备选择对应的设置方式：

* **Android 真机：** 按下方的手动设置步骤操作。设备必须能通过网络访问运行 Proxyman 的电脑。
* **Android 模拟器：** 从[自动设置脚本](https://proxyman.com/docs/zh-cn/debug-devices/android-device/automatic-script-for-android-emulator)开始。
* **Google Play 模拟器镜像：** 参阅 [Google Play 与 Magisk 指南](https://proxyman.com/docs/zh-cn/debug-devices/android-device/google-play-android-emulator-with-magisk)。标准的自动设置并不适用于所有镜像。

如果不想借助电脑，直接在手机上抓包，可以使用独立的 [Proxyman Android 应用](https://proxyman.com/android)。

在电脑端抓包时，请在 Proxyman 中打开对应的指南：

* **Certificate** **Menu** -> **Install Certificate on Android -> Physical Devices…**
* **Certificate Menu -> Install Certificate on Android -> Emulators…**

> **备注:** 查看[如何设置 Android 设备和模拟器的迷你教程](https://proxyman.com/docs/zh-cn/debug-devices/android-device/sample-android-project)

> **备注:** 如果使用 **Android 模拟器**，请查看 [Android 模拟器自动脚本](https://proxyman.com/docs/zh-cn/debug-devices/android-device/automatic-script-for-android-emulator#1-whats-it)

## 视频 {#video}

[在 API 36 的 Android 模拟器上抓取原生 Android 应用（OkHttp）的 HTTPS 流量](https://www.youtube.com/watch?v=CWInB7gZj6g)

[Video: 使用 Proxyman for Android 应用在 Android 上抓取 HTTP 和 HTTPS 流量](https://proxyman.com/videos/android) (44 seconds)

## 1. Android 设置指南 {#1-android-setup-guide}

手动设置时，先配置设备代理，再安装证书，并在你的开发应用中配置证书信任。仅安装证书并不能让所有 Android 应用都信任它。请按以下所有步骤操作：

![Proxyman Android 设置指南，包含 Wi-Fi 代理服务器和端口、proxy.man/ssl 链接以及网络安全配置 XML](https://proxyman.com/docs/assets/proxyman-android-device-setup-guide.jpg)

_Android 设备设置指南_

在 **Certificate** 菜单中依次选择 **Install Certificate on Android** -> **Physical Devices…**，打开指南，然后按照以下步骤操作：

1. 在 Mac 上安装 **Root Proxyman Certificate**：可参阅 [macOS 指南](https://proxyman.com/docs/zh-cn/debug-devices/macos)。
2. 在 Android 设备或模拟器上打开 Settings 应用 -> Wi-Fi -> 选择当前的 Wi-Fi 网络 -> 按照下表的值配置 HTTP 代理。

| 名称             | 值                                                |
| ---------------- | ------------------------------------------------- |
| 服务器 IP        | 你的 Mac 当前的 IP 地址                           |
| 端口             | Proxyman 当前的端口，默认为 9090                  |
| 身份验证         | 否                                                |

> **备注:** 部分三星设备在设置 HTTP 代理后可能无法访问互联网。请忘记当前网络，然后重新连接。
>
> 如果**你正在使用任何 VPN 应用**，请确保将其关闭，因为部分 VPN 应用与 HTTP/HTTPS 代理配置存在冲突。

  3\. 在 Android 设备的浏览器中打开 [http://proxy.man/ssl](http://proxy.man/ssl) 或 http://cert.proxyman.io，安装 Proxyman 证书。

### **Android 11、Android 12 或更高版本：** {#android-11-android-12-or-later}

* 在 Google Chrome 应用中访问 http://proxy.man/ssl 下载证书。
* 从 Android 11 开始，必须在 Settings 应用中手动安装证书。
* Settings 应用 -> Security -> Encryption & Credentials -> Install a Certificate -> 选择 "CA Certificate" -> 在存储中选择 Proxyman CA 证书。

### **Android 10 及更低版本：** {#android-10-and-below}

* 访问 http://proxy.man/ssl 后，Android 设备会自动下载并安装证书。请确保选择 **VPN and App Section**。

> **备注:** **在 Android 12 及更高版本上**，如果看到警告 "Can't install the Certificate: This file can't be used as a VPN & app user certificate"，请改选 "CA Certificate"。 
>
> 参考：[https://stackoverflow.com/a/70261393/3127477](https://stackoverflow.com/a/70261393/3127477)

> **备注:** **http://proxy.man/ssl** 是一个本地网站，由 Proxyman 内置的 HTTP 服务器提供。如果无法打开该网址，请忘记 Wi-Fi 网络并重新连接，同时确保 Proxyman 应用处于打开状态。

4\. 在 Android 11 或更高版本上验证证书：打开 Settings -> Security -> Encryption & Credentials -> Trusted Credentials -> User 标签页。

确保能看到 **Proxyman CA** 证书，如下图所示。

![Android 受信任的凭据，User 标签页中列出 Proxyman CA 证书](https://proxyman.com/docs/assets/Screen_Shot_2020-09-29_at_9_00_46_PM%20(1).png)

    5\. 打开应用源代码，添加以下两个 `xml` 文件。

* 添加 **res/xml/network\_security\_config.xml**

```markup title="network_security_config.xml"
<network-security-config>
  <debug-overrides>
    <trust-anchors>
      <!-- Trust user added CAs while debuggable only -->
      <certificates src="user" />
      <certificates src="system" />
    </trust-anchors>
  </debug-overrides>

  <base-config cleartextTrafficPermitted="true">
    <trust-anchors>
      <certificates src="system" />
      <certificates src="user" />
    </trust-anchors>
  </base-config>
</network-security-config>
```

* 添加到 **AndroidManifest.xml**

```markup title="manifest.xml"
<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
    <application android:networkSecurityConfig="@xml/network_security_config" ... >
    ...
    </application>
</manifest>
```

> **备注:** 更多信息请参阅 [Network Security Configuration ](https://developer.android.com/training/articles/security-config.html)

> **备注:** 请确保在 **Release** 构建中**移除这些配置**。否则，HTTP/HTTPS 请求可能被拦截，敏感数据也会在生产版本中泄露。

6\. 如果使用 Android 模拟器，请重启模拟器。

7\. 完成 ✅

## **2. 故障排查** {#2-troubleshooting}

请查看[设备连接故障排查指南中的 Android 部分](https://proxyman.com/docs/zh-cn/troubleshooting/my-ios-devices-couldnt-connect-to-proxyman-via-proxy#android-devices-and-android-emulators)。

## 3. 示例 Android 项目 {#3-sample-android-project}

如果 XML 配置遇到问题，可以参考我们已经配置好的这个简单项目：

GitHub 链接：[https://github.com/ProxymanApp/OKHTTP-Android-Sample](https://github.com/ProxymanApp/OKHTTP-Android-Sample)

- [Android 示例项目](https://proxyman.com/docs/zh-cn/debug-devices/android-device/sample-android-project)

## 4. React Native Android 应用 {#4-react-native-android-app}

如果你的 Android 应用使用 React Native 开发，请查看 [React Native 页面](https://proxyman.com/docs/zh-cn/debug-devices/react-native)。

## 5. 拦截内嵌 WebView 的流量 {#5-intercept-traffic-from-embedding-webview}

部分 Android 应用内嵌了 WebView，需要额外的步骤才能拦截其 HTTPS 流量。

1. 确保能看到 Android 应用中的其他 HTTPS 流量，这说明证书已正确设置。
2. 在 WebView 中注入以下代码

```java
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
    WebView.setWebContentsDebuggingEnabled(true);
}

// The following two lines help with disabling asset caching
webView.getSettings().setAppCacheEnabled(false);
webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
```

  3\. 在电脑上打开一个新的 Chrome 标签页，访问 `chrome://inspect`

4\. 打开 WebView 后，它会出现在 Chrome 标签页中。点击 `inspect` 即可开始使用远程调试器。

## 6. 使用 Root 设备开启 SSL Proxying {#6-ssl-proxying-using-root-device}

> 致谢 [Shirshak](https://github.com/shirshak55)

如果你的 Android 版本低于 7，则无需此步骤。从 Android 7 开始，Google 增加了额外的安全机制，默认阻止中间人工具读取应用流量。

因 Root 手机而导致的任何问题，我们概不负责。请自行承担风险并按照本指南操作。

> **备注:** 较新版本的 Proxyman 将证书存储在 `~/Library/Application Support/com.proxyman.NSProxy/app-data/proxyman-ca.pem`。如果你的 Mac 上不存在 `~/.proxyman` 文件夹，请改用该路径，或依次选择 Certificate 菜单 -> Export -> Root Certificate as PEM 导出证书。

1. 使用 `magisk` 框架 Root 你的手机。
2. 安装 Root 文件管理器，以便在受限的系统目录中复制和粘贴文件。
3.  在命令行中输入以下脚本

    ```bash
    $ cd ~/.proxyman
    // We copy certificate to another file name just so we may need it later
    $ cp proxyman-ca.pem temp.pem
    $ hash=$(openssl x509 -inform PEM -subject_hash_old -in temp.pem | head -1)
    $ mv temp.pem "$hash.0"
    ```
4. 在 `~/.proxyman` 文件夹中，你会看到一个以数字开头、以 `.0` 结尾的文件。
5. 将该文件复制到你的 Android 设备。
6. 使用 Root 文件管理器，将该文件移动到 /system/etc/security/cacerts/
7. 大功告成，开始抓包吧。

> **备注:** 1) 在 Android 手机上，将网关设置为一个错误的 IP，这样可以确保所有流量都只通过 Proxyman 代理。
> 2) 你可以使用 macOS 的互联网共享功能创建个人热点，这样 Android 手机就能轻松使用 Proxyman 代理。这种方式效果更好，因为路由器有时会阻止手机与 Mac 之间的请求。

## 更多资源 {#additional-resources}

* Mitmproxy 提供了一篇实用教程，介绍如何在 Android 模拟器上安装系统级受信任的 CA 证书。同样的步骤也适用于 Proxyman 证书：[https://docs.mitmproxy.org/stable/howto-install-system-trusted-ca-android/](https://docs.mitmproxy.org/stable/howto-install-system-trusted-ca-android/)

## 了解更多 {#learn-more}

* [如何在 Android 11 上安装并信任自签名证书](https://proxyman.com/posts/2020-09-29-Install-And-Trust-Self-Signed-Certificate-On-Android-11)
* [如何抓取 API 35 Android 模拟器的 HTTPS 流量](https://proxyman.com/posts/capture_https_android_emulators)
* [Proxyman 现已支持 Android](https://proxyman.com/posts/2026-05-25-Proxyman-is-now-available-on-Android)
* [使用 Proxyman 抓取 Android 设备的 HTTP/HTTPS 流量](https://proxyman.com/android-device)（Proxyman 官网）
