---
title: "Как настроить Charles Proxy для эмулятора Android Studio"
url: "https://romankryvolapov.com/ru/charles-proxy-android-emulator/"
description: "Пошаговая настройка Charles Proxy для эмулятора Android: прокси через adb, сертификат Charles, network security config для HTTPS приложения и подмена ответов."
language: ru
published: 2023-03-14
updated: 2026-11-05
---
Инструкция проверена в начале 2023 года на Windows 10, эмуляторе с API 33, Android Studio 2022.1.1 и Charles Proxy 4.6.3. Я написал её, потому что не нашёл актуальной инструкции: в настройках эмулятора, запущенного внутри Android Studio, пропала привычная вкладка Proxy, а в Charles немного переделали настройку. Для HTTPS эта вкладка всё равно не помогла бы: она задаёт [прокси эмулятора](https://developer.android.com/studio/run/emulator-networking-proxy), который туннелирует HTTPS без расшифровки, а Charles нужен системный прокси Android — его и настраивают шаги ниже.

## Прокси

1. Запускаем Charles Proxy.
2. Снимаем галочку **Proxy → Windows Proxy** (на macOS — **macOS Proxy**), чтобы Charles не перехватывал весь трафик компьютера.
3. Смотрим локальный адрес компьютера в сети: **Help → Local IP Address**, или в настройках сети.
4. В **Proxy → Proxy Settings…** проверяем, что указан порт 8888.
5. Находим Android SDK: в настройках Android Studio вводим в поиске «sdk», открываем **Android SDK** и копируем путь из **Android SDK Location**. Утилита `adb` лежит в его папке `platform-tools`.
6. Включаем прокси в эмуляторе:

```bash
C:\Users\<имя пользователя>\AppData\Local\Android\Sdk\platform-tools\adb.exe shell settings put global http_proxy <локальный IP>:8888
```

Можно сначала перейти в папку `platform-tools` командой `cd` и вызывать просто `adb`. Вместо локального IP эмулятору можно указать `10.0.2.2` — это его постоянный адрес для компьютера, на котором он запущен, и он не меняется вместе с сетью.

7. В Charles появится запрос на подключение — подтверждаем его.
8. Во вкладке сессии появятся запросы, в том числе из эмулятора. Чтобы оставить только нужный домен, нажимаем на него правой кнопкой и выбираем **Focus**.

Выключить прокси, когда он больше не нужен:

```bash
adb shell settings put global http_proxy :0
```

## Сертификат и HTTPS

9. Открываем Chrome в эмуляторе, переходим на `http://chls.pro/ssl` и скачиваем сертификат.
10. В настройках эмулятора ищем «certificate», открываем **Install certificate** (в разных версиях пункт вложен в разные меню) и устанавливаем скачанный сертификат.
11. В **Trusted credentials** на вкладке **User** должен появиться сертификат Charles Proxy.
12. В Charles выбираем нужный адрес, правой кнопкой — **Copy URL**, затем **Proxy → SSL Proxying Settings… → Include → Add** и добавляем скопированный адрес; порт можно не указывать. После очистки истории запросы к этому адресу начнут показываться деревом REST-путей.

**Важно: так вы увидите HTTPS только из Chrome.** Начиная с Android 7 приложения по умолчанию не доверяют сертификатам, которые установил пользователь, поэтому запросы вашего приложения останутся нечитаемыми. Чтобы отладочная сборка доверяла сертификату Charles, добавьте в проект файл `res/xml/network_security_config.xml`:

```xml
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <debug-overrides>
        <trust-anchors>
            <certificates src="user" />
        </trust-anchors>
    </debug-overrides>
</network-security-config>
```

и подключите его в манифесте:

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

Блок `debug-overrides` действует только в отладочной сборке, в релиз это доверие не попадёт. Если в приложении настроен certificate pinning, его на время отладки тоже придётся отключить.

## Подмена запросов и ответов

Есть три способа:

- **Tools → Rewrite…** — добавляем адрес, создаём правило типа **Body**, отмечаем **Response** и в поле **Value** пишем нужный ответ.
- **Proxy → Breakpoints** — запрос или ответ останавливается, и его можно поправить вручную прямо во время выполнения.
- **Tools → Map Local** — вместо ответа сервера подставляется локальный файл.

И последнее: если роутер выдаёт компьютеру динамический IP-адрес, при следующем подключении он может оказаться другим, и прокси в эмуляторе придётся перенастроить. С адресом `10.0.2.2` этой проблемы нет.
