DuckDB has experimental support for Android. Please use the latest main branch of DuckDB instead of the stable versions.
Building the DuckDB Library Using the Android NDK
We provide build instructions for setups using macOS and Android Studio. For other setups, please adjust the steps accordingly.
-
Open Android Studio. Select the Tools menu and pick SDK Manager. Select the SDK Tools tab and tick the NDK (Side by side) option. Click OK to install.
-
Set the Android NDK's location. For example:
ANDROID_NDK=~/Library/Android/sdk/ndk/28.0.12433566/ -
Set the Android ABI. For example:
ANDROID_ABI=arm64-v8aOr:
ANDROID_ABI=x86_64 -
If you would like to use the Ninja build system, make sure it is installed and available on the
PATH. -
Set the list of DuckDB extensions to build. These will be statically linked in the binary. For example:
DUCKDB_EXTENSIONS="icu;json;parquet" -
Navigate to DuckDB's directory and run the build as follows:
PLATFORM_NAME="android_${ANDROID_ABI}" BUILDDIR=./build/${PLATFORM_NAME} mkdir -p ${BUILDDIR} cd ${BUILDDIR} cmake \ -G "Ninja" \ -DEXTENSION_STATIC_BUILD=1 \ -DDUCKDB_EXTRA_LINK_FLAGS="-llog" \ -DBUILD_EXTENSIONS=${DUCKDB_EXTENSIONS} \ -DENABLE_EXTENSION_AUTOLOADING=1 \ -DENABLE_EXTENSION_AUTOINSTALL=1 \ -DCMAKE_VERBOSE_MAKEFILE=on \ -DANDROID_PLATFORM=${ANDROID_PLATFORM} \ -DLOCAL_EXTENSION_REPO="" \ -DOVERRIDE_GIT_DESCRIBE="" \ -DDUCKDB_EXPLICIT_PLATFORM=${PLATFORM_NAME} \ -DBUILD_UNITTESTS=0 \ -DBUILD_SHELL=1 \ -DANDROID_ABI=${ANDROID_ABI} \ -DCMAKE_TOOLCHAIN_FILE=${ANDROID_NDK}/build/cmake/android.toolchain.cmake \ -DCMAKE_BUILD_TYPE=Release ../.. cmake \ --build . \ --config Release -
For the
arm64-v8aABI, the build will produce thebuild/android_arm64-v8a/duckdbandbuild/android_arm64-v8a/src/libduckdb.sobinaries.
Building the CLI in Termux
-
To build the command line client in the Termux application, install the following packages:
pkg install -y git ninja clang cmake python3 -
Set the list of DuckDB extensions to build. These will be statically linked in the binary. For example:
DUCKDB_EXTENSIONS="icu;json" -
Build DuckDB as follows:
mkdir build cd build export LDFLAGS="-llog" cmake \ -G "Ninja" \ -DBUILD_EXTENSIONS="${DUCKDB_EXTENSIONS}" \ -DDUCKDB_EXPLICIT_PLATFORM=linux_arm64_android \ -DCMAKE_BUILD_TYPE=Release \ .. cmake --build . --config Release
Note that you can also use the Python client on Termux:
pip install --pre --upgrade duckdb Troubleshooting
Log Library Is Missing
Problem: The build throws the following error:
ld.lld: error: undefined symbol: __android_log_write Solution: Make sure the log library is linked:
export LDFLAGS="-llog"