Difference between revisions of "Android"

From Minetest Developer Wiki
Jump to navigation Jump to search
m
(Add up to date guide)
Line 1: Line 1:
<big><big><big>'''This page is about the WIP Android port by [[User:Sfan5|sfan5]], not about the official port'''</big></big></big>
+
= Building Android from master branch =
 +
This is a simple guide how to build Minetest for android on Ubuntu. It's mostly about preparation, as, once everything is set up, minetest only needs <code>cd build/android && make</code> to compile.
  
= Building and Running =
+
=== Required Packages ===
== Building ==
+
Git and make are neccessary: <br\><br/>
 +
<code>
 +
sudo apt-get update<br/>
 +
sudo apt-get install make git-core build-essential<br/><br/>
 +
</code>
 +
If your architecture is 64 bit, you need additional packages:<br/><br/>
 +
<code>
 +
sudo apt-get install --force-yes libgd2-xpm ia32-libs ia32-libs-multiarch
 +
</code>
 +
=== Getting sdk and ndk ===
 +
<code>
 +
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-r10d-3-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/tools/android update sdk --no-ui --filter platform-tool,android-10,build-tools-21.1.2 <br\><br/>
 +
</code>
 +
The last line will ask for your confirmation multiple times.
 +
=== Obtaining and building minetest ===
 +
Clone minetest, and build it:<br/><br/>
 +
<code>
 +
git clone --depth 1 https://github.com/minetest/minetest.git <br\>
 +
cd minetest/build/android <br\>
 +
make <br\>
 +
</code>
 +
= [[User:Sfan5|sfan5]]'s Android port =
 +
== Building and Running ==
 +
=== Building ===
 
What you need:
 
What you need:
 
* GNU/Linux
 
* GNU/Linux
Line 15: Line 43:
 
* ''ADB (optional but very useful)''
 
* ''ADB (optional but very useful)''
  
=== Irrlicht ===
+
==== Irrlicht ====
  
 
Clone <code>https://github.com/sfan5/irrlicht-android</code>.
 
Clone <code>https://github.com/sfan5/irrlicht-android</code>.
Line 23: Line 51:
 
This will build Irrlicht as static and shared library and place it in <code>lib/Linux</code>
 
This will build Irrlicht as static and shared library and place it in <code>lib/Linux</code>
  
=== Minetest ===
+
==== Minetest ====
  
 
Clone <code>https://github.com/sfan5/minetest</code> and switch to the <code>android_new</code> branch.
 
Clone <code>https://github.com/sfan5/minetest</code> and switch to the <code>android_new</code> branch.
Line 51: Line 79:
 
You will only need to do the “Android update project” step once.
 
You will only need to do the “Android update project” step once.
  
== Running ==
+
=== Running ===
  
 
For this step you need '''minetest-''x.x.x''.tar.gz''' and '''Minetest-debug.apk''' from the previous step.
 
For this step you need '''minetest-''x.x.x''.tar.gz''' and '''Minetest-debug.apk''' from the previous step.
Line 60: Line 88:
 
Now touch the Minetest icon and the lovely main menu should appear.
 
Now touch the Minetest icon and the lovely main menu should appear.
  
= Development notes =
+
== Development notes ==
  
== General notes ==
+
=== General notes ===
  
 
* cURL does not work
 
* cURL does not work
Line 71: Line 99:
 
* OpenAL with Android support: https://github.com/AerialX/openal-soft-android
 
* OpenAL with Android support: https://github.com/AerialX/openal-soft-android
  
== Getting stuff to work without libCrystax ==
+
=== Getting stuff to work without libCrystax ===
  
 
* Frequently crashes after going through <code>std::ios_base::~ios_base()</code>
 
* Frequently crashes after going through <code>std::ios_base::~ios_base()</code>
Line 85: Line 113:
  
  
== References ==
+
=== References ===
  
 
<references/>
 
<references/>
 
[[Category:Compiling Minetest]]
 
[[Category:Compiling Minetest]]

Revision as of 00:07, 15 March 2015

Building Android from master branch

This is a simple guide how to build Minetest for android on Ubuntu. 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
sudo apt-get install make git-core build-essential

If your architecture is 64 bit, you need additional packages:

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-r10d-3-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/tools/android update sdk --no-ui --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)

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!


References