NDK, ndk-build ve CMake için resmi destek içerir. Çoğu kullanıcı uygulama kodu oluşturmak için bu kılavuzlardan birine bakacağız. Amacı Bu belge, başka bir derleme dosyası kullanan mevcut bir sistemlerdir. Bu durum çoğu zaman hedeflenen üçüncü taraf bağımlılıklarında Android'e özgü (ör. OpenSSL ve libbzip2).
Yapılarına yerel NDK desteği eklemek isteyen sistem bakıcıları oluşturun sistemlerinin Sistem Bakımı Kılavuzu'nu okuması gerekir.
Genel Bakış
NDK'daki Clang derleyicisi sadece minimum yapılandırmayla kullanılabilir hedef ortamınızı belirlemeniz için gereklidir.
Doğru mimariyi derlediğinizden emin olmak için
Clang çağrılırken -target
ile hedefleyin. Örneğin, 64 bit için derlemek
minSdkVersion
/21 olan ARM Android için aşağıdakileri yapın:
$ $NDK/toolchains/llvm/prebuilt/$HOST_TAG/bin/clang++ \
--target aarch64-linux-android21 foo.cpp
Alternatif olarak, Clang için hedef önekli giriş noktaları vardır. Bunlar,
NDK sürümüne bağlı olarak clang'a yönlendiren sembolik bağlantılar veya komut dosyaları
ve ana işletim sistemiyle uyumlu olmasını sağlayın. Clang'i doğrudan --target
ile çağırmak daha güvenilir olacaktır.
budur. Bazen bağımsız değişken yönlendirme
hatalar var. Windows'da, yönlendirme için gereken ek CreateProcess
gerçek derleyiciye kopyalamanızda da fark edilebilir
geliştirme hızını olumsuz etkiler.
$ $NDK/toolchains/llvm/prebuilt/$HOST_TAG/bin/aarch64-linux-android21-clang++ \
foo.cpp
Her iki durumda da, $NDK
yerine NDK yolunu, $HOST_TAG
alanını da bu yol ile değiştirin
aşağıdaki tabloya göre indirdiğiniz NDK:
NDK OS Varyantı | Ana Makine Etiketi |
---|---|
macOS | darwin-x86_64 |
Linux | linux-x86_64 |
Windows 64 Bit | windows-x86_64 |
Buradaki önek veya hedef bağımsız değişkeni biçimi,
minSdkVersion
ifadesini belirten sonek. Bu sonek yalnızca
clang/clang++; binutils araçları (ar
ve strip
gibi) bir
sonek minSdkVersion
ürününden etkilenmediği için. Android'in desteklediği cihazlar
hedef üçlü düzeyi aşağıdaki gibidir:
ABI | Triple |
---|---|
ermeabi-v7a | armv7a-linux-androideabi |
kol64-v8a | aarch64-linux-android |
x86 | i686-linux-android |
x86-64 | x86_64-linux-android |
Birçok projenin için derleme komut dosyalarında GCC tarzı çapraz derleyiciler gerekir.
derleyici yalnızca bir işletim sistemi/mimari kombinasyonunu hedeflediğinden çalışmayabilir
-target
temiz bir şekilde. Bu gibi durumlarda, genellikle -target
bağımsız değişkenini derleyici tanımının bir parçası olarak kabul eder (ör. CC="clang -target
aarch64-linux-android21
). Kullandığınız derleme sisteminin
formu kullanamıyorsanız üç önekli Clang ikili programlarını kullanın.
Otomatik konferans
Autoconf projeleri, ortamla kullanılacak araç zincirini belirtmenize olanak tanır
değişkenlerine karşılık gelir. Örneğin, aşağıda Android için libpng
oluşturma işleminin nasıl yapılacağı gösterilmektedir
Linux'ta, minSdkVersion
API düzeyi 21 ile x86-64.
# Check out the source. git clone https://github.com/glennrp/libpng -b v1.6.37 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/llvm-ar export CC="$TOOLCHAIN/bin/clang --target=$TARGET$API" export AS=$CC export CXX="$TOOLCHAIN/bin/clang++ --target=$TARGET$API" export LD=$TOOLCHAIN/bin/ld export RANLIB=$TOOLCHAIN/bin/llvm-ranlib export STRIP=$TOOLCHAIN/bin/llvm-strip ./configure --host $TARGET make
Bu örnekte seçilen araçlar NDK r22 ve daha yeni sürümler için geçerlidir. Daha eski NDK'lar farklı araçlar gerektirebilir.
Otomatik yapılandırma olmayan reklam projeleri
Bazı makefile projeleri, aynı değişkenleri geçersiz kılarak çapraz derlemeye olanak tanır
aynı olacaktır. Aşağıda örnek olarak,
Android x86-64 için minSdkVersion
olan 21 ile libbzip2
derlemek üzere.
# 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/clang --target=$TARGET$API" \
AR=$TOOLCHAIN/bin/llvm-ar \
RANLIB=$TOOLCHAIN/bin/llvm-ranlib \
bzip2
Bu örnekte seçilen araçlar NDK r22 ve daha yeni sürümler için geçerlidir. Daha eski NDK'lar farklı araçlar gerektirebilir.