Uygulama.mk

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_MODULEAndroid'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:

  1. APP_PLATFORM ile eşleşen platform sürümü.
  2. APP_PLATFORM altındaki bir sonraki API düzeyi. Örneğin, android-20'de yeni yerel API'ler olmadığından APP_PLATFORM, android-20 olduğunda android-19 kullanılır.
  3. 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