Android
Building Android from master branch
This is a simple guide how to build Minetest for android on Ubuntu on a 64 bit system. It's mostly about preparation, as, once everything is set up, minetest only needs cd build/android && make
to compile.
Required Packages
Git and make are neccessary: <br\>
sudo apt-get update
As your architecture is 64 bit, you need additional packages:
sudo apt-get install make subversion git-core build-essential
sudo apt-get install --force-yes libgd2-xpm ia32-libs ia32-libs-multiarch
Getting sdk and ndk
wget https://dl.google.com/android/android-sdk_r24.0.1-linux.tgz -O android-sdk.tgz <br\>
wget https://dl.google.com/android/ndk/android-ndk-r9d-linux-x86_64.tar.bz2 -O android-ndk.tar.bz2 <br\>
tar xf android-sdk.tgz <br\>
tar xf android-ndk.tar.bz2 <br\>
android-sdk-linux/tools/android update sdk --no-ui -a --filter platform-tool,android-10,build-tools-21.1.2 <br\>
The last line will ask for your confirmation multiple times.
Obtaining and building minetest
Clone minetest, and build it:
git clone --depth 1 https://github.com/minetest/minetest.git <br\>
cd minetest/build/android <br\>
make <br\>
sfan5's Android port
Building and Running
Building
What you need:
- GNU/Linux
- Android NDK
- Standalone toolchain made with Android NDK (with
android_native_app_glue.h
copied into<TOOLCHAIN_ROOT>/sysroot/usr/include
)
- You need to use Clang as GCC produces broken code
- 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 (It's ok to use gcc for Irrlicht) 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
and switch to the android_new
branch.
Configure it using CMake like this:
$ cmake . \ -DCMAKE_C_COMPILER=`which arm-linux-androideabi-clang` \ -DCMAKE_CXX_COMPILER=`which arm-linux-androideabi-clang++` \ -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 \ -DANDROID_SUPPORT_LIBRARY=<path to libandroid_support.a> \ -DANDROID_SUPPORT_INCLUDE_DIR=<patch to <NDK_DIR>/source/android/support/include> \ -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.
Development notes
General notes
- cURL does not work
- TLS support is needed too
- Idea: Use GnuTLS or LibreSSL, because OpenSSL is a nightmare to cross-compile
- Add Bluetooth support for local multiplayer (maybe)
- OpenAL with Android support: https://github.com/AerialX/openal-soft-android
Getting stuff to work without libCrystax
- Frequently crashes after going through
std::ios_base::~ios_base()
- Probably related to removal of libCrystax
- Pressing a button now roughly equals taking away a wood piece of a unstable Jenga tower
- Options:
- Use libc++
- Currently a problem with includes
- avoid destructing any streams
- This is not a good idea
- Go back to Crystax toolchain
- Uhh… no!