Android

From MAMEDEV Wiki

Android build

First, download and install Android NDK r25c or later by unpacking release taken from the Android developer site [1].

To be used, only enviroment variables need to be properly set, as in example:

 export PATH="$PATH:/opt/android-ndk"
 export ANDROID_NDK=/opt/android-ndk
 export ANDROID_NDK_HOME=/opt/android-ndk

Since there is no precompiled SDL2 for Android we need to prepare that as well. First is to download latest from SDL github [2]. In time of writing version was SDL2-2.26.3, but later version should work fine as well.

Next step is to build SDL2 with Android NDK:

 tar xvfz SDL2-2.26.3.tar.gz
 cd SDL2-2.26.3


To compile for ARM64 (arm64-v8a):

 cmake -S . -B build_arm64 \
     -DANDROID_PLATFORM=android-24 \
     -DANDROID_ABI=arm64-v8a \
     -DCMAKE_INSTALL_PREFIX=~/SDL_Android_arm64 \
     -DCMAKE_TOOLCHAIN_FILE="$ANDROID_NDK_HOME/build/cmake/android.toolchain.cmake" \
     -DSDL_SHARED=ON -DSDL_STATIC=ON -DSDL_STATIC_PIC=ON -DSDL_TEST=ON \
     -DSDL2_DISABLE_SDL2MAIN=OFF -DSDL2_DISABLE_INSTALL=OFF \
     -DCMAKE_INSTALL_INCLUDEDIR=include -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_BUILD_TYPE=Release
 make -C build_arm64 install

To compile for Intel x86:

 cmake -S . -B build_x86 \
     -DANDROID_PLATFORM=android-24 \
     -DANDROID_ABI=x86 \
     -DCMAKE_INSTALL_PREFIX=~/SDL_Android_x86 \
     -DCMAKE_TOOLCHAIN_FILE="$ANDROID_NDK_HOME/build/cmake/android.toolchain.cmake" \
     -DSDL_SHARED=ON -DSDL_STATIC=ON -DSDL_STATIC_PIC=ON -DSDL_TEST=ON \
     -DSDL2_DISABLE_SDL2MAIN=OFF -DSDL2_DISABLE_INSTALL=OFF \
     -DCMAKE_INSTALL_INCLUDEDIR=include -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_BUILD_TYPE=Release
 make -C build_x86 install

To compile for Intel x86_64:

 cmake -S . -B build_x86_64 \
     -DANDROID_PLATFORM=android-24 \
     -DANDROID_ABI=armeabi-v7a \
     -DCMAKE_INSTALL_PREFIX=~/SDL_Android_x86_64 \
     -DCMAKE_TOOLCHAIN_FILE="$ANDROID_NDK_HOME/build/cmake/android.toolchain.cmake" \
     -DSDL_SHARED=ON -DSDL_STATIC=ON -DSDL_STATIC_PIC=ON -DSDL_TEST=ON \
     -DSDL2_DISABLE_SDL2MAIN=OFF -DSDL2_DISABLE_INSTALL=OFF \
     -DCMAKE_INSTALL_INCLUDEDIR=include -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_BUILD_TYPE=Release
 make -C build_x86_64 install

To compile for ARM (armeabi-v7a):

 cmake -S . -B build_arm \
     -DANDROID_PLATFORM=android-24 \
     -DANDROID_ABI=armeabi-v7a \
     -DCMAKE_INSTALL_PREFIX=~/SDL_Android_arm \
     -DCMAKE_TOOLCHAIN_FILE="$ANDROID_NDK_HOME/build/cmake/android.toolchain.cmake" \
     -DSDL_SHARED=ON -DSDL_STATIC=ON -DSDL_STATIC_PIC=ON -DSDL_TEST=ON \
     -DSDL2_DISABLE_SDL2MAIN=OFF -DSDL2_DISABLE_INSTALL=OFF \
     -DCMAKE_INSTALL_INCLUDEDIR=include -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_BUILD_TYPE=Release
 make -C build_arm install


After this all is ready for MAME to be built. Note that it can be built for android-arm, android-arm64, android-x86 and android-x64. If you are testing with emulator you only need android-x86 build, but for real device nowdays android-arm64 will only be needed, and there are less and less android-arm.

 make SUBTARGET=tiny SDL_INSTALL_ROOT=~/SDL_Android_x86 android-x86 -j9

This prepared binaries, but still we need to deploy application to device. Easiest way is to use Android Studio [3].

All build features are also available using gradle, next set of commands will create debug build and deploy it on connected Android device.

 gradlew assembleDebug
 gradlew installDebug