Difference between revisions of "Android"

From Minetest Developer Wiki
Jump to navigation Jump to search
Line 1: Line 1:
= Minetest on Android =
+
= Building and Running =
 
== Building ==
 
== Building ==
 
What you need:
 
What you need:
Line 48: Line 48:
  
 
Now touch the Minetest icon and the lovely main menu should appear. ;-)
 
Now touch the Minetest icon and the lovely main menu should appear. ;-)
 +
 +
= Dev Notes =
 +
== General notes ==
 +
* cURL does not work
 +
* Add Bluetooth support? (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!)

Revision as of 08:12, 4 March 2014

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? (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!)