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:
bash
ANDROID_NDK=~/Library/Android/sdk/ndk/28.0.12433566/
- Set the Android ABI. For example:
bash
ANDROID_ABI=arm64-v8a
Or:
bash
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:
bash
DUCKDB_EXTENSIONS="icu;json;parquet"
- Navigate to DuckDB's directory and run the build as follows:
bash
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:
bash
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:
bash
DUCKDB_EXTENSIONS="icu;json"
- Build DuckDB as follows:
bash
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"