NDK ini berisi dukungan resmi untuk ndk-build dan CMake. Sebagian besar pengguna perlu merujuk ke salah satu panduan tersebut untuk mem-build kode aplikasi. Tujuan dari dokumen ini adalah untuk menjelaskan cara mem-build kode yang sudah ada yang menggunakan sistem build lain. Hal ini sering terjadi pada dependensi pihak ketiga yang tidak khusus Android, seperti OpenSSL dan libbzip2.
Pengelola sistem build yang ingin menambahkan dukungan NDK native ke sistem build sebaiknya membaca Panduan Pengelola Sistem Build.
Ringkasan
Mulai dari NDK r19, toolchain yang diinstal secara default bersama NDK sudah dapat digunakan. Skrip make_standalone_toolchain.py
tidak lagi diperlukan untuk berinteraksi dengan sistem build arbitrer.
Untuk memastikan Anda membuat kode untuk arsitektur yang tepat, teruskan target yang sesuai dengan -target
saat memanggil Clang, atau panggil Clang berawalan target. Misalnya, untuk mengompilasi Android ARM 64 bit dengan minSdkVersion
21, salah satu dari yang berikut ini dapat digunakan dan Anda dapat memilih opsi yang menurut Anda paling praktis:
$ $NDK/toolchains/llvm/prebuilt/$HOST_TAG/bin/clang++ \
-target aarch64-linux-android21 foo.cpp
$ $NDK/toolchains/llvm/prebuilt/$HOST_TAG/bin/aarch64-linux-android21-clang++ \
foo.cpp
Dalam kedua kasus tersebut, ganti $NDK
dengan jalur ke NDK dan $HOST_TAG
agar cocok dengan NDK yang sudah didownload, dengan mengacu pada tabel berikut:
Varian OS NDK | Tag Host |
---|---|
macOS | darwin-x86_64 |
Linux | linux-x86_64 |
Windows 32 bit | windows |
Windows 64 bit | windows-x86_64 |
Format argumen target atau awalan di sini adalah triple target dengan akhiran yang menunjukkan minSdkVersion
. Akhiran ini hanya digunakan dengan clang/clang++; alat binutils (seperti ar
dan strip
) tidak memerlukan akhiran karena tidak terpengaruh oleh minSdkVersion
. Triple target yang didukung Android meliputi:
ABI | Triple |
---|---|
armeabi-v7a | armv7a-linux-androideabi |
arm64-v8a | aarch64-linux-android |
x86 | i686-linux-android |
x86-64 | x86_64-linux-android |
Banyak skrip build project mengharapkan kompilasi silang bergaya GCC di mana setiap compiler hanya menargetkan satu kombinasi OS/arsitektur, sehingga mungkin tidak menangani -target
dengan rapi. Dalam kasus semacam ini, sebaiknya gunakan biner Clang berawalan triple.
Autoconf
Project autoconf memungkinkan Anda menentukan toolchain yang akan digunakan dengan variabel
lingkungan. Misalnya, contoh berikut menunjukkan cara membuat libpng
untuk Android
x86-64 dengan minSdkVersion
API level 21, di Linux.
# Check out the source. git clone https://github.com/glennrp/libpng cd libpng
# Only choose one of these, depending on your build machine... export TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/darwin-x86_64 export TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64
# Only choose one of these, depending on your device... export TARGET=aarch64-linux-android export TARGET=armv7a-linux-androideabi export TARGET=i686-linux-android export TARGET=x86_64-linux-android
# Set this to your minSdkVersion. export API=21
# Configure and build. export AR=$TOOLCHAIN/bin/$TARGET-ar export AS=$TOOLCHAIN/bin/$TARGET-as export CC=$TOOLCHAIN/bin/$TARGET$API-clang export CXX=$TOOLCHAIN/bin/$TARGET$API-clang++ export LD=$TOOLCHAIN/bin/$TARGET-ld export RANLIB=$TOOLCHAIN/bin/$TARGET-ranlib export STRIP=$TOOLCHAIN/bin/$TARGET-strip ./configure --host $TARGET make
Project make non-autoconf
Beberapa project makefile mendukung kompilasi silang dengan mengganti variabel yang sama dengan yang Anda gunakan pada project autoconf. Misalnya, contoh berikut ini menunjukkan cara mem-build libbzip2
untuk Android x86-64 dengan minSdkVersion
21.
# Check out the source.
git clone https://gitlab.com/bzip/bzip2.git
cd bzip2
# Only choose one of these, depending on your build machine...
export TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/darwin-x86_64
export TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64
# Only choose one of these, depending on your device...
export TARGET=aarch64-linux-android
export TARGET=armv7a-linux-androideabi
export TARGET=i686-linux-android
export TARGET=x86_64-linux-android
# Set this to your minSdkVersion.
export API=21
# Build.
make \
CC=$TOOLCHAIN/bin/$TARGET$API-clang \
AR=$TOOLCHAIN/bin/$TARGET-ar \
RANLIB=$TOOLCHAIN/bin/$TARGET-ranlib \
bzip2