---
title: "Как да настроите Charles Proxy за емулатора на Android Studio"
url: "https://romankryvolapov.com/bg/charles-proxy-android-emulator/"
description: "Стъпка по стъпка настройка на Charles Proxy за емулатора на Android: прокси през adb, сертификат на Charles, network security config за HTTPS на приложението и подмяна на отговори."
language: bg
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` този проблем го няма.
