Android

From Minetest Developer Wiki
Revision as of 19:42, 8 March 2014 by Sfan5 (talk | contribs)
Jump to navigation Jump to search

Building and Running

Building

What you need:

  • Linux
  • Android NDK Crystax version (with android_native_app_glue.h copied into <TOOLCHAIN_ROOT>/sysroot/usr/include)
  • Android SDK
  • Android device
  • Git
  • CMake
  • Ant
  • ADB (optional but very useful)

Irrlicht

Clone https://github.com/sfan5/irrlicht-android.

Make sure you have arm-linux-androideabi-gcc and arm-linux-androideabi-g++ usable and run make in source/Irrlicht.

This will build Irrlicht as static and shared library and place it in lib/Linux

Minetest

Clone https://github.com/sfan5/minetest.git and switch to the android_new branch. Configure it using CMake like this:

$ cmake . \
    -DCMAKE_C_COMPILER=`which arm-linux-androideabi-gcc` \
    -DCMAKE_CXX_COMPILER=`which arm-linux-androideabi-g++` \
    -DCMAKE_FIND_ROOT_PATH=<sysroot of your android toolchain> \
    -DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=ONLY \
    -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY \
    -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=BOTH \
    -DCMAKE_SYSTEM_NAME=Linux \
    -DIRRLICHT_LIBRARY=<path to libIrrlicht.a> \
    -DIRRLICHT_INCLUDE_DIR=<path to include/ of Irrlicht> \
    -DANDROID=1 \
    -DRUN_IN_PLACE=1

Now just enter make package. After make is done go into the Android directory and run <SDK_DIR>/tools/android update project --path ..

Then copy the .so using <NDK_DIR>/ndk-build and build the apk using ant debug.

You will then have the resources in minetest-x.x.x.tar.gz and the apk at Android/bin/Minetest-debug.apk. You will only need to do the "android update project" step once.

Running

For this step you need minetest-x.x.x.tar.gz and Minetest-debug.apk from the previous step.

Put all resource files & folders (builtin, client, ...) into /sdcard/minetest on your Android device. Install Minetest-debug.apk.

Now touch the Minetest icon and the lovely main menu should appear. ;-)

Dev Notes

General notes

  • cURL does not work
  • Add Bluetooth support for local multiplayer? (probably requires use of Java)

Moving away from Crystax NDK

Situation

NDK seems to be unmaintained, would be good if we could move away from it.

  • Builds with small tweaks to the code
  • Works, but everything that goes through wchar_t is messed up

Ideas

  • use Android's support library (verify if it does support locale stuff good enough)
  • use uClibc

Android's support library

pro:

  • Do not need to depend on more (Android-)external libraries
  • (Probably) Tuned for usage with Android

contra:

  • -

uClibc

pro:

  • Completely independent from Android -> avoids upcoming problems in Android
  • Also fixes some other problems we have with the libc

contra:

  • Increases executable size (uClibc is pretty small, this does not really count)
  • OpenGLES / Android libs may not work (verify this!)