Bu dokümanda, ndk-build
tarafından kullanılan Application.mk
derleme dosyası açıklanmaktadır.
Bundan önce Kavramlar sayfasını okumanızı öneririz.
Genel bakış
Application.mk
, ndk-build için proje geneli ayarlarını belirtir. Varsayılan olarak, uygulamanızın proje dizininde jni/Application.mk
konumunda bulunur.
Değişkenler
UYGULAMA
Varsayılan olarak NDK derleme sistemi, kullanımdan kaldırılmayan tüm ABI'lar için kod oluşturur. Belirli ABI'lar için kod oluşturmak üzere APP_ABI
ayarını kullanabilirsiniz. Tablo 1'de, farklı talimat grupları için APP_ABI
ayarları gösterilmektedir.
Tablo 1. Farklı talimat grupları için APP_ABI
ayarları.
Talimat ayarlandı | Değer |
---|---|
32 bit ARMv7 | APP_ABI := armeabi-v7a |
64 bit ARMv8 (AArch64) | APP_ABI := arm64-v8a |
x86 | APP_ABI := x86 |
x86-64 | APP_ABI := x86_64 |
Desteklenen tüm ABI'lar (varsayılan) | APP_ABI := all |
Ayrıca, aynı satıra boşlukla ayırarak birden fazla değer belirtebilirsiniz. Örneğin:
APP_ABI := armeabi-v7a arm64-v8a x86
Desteklenen tüm ABI'ların listesi ve kullanımları ile sınırlamaları hakkında bilgi edinmek için Android ABI'lar sayfasına bakın.
UYGULAMA_ASFLAGLARI
Projedeki her montaj kaynak dosyası (.s
ve .S
dosyaları) için derleyiciye iletilecek işaretler.
UYGULAMA_ASMFLAGS
Tüm YASM kaynak dosyaları için YASM'ye gönderilecek işaretler (yalnızca .asm
, x86/x86_64).
UYGULAMA DERLEMESİ
ndk-build, varsayılan olarak Android.mk dosyasının proje köküne göre jni/Android.mk
konumunda bulunduğunu varsayar.
Android.mk dosyasını farklı bir konumdan yüklemek için APP_BUILD_SCRIPT
öğesini Android.mk dosyasının mutlak yoluna ayarlayın.
UYGULAMA_CFLAGS'ları
Projedeki tüm C/C++ derleyicileri için iletilecek işaretler.
Ayrıca bkz.: APP_CONLYFLAGS, APP_CPPFLAGS.
UYGULAMA_DIŞI_TIDY
Projedeki tüm modüllerde clang-tidy özelliğini etkinleştirmek için değeri ayarlayın. Varsayılan olarak devre dışıdır.
UYGULAMA
Projedeki tüm dolaylı yürütme işlemleri için iletilecek işaretler.
UYGULAMA KAPSAYICILARI
Projedeki tüm C derlenmeleri için iletilecek işaretler. Bu işaretler, C++ kodu için kullanılmaz.
Ayrıca bkz.: APP_CFLAGS, APP_CPPFLAGS.
UYGULAMA_PPPFLAGS
Projedeki tüm C++ derlemeleri için iletilecek işaretler. Bu işaretler, C kodu için kullanılmaz.
Ayrıca bkz. APP_CFLAGS, APP_CONLYFLAGS.
UYGULAMA_CXXFLAGS
APP_CPPFLAGS
ile aynıdır, ancak derleme komutunda APP_CPPFLAGS
sonrasında görünür. Örneğin:
APP_CPPFLAGS := -DFOO
APP_CXXFLAGS := -DBAR
Yukarıdaki yapılandırma, clang++ -DBAR -DFOO
yerine clang++
-DFOO -DBAR
işlevine benzer bir derleme komutuyla sonuçlanır.
UYGULAMA HATASI AYIKLAMA
Hata ayıklaması yapılabilecek bir uygulama oluşturmak için true değerine ayarlanır.
UYGULAMA_LDFLAGS
Yürütülebilir dosyaları ve paylaşılan kitaplıkları bağlarken iletilecek işaretler.
APP_MANIFEST
Bir AndroidManifest.xml dosyasının mutlak yolu.
Varsayılan olarak, $(APP_PROJECT_PATH)/AndroidManifest.xml)
varsa kullanılır.
UYGULAMA_MODÜLLERİ
Derlenecek modüllerin açık listesi. Bu listedeki öğeler, LOCAL_MODULE
Android'de Android.mk dosyasında görünen modüllerin adlarıdır.
Varsayılan olarak ndk-build tüm paylaşılan kitaplıkları, yürütülebilir dosyaları ve bunların bağımlılarını oluşturur. Statik kitaplıklar yalnızca proje tarafından kullanılıyorsa, proje yalnızca statik kitaplıklar içeriyorsa veya APP_MODULES
olarak adlandırıldıysa oluşturulur.
UYGULAMA OPTİMİZASYONU
İsteğe bağlı bu değişkeni release
veya debug
olarak tanımlayın. Sürüm ikili programları varsayılan olarak oluşturulur.
Sürüm modu, optimizasyonları etkinleştirir ve hata ayıklayıcıyla kullanılamayan ikili programlar üretebilir. Hata ayıklama modu, hata ayıklayıcıların kullanılabilmesi için optimizasyonları devre dışı bırakır.
Sürümleri veya ikili programların hatalarını ayıklayabilirsiniz. Ancak ikili programları serbest bırakın. Hata ayıklama sırasında daha az bilgi sağlar. Örneğin, değişkenler optimize edilerek incelemenin engellenmesi için optimize edilebilir. Ayrıca kodların yeniden sıralanması, kodun uygulanmasını zorlaştırabilir. Yığın izleme güvenilir olmayabilir.
Uygulama manifestinizin <application>
etiketinde android:debuggable
belirtilmesi, bu değişkenin release
yerine varsayılan olarak debug
olmasına neden olur.
APP_OPTIM
öğesini release
olarak ayarlayarak bu varsayılan değeri geçersiz kılabilirsiniz.
UYGULAMA PLATFORMU
APP_PLATFORM
, bu uygulamanın oluşturulduğu Android API düzeyini tanımlar ve uygulamanın minSdkVersion
özelliğine karşılık gelir.
Belirtilmezse ndk-build, NDK tarafından desteklenen minimum API düzeyini hedefler. En son NDK tarafından desteklenen minimum API düzeyi her zaman neredeyse tüm etkin cihazları destekleyecek kadar düşüktür.
Örneğin, android-16
değeri, kitaplığınızın Android 4.1'den (API düzeyi 16) düşük olan ve daha düşük platform sürümü çalıştıran cihazlarda kullanılamayan API'leri kullandığını belirtir. Platform adlarının ve karşılık gelen Android sistem görüntülerinin tam listesini Android NDK yerel API'leri sayfasında bulabilirsiniz.
Gradle ve externalNativeBuild
kullanılırken bu parametre doğrudan ayarlanmamalıdır. Bunun yerine, minSdkVersion
özelliğini modül düzeyinde build.gradle
dosyanızın defaultConfig
veya productFlavors
bloğunda ayarlayın. Bu işlem, kitaplığınızın yalnızca Android'in yeterli sayıda sürümünün yüklü olduğu cihazlarda yüklü uygulamalar tarafından kullanılmasını sağlar.
NDK'nin Android'in her API düzeyi için kitaplık içermediğini unutmayın. Yeni yerel API'ler içermeyen sürümler, NDK'da yer açmak için azalan düzende ndk-build kullanımları atlanır:
APP_PLATFORM
ile eşleşen platform sürümü.APP_PLATFORM
altındaki bir sonraki API düzeyi. Örneğin, android-20'de yeni yerel API'ler olmadığındanAPP_PLATFORM
,android-20
olduğundaandroid-19
kullanılır.- NDK tarafından desteklenen minimum API düzeyi.
APP_PROJECT_PATH
Projenin kök dizininin mutlak yolu.
UYGULAMA_KISA KOMUTLARI
LOCAL_SHORT_COMMANDS
genelinde proje genelindeki eşdeğeri. Daha fazla bilgi için Android.mk'deki LOCAL_SHORT_COMMANDS
dokümanlarına bakın.
APP_STL
Bu uygulama için kullanılacak C++ standart kitaplığı.
Varsayılan olarak system
STL kullanılır. Diğer seçenekler c++_shared
,
c++_static
ve none
'dir. NDK C++ Çalışma Zamanları ve Özellikler bölümüne bakın.
APP_STRIP_MODE
Bu uygulamadaki modüller için strip
işlevine aktarılacak bağımsız değişken. Varsayılan olarak --strip-unneeded
değerine ayarlanır. Modüldeki tüm ikili programların çıkarılmaması için none
olarak ayarlayın. Diğer şerit modları için çizgi belgelere bakın.
UYGULAMA_THIN_ARCHIVE
Projedeki tüm statik kitaplıklar için ince arşivler kullanmak üzere doğru değerine ayarlayın. Daha fazla bilgi için Android.mk'deki LOCAL_THIN_ARCHIVE
dokümanlarına bakın.
UYGULAMA_WRAP_SH
Bu uygulamaya dahil edilecek wrap.sh dosyasının yolu.
Bu değişkenin bir varyantı, her ABI için ve ABI genel bir varyantı vardır:
APP_WRAP_SH
APP_WRAP_SH_armeabi-v7a
APP_WRAP_SH_arm64-v8a
APP_WRAP_SH_x86
APP_WRAP_SH_x86_64