Building on Android¶
Note: Build works ONLY on Linux systems. Current documentation shows how to build application on Ubuntu 18.04¶
Pre-requisites¶
You need to install rename
(required for building libraries), OpenJDK
11+, gradle
5.1+ and Android SDK
.
sudo apt-get install g++ rename openjdk-11-jdk gradle
- Android SDK (choose command line tools only)
- If your system provides gradle with version < 5.1, download it from Gradle homepage
Dependencies¶
Prepare Android SDK and install required packages
mkdir /tmp/android-sdk
cd /tmp/android-sdk
wget <latest SDK link>
unzip commandlinetools-linux-*_latest.zip
# install required tools
./cmdline-tools/bin/sdkmanager --sdk_root=/opt/android-sdk "build-tools;31.0.0" "cmake;3.18.1" "ndk;21.4.7075529"
Clone repository with submodules
git clone --recurse-submodules https://github.com/PurpleI2P/i2pd-android.git
Compile required libraries
export ANDROID_SDK_ROOT=/opt/android-sdk
export ANDROID_NDK_HOME=$ANDROID_SDK_ROOT/ndk/21.4.7075529
pushd app/jni
./build_boost.sh
./build_openssl.sh
./build_miniupnpc.sh
popd
Building Android application¶
Build application¶
- Create
local.properties
file with path to SDK and NDK
sdk.dir=/opt/android-sdk
ndk.dir=/opt/android-sdk/ndk/21.4.7075529
- Run
gradle clean assembleDebug
- You will find an .apk file in
app/build/outputs/apk
folder
Creating release .apk¶
In order to create release .apk you must obtain a Java keystore file(.jks). Either you have in already, or you can generate it yourself using keytool, or from one of you existing well-known certificates. For example, i2pd release are signed with this certificate.
Change file app\build.gradle
by replacing pre-defined values with your own
release {
storeFile file("i2pdapk.jks")
storePassword "android"
keyAlias "i2pdapk"
keyPassword "android"
}
Run gradle clean assembleRelease
Building executable binary¶
- Set environment variables:
export ANDROID_SDK_ROOT=/opt/android-sdk
export ANDROID_NDK_HOME=$ANDROID_SDK_ROOT/ndk/21.4.7075529
- Run
$ANDROID_NDK_HOME/ndk-build -j <threads> NDK_MODULE_PATH=$PWD
frombinary/jni
folder - You will find an
i2pd
executable inbinary/libs/<architecture>
folder