Android emulators are not working on OSX Big Sur
Update, 10-1-2020
The Android Emulator team has pushed 30.1.5 which fixes this issue in stable. The dev build, 30.2.0 does not contain this fix. It should be available "soon" according to the Googler's working on this.
Another note, if you experience poor performance in your emulator you may wish to try using the host's GPU for rendering. This can be accomplished by running the following command in your terminal where -avd is the name of your emulator device with spaces turned to underscores.
~/Library/Android/sdk/emulator/emulator -gpu host -feature HVF -avd pixel_3a_api_29
Old information, kept for educational value:
This is the reference to the commit fixing this issue for Big Sur. This looks like it should be released in the emulator 30.1.5 (see log https://android.googlesource.com/platform/external/qemu/+log/refs/heads/emu-30-release) which should be in the next canary build.
If you can't wait, you should be able to build off that branch. Lightly tested guide heavily pulling from the readme of the repo:
# Get the google repo tool - you can skip if you already have it
curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > /usr/local/bin/repo && chmod +x /usr/local/bin/repo
# Get the code, will take some time. Probably best to go get a coffee here or run on a server if you have poor internet
mkdir -p $HOME/emu-master-dev && cd $HOME/emu-master-dev
repo init -u https://android.googlesource.com/platform/manifest -b emu-master-dev
repo sync -j8
# Get XCode 10.1 - required
https://download.developer.apple.com/Developer_Tools/Xcode_10.1/Xcode_10.1.xip
sudo xcodebuild -license accept &&
sudo xcode-select --install
# Get MacOS 10.13 SDK which is required
export XCODE_PATH=$(xcode-select -print-path 2>/dev/null)
git clone https://github.com/phracker/MacOSX-SDKs
cp -r MacOSX-SDKs/MacOSX10.13.sdk/ "$XCODE_PATH/Platforms/MacOSX.platform/Developer/SDKs"
# Build the emulator, which will be another coffee break...
cd external/qemu && android/rebuild.sh
# run it :)
./objs/emulator -list-avds
My solution is wiping data from Android studio AVD, then start it again and again until it is successfully launched, using ./emulator @Pixel_3a_API_29 command.
After trying many of the answers / comments on SO, found this workaround to work and be reproducible:
- Setup a new AVD
I used Pixel 3 & 3a, API 30, default options
- Launch the AVD using the
emulator
CLI
$ ~/Library/Android/sdk/emulator/emulator @Pixel_3a_API_30
You'll see the infamous
...unhandled exit 1d
- Cancel the command with
⌃ + c
or press thex
on the emulator sidebar
You should see a spinner about Saving State...
- Run the emulator again (step 2), this time it should show:
5. Click DISMISS (or wait) and the emulator should boot into Android
Note: Starting the same AVD from Android Studio / AVD Manager GUI will still run into this exception, so when you need it - start the emulator like in step 2.