The Android Emulator and Charles Proxy: A Love Story – Mark …
Android Emulators have come a long way over the years. Once they were the bane of every developer’s life, representing the most basic failure of the Android development environment; a painfully slow tool that had the maddeningly unrealized potential to make developer lives infinitely easier. But over the last couple years, Google has wised-up and made the emulator one of the best things about developing for Android — a fast, fluid, and endlessly useful tool for exercising and debugging Android Emulator can also be made into a super-tool for testing API edge and failure cases by employing an proxy — a go between that can intercept, display and even re-map your API calls. My personal choice for this job is Charles Proxy. It has slick interface, easy to use mapping options and great support, with new releases being published all the time. Today I’ll show you how to set up your Emulator to proxy calls, and later, what you can do with CharlesThe first thing you want to do is download and run Charles Proxy. Start it up and you’ll see all the network traffic from your machine start to show up in the side bar. Charles, by default, has local proxying turned on, but since we’re going to use it to proxy an emulator, you can go to the Proxy menu and uncheck the OS proxy option:Then click the little yellow broom icon to clear out all the traffic. You can also modify Charles’ preferences so that this option is not enabled by your Emulator to ProxyNext, start up your emulator. Any old emulator will do, but depending on the Android version, your emulator’s settings might be different then mine. For this tutorial, I’m using a Pixel XL emulator running running Android 8. 0, Oreo. The first thing we need to do is set up the emulator’s proxy settings, so that all the network traffic goes through Charles. To do that, we need your machine’s IP address. Charles actually has a little utility in the Help menu for this:Click that, and then copy the IP address from the dialog that comes, in your emulator, in the Setting bar, click the three little dots:And then in the resulting dialog, click Settings, and then select the Proxy in your IP address, and set the port to 8888. Charles will now prompt you that a device is trying to connect to the proxy, and ask you to allow it. Just click allow and you’ll start seeing IP addresses show up in the side barDon’t worry, we’re going to make that a whole lot stall the Charles SSL CertCharles does some specific SSL magic, which we won’t go over here, but the bottom line it that you need to install the Charles SSL Certificate on your emulator. To do that, just open up a browser on the emulator, and navigate to. The browser may prompt you to allow it to save the cert to disk, and then you can click to install Proxy your application on Android N or above, you also need to install a config file in your app’s resources. From the Charles Website:“AndroidAs of Android N, you need to add configuration to your app in order to have it trust the SSL certificates generated by Charles SSL Proxying. This means that you can only use SSL Proxying with apps that you order to configure your app to trust Charles, you need to add a Network Security Configuration File to your app. This file can override the system default, enabling your app to trust user installed CA certificates (e. g. the Charles Root Certificate). You can specify that this only applies in debug builds of your application, so that production builds use the default trust a file res/xml/ to your app:
How to set up Charles Proxy for the Android Emulator. – gists …
How to set up Charles Proxy for the Android Emulator.
1. Add the Network Security Configuration to your app
2. Update the Android Manifest
xml version="1. 0" encoding="utf-8"? >
3. Update the Emulator proxy
Launch the emulator and open “Settings -> Proxy”
Uncheck “Use Android Studio HTTP proxy settings”
Check “Manual proxy configuration”
Update the “Hostname” to “127. 0. 1” and “Port number” to “8888”
Your settings should now look like this.
4. Install the Charles certificate
Launch Charles and enable SSL proxying.
In your emulator, open a web browser and navigate to You should be prompted to download a cert file.
Save the file with any name.
5. Create custom APN
Charles should now be proxying requests but instead of hostnames you’re going to see IP addresses. This makes it difficult to filter on specific hosts. To fix this you’ll need to:
In Android, navigate to “Settings -> Network & Internet -> Mobile network -> (Advanced) Access point names”
Tap the “Plus” icon in the toolbar to add a new APN.
Use any name, set APN to “”, proxy to “10. 2. 2”, and port to “8888”
Tap the overflow menu in the upper right and then “Save”
Make sure to mark your new APN as active
Now you may need to toggle airplane mode on and off a few times to get it to take.
You should now see hostnames correctly in Charles. If not, try restarting the proxy a few times.
You may also have to enable the “Proxy -> macOS Proxy” setting in Charles.
You may have to disable WiFi in the emulator to see hostnames in Charles.
Charles Setup for Emulator (Android) and Simulator (iOS)
Diagnose your mobile app’s network trafficPicture by Hush Naidoo on UnsplashSetting up Charles for physical devices and Emulator or Simulator is sometimes not exactly the same. Using Emulator or Simulator is convenient at times, as you don’t need to have the real device with you for your case you don’t know what Charles is, it is a network proxy tool. In other words, it can be used to intercept the network connection (from devices, in our case), to allow viewing, redirecting, modifying, and debugging. It is also very useful for local server testing. I often forget one of the platforms, so I am documenting both iOS and Android to enable a one-stop easy reference for would be better to ensure Charles is launched before you launch the Emulator or Simulator. I am not sure if this is always necessary, but it is a good the past, connecting Android Emulator is done through the command line. It doesn’t seem to work anymore today. The approach used today is matching what the actual device before that, you have to ensure your Emulator startup is connected to the internet. Sometimes that is not possible, due to reasons unknown to me. Hence, the way to work around this is per the blog below. (Only use it if your Emulator can’t connect to the internet. )Setting up the Proxy IPAfter you have your Emulator launched with an internet connection, you need to find the local IP Address. Do this in Charles by looking up Help →Local IP that, in your Emulator, go to the Wifi settings, and long-click on AndroidWifi, where you’ll get access to the Modify network Modify, click on the Advanced options to expand the dialog box. Then, enter the IP Address in the Proxy host and the Proxy port (which usually is 8888). Then, click Save. Certificate installationSometimes (in fact, most of the time), we’ll need to install certification to view the secure network. To do so, go to the Chrome browser and the address of Charles is already connected, you should get the inquiry to either download or replace your the download, you’ll be asked to install it. After that, you could save it with any name you that your device needs to have at least a “pin” security setting to do that. If not, you’ll be prompt to set it up for Android SDK API 30 (Android 11)New requirement for Android SDK API 30 in setup Charles as oubleshootingIn case you can’t connect to Charles, try the below:Ensure your device is connected to the internet before you set proxy with off the cellular network and just have the Wifi network on for the that Charles’ macOS Proxy setting is OFF. You could check by looking in Charles’ Proxy → macOS Proxy. (Note that this step is the opposite of iOS. )In iOS, the setup of the Simulator proxy differs from the actual device, and it is simpler. You don’t need to explicitly key in the proxy address, and let Charles do it for nnecting Charles to SimulatorAfter you launch your Simulator, in Charles, go to Help → SSL Proxying →Install Charles Root Certificate in iOS that, you’ll get the below:The next step is important, turn ON your macOS Proxy. This could be done by accessing it through Charles Proxy → macOS Proxy. Go to the Safari browser and the address of Charles is already connected, you should get the inquiry to download a configuration profile as below. Allow, you’ll get the below message:After that, go to your Simulator’s Setting → General → Profile, you’ll get something like the below image. Click on that, click on install. You’ll set something as this step, one more to to Setting → General → About → Certificate Trust Setting. Then look up for the certificate you just install and turn it onThat’s oubleshootingIn case you can’t get connected to Charles, try out the below:Ensure your device is connected to the internet before you set proxy with that the Charles’ macOS Proxy setting is ON. You could check by looking in Charles Proxy → macOS Proxy. (Note that this step is the opposite of Android)Note: In case, after using Charles, you notice your computer can’t access the internet, do check that the Charles’ macOS Proxy setting is not ON. You could check by looking in Charles Proxy → macOS for reading.
Frequently Asked Questions about charles proxy android emulator
Does Charles proxy work for Android?
Configuring Your Android Device to use the Charles Proxy. Use the following steps to configure your Android device to use Charles proxy: Go to Settings > Wifi. Press and hold down the power key on the Wifi Network device you are currently connected to.
How do I connect my emulator to Charles?
StepsAdd the Network Security Configuration to your app. <network-security-config> <debug-overrides> <trust-anchors> <!– … Update the Android Manifest. <? … Update the Emulator proxy. Launch the emulator and open “Settings -> Proxy” … Install the Charles certificate. Launch Charles and enable SSL proxying. … Create custom APN.
How do I download Charles proxy certificate on Android?
Go to Help > SSL Proxying > Install Charles Root Certificate on a Mobile Device… On your Android or iOS device, follow the instruction to browse to http://chls.pro/ssl to download and install the certificate. Navigate to Settings > General > Profile & Device Management to install and verify the Charles SSL certificate.Aug 24, 2021