This project is a simple demo of how to compile&run native **Aarch64** (or **x86**) binary on a Android device. # TL;DR *.bashrc* ```bash export ANDROID_NDK="~/bin/android-ndk/r26c-linux" export ANDROID_SDK_ROOT="~/bin/android_sdk_root" export PATH="$PATH:$ANDROID_SDK_ROOT/cmdline-tools/latest/bin:$ANDROID_SDK_ROOT/emulator:$ANDROID_SDK_ROOT/platform-tools" ``` # Compile with Android NDK - [Download](https://developer.android.com/ndk/downloads) latest version of Android NDK. I'm going go use Linux distribution. - Set `ANDROID_NDK` Environment Variable to the extracted contents of an archive. - At this point you should be able to compile the project with `compile.sh` script. # Run Technically, if you have Android device with `Development Mode ON` and `adb` binary somewhere on your host PC - you shall be able to install and execute compiled artifact from previous step with help of `run.sh` script. If that is not what you want or have - next sections are for you. # Android Emulator without Android Studio **Directory Structure** ``` $ANDROID_SDK_ROOT/ ├── cmdline-tools/ | └── latest/ | └── bin/ | ├── avdmanager | ├── sdkmanager | ├── ... |── emulator/ |── platforms/ | └─ android-23/ |── platform-tools/ | ├─ adb | ├─ fastboot | ├─ ... |── system-images/ | └─ android-23/ ``` ## cmdline-tools - [Download](https://developer.android.com/studio#command-tools) Command line tools only. - Set `ANDROID_SDK_ROOT` Environment Variable to the extracted contents of downloaded archive. It is recommended to follow next convention: `$ANDROID_SDK_ROOT/cmdline-tools/latest/bin` - Add it to `PATH`. ## sdkmanager - List available packages with: ```bash sdkmanager --list ``` >[!NOTE] > **QEMU host limitations**
> It looks that Android API 27 is the latest officially supported OS image that is capable of being executed as **Aarch64** Android on **x86_64** host. Later versions of Android can be used only as **x86_64** binaries. - Install packages for Android API 27 (MARSHMELLOW (6.0), etc) ```bash sdkmanager "system-images;android-27;default;arm64-v8a" "platforms;android-27" ``` ## emulator - Install emulator and tools: ```bash sdkmanager "emulator" "platform-tools" ``` - Add tools to `PATH`: `$ANDROID_SDK_ROOT/emulator`, `$ANDROID_SDK_ROOT/platform-tools` - Create emulator device: ```bash avdmanager --verbose create avd --force \ --name "pixel_6.0_27" \ --device "pixel" \ --package "system-images;android-27;default;arm64-v8a" \ --tag "default" \ --abi "arm64-v8a" ``` - Start emulator: ```bash emulator @pixel_6.27 -qemu -machine virt ``` > [!NOTE] > -qemu -machine virt
> This two options are only necessary if you are going to run **Aarch64** Android on a **x86_64** host. ## adb server If you see _`access denied`_ error message for `adb` command, run `adb server` with sudo: ```bash sudo ~/bin/android_sdk_root/platform-tools/adb start-server ``` The command will spawn background `adb server` process, granting necessary access permissions for all subsequent local `adb` commands.