Building PokerTH for Android

Requirements

  • QT 5 for android: (
  • Android NDK toolset r13b (
  • JDK v7+
  • ant 1.8+

CMOSS

CMOSS is a set of libraries built for android.

To get CMOSS and build them:

$ git clone

$ cd cmoss/build-droid/

$ ./build-all.sh [NDK_DIRECTORY] ## (eg: ./build-all.sh ~/android/android-ndk-r13b)

Remarks:

  • This process could lauch some errors. It's possible one has to manually modify some variables in build-all.sh. Good luck ;)
  • Important note: ndk version should be r13b as the cmoss libs build best with it.
  • If don't have wine installed ( there are two options:
  • Steps:
  • Install it ;)
  • Get protoc for windows: and extract it in PokerTH source directory. Then, rename protoc-2.4.1.exe to protoc.exe. Note that build for protobuf shall fail, but it's not a big deal. Just ignore it.
  • Some steps...
  • Check your protoc version ($ protoc --version)
  • Edit build-all.sh and replace [export PROTOBUF_VERSION="2.4.1"] for [export PROTOBUF_VERSION="your protoc version"]
  • Edit build-protobuf.sh and replace [--with-protoc=`wine ${TOPDIR}/protoc-2.4.1.exe`] for [--with-protoc=/usr/bin/protoc] in ./configure command
  • Edit pokerth-protocol.pro and remove "wine" from android entry
  • Depending on your device, might be usefull to edit build-all.sh and replace:
  • [export ARM_TARGET="armv5"] for [export ARM_TARGET="armv7"]. Make sure your android device is able to run with armv-7 architecture before switch. If you are not sure, just leave "armv5". See later note in compilation process (*)
  • [export ANDROID_API_LEVEL="9"] for [export ANDROID_API_LEVEL="<NDK_VERSION>"], where <NDK_VERSION> is your ANDROID NDK version.

Get code

Same as version for Linux

Compilation

set ANDROID_NDK_ROOT variable to its directory. E.g.:

$ export ANDROID_NDK_ROOT=~/android/android-ndk-r13b

Run qmake for Android and make. E.g:

$ ~/Qt/Qt5.7.1/5.7/android_armv7/bin/qmake CONFIG+="client gui_800x480" PREFIX+="[CMOSS_DIRECTORY]/bin/droid" -spec android-g++ pokerth.pro

$ make

Once finished, ./libpokerth.so must be created

Remarks:

If Qt for Android is different than 5.7.1, you have to correct some files, replacing [#include "QtGui/5.7.1/..."] for the aproppiate version you donwloaded, in following files:

  • ./src/gui/qt/aboutpokerth/aboutpokerthimpl.cpp
  • ./src/gui/qt/gametable/gametableimpl.cpp
  • ./src/gui/qt/startwindow/startwindowimpl.cpp

(*) If you modified ARM architecture when compiling CMOSS (from armv5 to armv7), before running qmake and make you have to replace in pokerth_game.pro from:

android{

LIBPATH += $${PREFIX}/lib/armv5

LIB_DIRS = $${PREFIX}/lib/armv5

}

to

android{

LIBPATH += $${PREFIX}/lib/armv7

LIB_DIRS = $${PREFIX}/lib/armv7

}

Get Android SDK

Download " (or newer) and uncompress in any folder
Get SDK:

$ cd tools_r25.2.3-linux/tools

$ ./android

A GUI application will be launched to select tools and versions to be installed. Install, at least:

  • From Tools: Android SDK Tools; Android SDK Build-tools; Android SDK Platform-tools
  • Full Android SDK v5.1.1 (API 22) or newer

Build APK

First, edit android-libpokerth.so-deployment-settings.json file to set the appropriate SDK location, for instance:

"sdk": "~/android/tools_r25.2.3-linux",

Set JAVA_HOME and append javac to PATH

$ export JAVA_HOME=/usr/lib/jvm/java-8-oracle

$ export PATH=$JAVA_HOME/bin:$PATH

Build APK:

$ make install INSTALL_ROOT=./bin/

$ ~/Qt/Qt5.7.1/5.7/android_armv7/bin/androiddeployqt --input android-libpokerth.so-deployment-settings.json \

--output ./bin --deployment bundled --android-platform android-22 --jdk /usr/lib/jvm/java-8-oracle --ant /usr/bin/ant

APK should be created in ./bin/bin/QtApp-debug.apk