Android
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:
Terminal window ANDROID_NDK=~/Library/Android/sdk/ndk/28.0.12433566/ -
Set the Android ABI. For example:
Terminal window ANDROID_ABI=arm64-v8aOr:
Terminal window 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:
Terminal window DUCKDB_EXTENSIONS="icu;json;parquet" -
Navigate to DuckDB’s directory and run the build as follows:
Terminal window 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:
Terminal window 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:
Terminal window DUCKDB_EXTENSIONS="icu;json" -
Build DuckDB as follows:
Terminal window mkdir buildcd buildexport 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 duckdbTroubleshooting
Log Library Is Missing
Problem: The build throws the following error:
ld.lld: error: undefined symbol: __android_log_writeSolution: Make sure the log library is linked:
export LDFLAGS="-llog"