mirror of
https://github.com/RetroShare/RetroShare.git
synced 2024-12-25 15:39:27 -05:00
99 lines
6.0 KiB
Plaintext
99 lines
6.0 KiB
Plaintext
|
Compile Retroshare for Android
|
||
|
==============================
|
||
|
|
||
|
== Introduction
|
||
|
|
||
|
Compiling an application for Android is not as easy as one would imagine, expecially one like RetroShare that has a big codebase and is not well documented. This document is aimed to empower the reader so she can hopefully succed or at least have a significant help in compiling her own RetroShare APK package installable on Android.
|
||
|
|
||
|
== Preparing The Environement
|
||
|
|
||
|
First of all setup your Qt for Android development environement following the guide on the link:http://doc.qt.io/qt-5/androidgs.html[Qt for android web site].
|
||
|
At this point you should have Android SDK, Android NDK, and Qt for Android working fine, and you should be capable of execute on a Android emulator on on your Android phone Qt for Android examples.
|
||
|
|
||
|
But RetroShare is not as simple to compile as those examples, in particular Android NDK precompiled toolchain is limited and doesn't support the full C++ specification and it is missing some part that is needed to build RetroShare, the good news is that Android NDK ships all the necessary to build a custom toolchain that is suitable to build RetroShare. In order to build the toolchain with needed library RetroShare provide the +android-prepare-toolchain.sh+ script, before you execute it you should define some variable the script cannot determine in an easy and reliable manner by itself in your terminal.
|
||
|
|
||
|
[source,bash]
|
||
|
-------------------------------------------------------------------------------
|
||
|
## The path where Android NDK is installed in your system
|
||
|
export ANDROID_NDK_PATH="/opt/android-ndk/"
|
||
|
|
||
|
## The path where your fresh compiled toolchain will be installed, take care
|
||
|
## the parent exists
|
||
|
export NDK_TOOLCHAIN_PATH="/home/$(whoami)/Development/android-toolchains/retroshare-android/"
|
||
|
|
||
|
## The CPU architecture of the Android device you want to target
|
||
|
export ANDROID_NDK_ARCH="arm"
|
||
|
|
||
|
## The Android API level the Android device you want to target
|
||
|
export ANDROID_PLATFORM_VER="23"
|
||
|
|
||
|
## The number of core that yout host CPU have (just to speed up compilation) set it to 1 if unsure
|
||
|
export HOST_NUM_CPU=1
|
||
|
|
||
|
./android-prepare-toolchain.sh
|
||
|
-------------------------------------------------------------------------------
|
||
|
|
||
|
Now is time for the bad news: as of today Qt assume you use the NDK precompiled toolchain and doesn't have an option to use the custom toolchain you just generated, so you need to tweak a little Qt internals to make usage of the custom toolchain. First of all you need to determine your Qt for Android installation path, in my case it is +/opt/Qt5.7.0/+ then find the +mkspecs+ directory in my case +/opt/Qt5.7.0/5.7/android_armv7/mkspecs+ and then modify qmake configuration for android target according to your toolchain, in my case I have done it with the following commands in the same shell I used before to take advantege of the variables I set before.
|
||
|
|
||
|
[source,bash]
|
||
|
-------------------------------------------------------------------------------
|
||
|
export QT_PATH="/opt/Qt5.7.0/"
|
||
|
export QT_MAJOR_VERSION="5.7"
|
||
|
|
||
|
cd ${QT_PATH}/${QT_MAJOR_VERSION}/android_armv7/mkspecs
|
||
|
sudo --preserve-env -s
|
||
|
cp -r android-g++ android-g++-backup
|
||
|
cd android-g++
|
||
|
sed -i "s|^ANDROID_PLATFORM =.*|ANDROID_PLATFORM = android-${ANDROID_PLATFORM_VER}|" qmake.conf
|
||
|
sed -i "s|^NDK_TOOLCHAIN_PATH =.*|NDK_TOOLCHAIN_PATH = ${NDK_TOOLCHAIN_PATH}|" qmake.conf
|
||
|
sed -i "s|^QMAKE_LFLAGS \+=.*|QMAKE_LFLAGS = --sysroot=${NDK_TOOLCHAIN_PATH}/sysroot/|" qmake.conf
|
||
|
-------------------------------------------------------------------------------
|
||
|
|
||
|
== Preparing Qt Creator
|
||
|
|
||
|
Now that your environement is set up you should configure Qt Creator for Android following the link:http://doc.qt.io/qtcreator/creator-developing-android.html[official guide], at the end of this step your Qt Creator should recognize Android compiler and Qt for Android kit, because we use a custom toolchain some step more is needed.
|
||
|
|
||
|
From the top menu click Tools -> Options... -> Build & Run -> Compilers -> Android GCC (arm-4.9) -> Clone
|
||
|
|
||
|
Now a new compiler usually named +Clone of Android GCC (arm-4.9)+ should have appeared on your compilers list, select that compiler and press the Browse button to look for your custom toolchain compiler you should find it at +$NDK_TOOLCHAIN_PATH/bin/arm-linux-androideabi-gcc+ then press Apply.
|
||
|
|
||
|
Now go to the Kits tab, select +Android for armeabi-v7a (GCC 4.9, Qt 5.7.0)+ and press Clone button a new kit is created and it is usually named +Clone of Android for armeabi-v7a (GCC 4.9, Qt 5.7.0)+ now select the new kit and change the compiler to the one you have just created.
|
||
|
|
||
|
Your Kit is now ready to use, now you can open retroshare as Qt Creator project and in the Projects left menu add the newly created kit if not already present, so you can select it on the build type selection button down on the left.
|
||
|
|
||
|
== Final tweaks
|
||
|
|
||
|
RetroShare GUI, plugins and WebUI are yet not supported on android so to be able to compile RetroShare without error you will have to open RetroShare.pro file with Qt Creator and change the following assignation
|
||
|
|
||
|
[source,makefile]
|
||
|
-------------------------------------------------------------------------------
|
||
|
SUBDIRS += \
|
||
|
openpgpsdk \
|
||
|
libbitdht \
|
||
|
libretroshare \
|
||
|
libresapi \
|
||
|
retroshare_gui \
|
||
|
retroshare_nogui \
|
||
|
plugins
|
||
|
-------------------------------------------------------------------------------
|
||
|
|
||
|
into
|
||
|
|
||
|
[source,makefile]
|
||
|
-------------------------------------------------------------------------------
|
||
|
SUBDIRS += \
|
||
|
openpgpsdk \
|
||
|
libbitdht \
|
||
|
libretroshare \
|
||
|
libresapi \
|
||
|
retroshare_nogui
|
||
|
-------------------------------------------------------------------------------
|
||
|
|
||
|
|
||
|
== Furter Readings
|
||
|
|
||
|
- link:http://doc.qt.io/qt-5/android-support.html[]
|
||
|
- link:https://developer.android.com/ndk/guides/libs.html[]
|
||
|
- link:retroshare://forum?name=Compiling%20nogui%20for%20android&id=8fd22bd8f99754461e7ba1ca8a727995&msgid=4e0f92330600bba9cf978f384f4b7b2f2ca64eff[]
|
||
|
- link:retroshare://file?name=Android%20Native%20Development%20Kit%20Cookbook.pdf&size=29214468&hash=0123361c1b14366ce36118e82b90faf7c7b1b136[]
|