Building OpenCPN for Android
These instructions describe how to build OpenCPN for Android on Ubuntu 24.04.
These build instructions are incomplete and under development. Users are encouraged to improve them by using the "Edit this page" button to submit patches and corrections.* |
Build Environment Setup
1. Required Tools
Install basic build tools:
sudo apt update sudo apt install -y \ cmake \ git \ gettext \ python3-pip \ python3-venv \ libxcb-cursor0 \ libxcb-cursor-dev \ libarchive-dev \ libjpeg-dev \ zlib1g-dev \ libbz2-dev \ libsndfile1-dev \ libssl-dev \ libgles1 \ default-jdk
Get Java installation path:
sudo update-alternatives --config java export JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64
2. Install and Configure Android Studio
-
Download Android Studio from Android Developer site
-
Extract and install according to Google’s instructions for Ubuntu
-
Launch Android Studio
-
In the welcome screen, click on "More Actions" > "SDK Manager"
-
In SDK Manager, under "SDK Tools" tab:
-
Check "NDK (Side by side)"
-
Check "Android SDK Command-line Tools"
-
Check "CMake"
-
Click "Apply" to download and install
-
Get path to Android NDK:
~/Android/Sdk/cmdline-tools/latest/bin/sdkmanager --list |grep ndk
Set environment variables:
export ANDROID_SDK_ROOT=$HOME/Android/Sdk export ANDROID_NDK_VERSION=$(ls $ANDROID_SDK_ROOT/ndk | sort -V | tail -1) export ANDROID_NDK_ROOT=$ANDROID_SDK_ROOT/ndk/${ANDROID_NDK_VERSION} export PATH=$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64/bin:$PATH # API 30: Android 11 (2020) # API 31: Android 12 (2021) # API 33: Android 13 (2022) # API 34: Android 14 (2023) export OCPN_ANDROID_API=33 # Minimum Android API level to target
Create required NDK symlink:
android_x86_64="$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64" ln -sf $android_x86_64/bin/llvm-ar \ $android_x86_64/bin/aarch64-linux-android-ar
Building the Core Library
2. Create build directory and configure
For armhf build - 32bit:
mkdir build-android-armhf cd build-android-armhf cmake \ -DCMAKE_BUILD_TYPE=Release \ -DOCPN_TARGET_TUPLE="Android-armhf;${OCPN_ANDROID_API};armhf" \ -Dtool_base="$ANDROID_SDK_ROOT/ndk/${ANDROID_NDK_VERSION}/toolchains/llvm/prebuilt/linux-x86_64" \ ..
For arm64 build - 64bit:
mkdir build-android-arm64 cd build-android-arm64 cmake \ -DCMAKE_BUILD_TYPE=Release \ -DOCPN_TARGET_TUPLE="Android-arm64;${OCPN_ANDROID_API};arm64" \ -Dtool_base="$ANDROID_SDK_ROOT/ndk/${ANDROID_NDK_VERSION}/toolchains/llvm/prebuilt/linux-x86_64" \ ..
Building the APK
After building the core library successfully:
1. Setup Qt environment
export QT_ANDROID_ROOT=/path/to/OpenCPN/cache/OCPNAndroidCoreBuildSupport/qt5
Create APK build directory
mkdir apk_build cd apk_build
2. Generate Makefile with qmake
$QT_ANDROID_ROOT/android_armv7/bin/qmake \
-makefile ../buildandroid/opencpn.pro \
-o Makefile.android -r -spec android-g++ CONFIG+=debug