Zum Inhalt springen

Android

DuckDB hat experimentelle Unterstützung für Android. Bitte verwenden Sie den aktuellen Branch main von DuckDB statt der stabilen Versionen.

Die DuckDB-Bibliothek mit dem Android NDK bauen

Wir beschreiben den Build für Setups mit macOS und Android Studio. Für andere Setups passen Sie die Schritte entsprechend an.

  1. Öffnen Sie Android Studio. Wählen Sie das Menü Tools und dann SDK Manager. Wählen Sie den Tab SDK Tools und aktivieren Sie die Option NDK (Side by side). Klicken Sie auf OK, um zu installieren.

  2. Setzen Sie den Speicherort des Android NDK. Zum Beispiel:

    Terminal window
    ANDROID_NDK=~/Library/Android/sdk/ndk/28.0.12433566/
  3. Setzen Sie die Android ABI. Zum Beispiel:

    Terminal window
    ANDROID_ABI=arm64-v8a

    Oder:

    Terminal window
    ANDROID_ABI=x86_64
  4. Wenn Sie das Ninja-Buildsystem verwenden möchten, stellen Sie sicher, dass es installiert und im PATH verfügbar ist.

  5. Legen Sie die Liste der zu bauenden DuckDB-Erweiterungen fest. Diese werden statisch in die Binärdatei gelinkt. Zum Beispiel:

    Terminal window
    DUCKDB_EXTENSIONS="icu;json;parquet"
  6. Wechseln Sie ins DuckDB-Verzeichnis und starten Sie den Build wie folgt:

    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
  7. Für die ABI arm64-v8a erzeugt der Build die Binärdateien build/android_arm64-v8a/duckdb und build/android_arm64-v8a/src/libduckdb.so.

Die CLI in Termux bauen

  1. Um den Kommandozeilen-Client in der Termux-App zu bauen, installieren Sie die folgenden Pakete:

    Terminal window
    pkg install -y git ninja clang cmake python3
  2. Legen Sie die Liste der zu bauenden DuckDB-Erweiterungen fest. Diese werden statisch in die Binärdatei gelinkt. Zum Beispiel:

    Terminal window
    DUCKDB_EXTENSIONS="icu;json"
  3. Bauen Sie DuckDB wie folgt:

    Terminal window
    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

Beachten Sie, dass Sie den Python-Client auch unter Termux verwenden können:

Terminal window
pip install --pre --upgrade duckdb

Fehlerbehebung

Log-Bibliothek fehlt

Problem: Der Build wirft den folgenden Fehler:

Terminal window
ld.lld: error: undefined symbol: __android_log_write

Lösung: Stellen Sie sicher, dass die Log-Bibliothek gelinkt ist:

Terminal window
export LDFLAGS="-llog"