---
layout: docu
redirect_from:
- /docs/dev/building/android
title: 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.

1. Open [Android Studio](https://developer.android.com/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.

1. Set the Android NDK's location. For example:

   ```batch
   ANDROID_NDK=~/Library/Android/sdk/ndk/28.0.12433566/
   ```

1. Set the [Android ABI](https://developer.android.com/ndk/guides/abis). For example:

   ```batch
   ANDROID_ABI=arm64-v8a
   ```

   Or:

   ```batch
   ANDROID_ABI=x86_64
   ```

1. If you would like to use the [Ninja build system]({% link docs/stable/dev/building/overview.md %}#prerequisites), make sure it is installed and available on the `PATH`.

1. Set the list of DuckDB extensions to build. These will be statically linked in the binary. For example:

   ```batch
   DUCKDB_EXTENSIONS="icu;json;parquet"
   ```

1. Navigate to DuckDB's directory and run the build as follows:

   ```batch
   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
   ```

1. For the `arm64-v8a` ABI, the build will produce the `build/android_arm64-v8a/duckdb` and `build/android_arm64-v8a/src/libduckdb.so` binaries.

## Building the CLI in Termux

1. To build the [command line client]({% link docs/stable/clients/cli/overview.md %}) in the [Termux application](https://termux.dev/), install the following packages:

   ```batch
   pkg install -y git ninja clang cmake python3
   ```

1. Set the list of DuckDB extensions to build. These will be statically linked in the binary. For example:

   ```batch
   DUCKDB_EXTENSIONS="icu;json"
   ```

1. Build DuckDB as follows:

   ```batch
   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:

```batch
pip install --pre --upgrade duckdb
```

## Troubleshooting

### Log Library Is Missing

**Problem:**
The build throws the following error:

```console
ld.lld: error: undefined symbol: __android_log_write
```

**Solution:**
Make sure the log library is linked:

```batch
export LDFLAGS="-llog"
```