android

Building/working on the Android Port

Note : We recommend you to put the “android-toolchain” and “player” directories in the same directory.

1) Build the android port

a) Install the Android SDK

Download and follow the official instructions to install the Android SDK : http://developer.android.com/sdk/installing/index.html?pkg=tools

In the SDK directory, execute the “android” file, it displays a GUI. Use it to download the API 12 (or later). If you want to launch the application on a Virtual Machine, download the ARM EABI System Image.

Export the SDK directory’s path :

  export SDK_ROOT=/the_sdk_directory_path

b) Install the Android NDK

To compile the Player’s C++ code for Android, you have to compile it with the Android NDK. Download it and follow the official instructions : https://developer.android.com/tools/sdk/ndk/index.html

Export the NDK directory’s path :

  export NDK_ROOT=/the_ndk_directory_path

You also have to export the ARM EABI toolchain path in the NDK directory. On Linux it should be :

  export PATH=$NDK_ROOT/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin:$PATH

On MacOS it should be :

  export PATH=$NDK_ROOT/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin:$PATH

c) Build the Android Toolchain

In your working directory, clone the android-toolchain :

  git clone https://github.com/Ghabry/easyrpg-android-libs android-toolchain
  cd android-toolchain

Execute this script :

  WORKSPACE=$(pwd)
  # Compile easyrpg dependencies
  ndk-build
  cp obj/local/armeabi-v7a/*.a libs/armeabi-v7a/
  ## Compile icu
  # Native
  cd $WORKSPACE/jni
  cp -r icu4c-53.1 icu4c-53.1-native
  cd icu4c-53.1-native/source
  chmod u+x configure
  ./configure --enable-static --enable-shared=no --enable-tests=no --enable-samples=no --enable-dyload=no --enable-tools --with-data-packaging=static
  make
  export ICU_CROSS_BUILD=$PWD
  # Android
  cd ../../icu4c-53.1/source
  export CPPFLAGS="-I$NDK_ROOT/platforms/android-8/arch-arm/usr/include -I$NDK_ROOT/sources/cxx-stl/stlport/stlport -O3 -fno-short-wchar -DU_USING_ICU_NAMESPACE=0 -DU_GNUC_UTF16_STRING=0 -fno-short-enums -nostdlib"
  export CXXFLAGS="$CPPFLAGS"
  export CFLAGS="$CXXFLAGS"
  export LDFLAGS="-lc -Wl,-rpath-link=$NDK_ROOT/platforms/android-8/arch-arm/usr/lib/ -L $NDK_ROOT/platforms/android-8/arch-arm/usr/lib/"
  chmod u+x configure
  ./configure --with-cross-build=$ICU_CROSS_BUILD --enable-strict=no  --enable-static --enable-shared=no --enable-tests=no --enable-samples=no --enable-dyload=no --enable-tools=no --host=arm-linux-androideabi --with-data- packaging=static
  mv $NDK_ROOT/platforms/android-8/arch-arm/usr/include/util.h _util.h #To prevent a build error
  make
  mv _util.h $NDK_ROOT/platforms/android-8/arch-arm/usr/include/util.h #Back to the original directory
  cp lib/*.a $WORKSPACE/libs/armeabi-v7a/

2) Build the Android Port

Return to your working directory (which should contain the android-toolchain directory)

Export the android-toolchain directory, it should be :

  export EASYDEV_ANDROID=$(pwd)/android-toolchain

Export the path of the zipalign program in the Android SDK, which depends of the API installed package :

  export PATH=$PATH:$SDK_ROOT/build-tools/21.1.2/

Create a keystore which will be used later :

  keytool -genkey -v -keystore easyrpg.keystore -alias nightly -keyalg RSA -keysize 2048 -validity 10000

Export the path of the generated keystore.

  export PATH_KEYSTORE=$(pwd)/easyrpg.keystore

And the password you gave when you generated the keystore :

  export MDP=the_password

Clone the Player repository :

  git clone https://github.com/EasyRPG/Player.git
  cd Player

Then execute this script :

  WORKSPACE=$(pwd)
  #Clone of liblcf
  mkdir -p lib
  git clone https://github.com/EasyRPG/liblcf lib/liblcf
  cd builds/android
  #Download of timidity
  git clone https://github.com/Ghabry/timidity_gus.git assets/timidity

You have to specify the API Target you will use to build the Player, for now we use the API 12, use “android list targets” to know the number associated with installed API. We assume this number is 1 :

  android update project --path "." --target 1

NB : We’re targeting API 12 (to have gamepad support from SDL lib), but the minimum supported SDK is API 10.

Build the project :

  ndk-build
  ant clean
  ant release
  cd bin
  jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore $PATH_KEYSTORE -storepass $MDP SDLActivity-release-unsigned.apk nightly
  zipalign 4 SDLActivity-release-unsigned.apk EasyRpgPlayerActivity.apk

3) Import the project on Eclipse

a) Install the ADT Plugin

Follow the official instructions by Google : http://developer.android.com/sdk/installing/installing-adt.html Don’t forget to specify the previous Android SDK directory path instead of downloading a new one.

b) Import the project

File->Import-> Android -> “Existing Android Code Into Workspace”

Choose the builds/android directory of the Player’s directory as the project root.

Congratulations ! You can now work on the Player’s Android port ! Tu run the program, choose a Virtual Machine with armeabi-v7a CPU, or connect an android device to your computer (don’t forget to enable the USB Debugging).