Dokumen ini menjelaskan file build Application.mk
yang digunakan oleh ndk-build
.
Sebaiknya Anda membaca halaman Konsep terlebih dahulu.
Ringkasan
Application.mk
menetapkan setelan lingkup project untuk ndk-build. Secara default, setelan ini terletak di jni/Application.mk
, dalam direktori project aplikasi Anda.
Variabel
APP_ABI
Secara default, sistem build NDK membuat kode untuk semua ABI yang masih digunakan. Anda dapat menggunakan setelan APP_ABI
untuk membuat kode bagi ABI tertentu. Tabel 1 menunjukkan setelan APP_ABI
untuk berbagai kumpulan petunjuk.
Tabel 1. Setelan APP_ABI
untuk berbagai kumpulan petunjuk.
Kumpulan petunjuk | Nilai |
---|---|
ARMv7 32-bit | APP_ABI := armeabi-v7a |
ARMv8 64-bit (AArch64) | APP_ABI := arm64-v8a |
x86 | APP_ABI := x86 |
x86-64 | APP_ABI := x86_64 |
Semua ABI yang didukung (default) | APP_ABI := all |
Anda juga dapat menentukan beberapa nilai dengan menempatkannya pada baris yang sama, dipisah spasi. Contoh:
APP_ABI := armeabi-v7a arm64-v8a x86
Untuk daftar semua ABI yang didukung serta detail tentang penggunaan dan batasannya, lihat ABI Android.
APP_ASFLAGS
Flag yang akan diteruskan ke assembler untuk setiap file sumber assembly (file .s
dan
.S
) dalam project.
APP_ASMFLAGS
Flag yang akan diteruskan ke YASM untuk semua file sumber YASM (.asm
, x86/x86_64 saja).
APP_BUILD_SCRIPT
Secara default, ndk-build berasumsi bahwa file Android.mk terletak di
jni/Android.mk
yang terkait dengan root project.
Untuk memuat file Android.mk dari lokasi lain, tetapkan APP_BUILD_SCRIPT
ke jalur absolut file Android.mk tersebut.
APP_CFLAGS
Flag yang akan diteruskan untuk semua kompilasi C/C++ dalam project.
Lihat juga: APP_CONLYFLAGS, APP_CPPFLAGS.
APP_CLANG_TIDY
Tetapkan ke true untuk mengaktifkan clang-tidy untuk semua modul dalam project. Dinonaktifkan secara default.
APP_CLANG_TIDY_FLAGS
Tanda yang akan diteruskan untuk semua eksekusi clang-tidy dalam project.
APP_CONLYFLAGS
Flag yang akan diteruskan untuk semua kompilasi C dalam project. Flag ini tidak akan digunakan untuk kode C++.
Lihat juga: APP_CFLAGS, APP_CPPFLAGS.
APP_CPPFLAGS
Flag yang akan diteruskan untuk semua kompilasi C++ dalam project. Flag ini tidak akan digunakan untuk kode C.
Lihat juga: APP_CFLAGS, APP_CONLYFLAGS.
APP_CXXFLAGS
Identik dengan APP_CPPFLAGS
, tetapi akan muncul setelah APP_CPPFLAGS
dalam perintah kompilasi. Contoh:
APP_CPPFLAGS := -DFOO
APP_CXXFLAGS := -DBAR
Konfigurasi di atas akan menghasilkan perintah kompilasi yang mirip dengan clang++
-DFOO -DBAR
, bukan clang++ -DBAR -DFOO
.
APP_DEBUG
Tetapkan ke true untuk membuat aplikasi yang dapat di-debug.
APP_LDFLAGS
Tanda yang akan diteruskan saat menautkan file executable dengan library bersama.
APP_MANIFEST
Jalur absolut ke file AndroidManifest.xml.
Secara default, $(APP_PROJECT_PATH)/AndroidManifest.xml)
akan digunakan jika ada.
APP_MODULES
Daftar eksplisit modul yang akan di-build. Elemen dalam daftar ini adalah nama-nama modul seperti yang terlihat di LOCAL_MODULE
dalam file Android.mk.
Secara default, ndk-build akan membuat semua library bersama, executable, dan dependensinya. Library statis akan dibuat hanya jika library tersebut digunakan oleh project, project hanya berisi library statis, atau jika project dinamai dalam APP_MODULES
.
APP_OPTIM
Tentukan variabel opsional ini baik sebagai release
atau debug
. Biner rilis akan dibuat secara default.
Mode rilis mengaktifkan pengoptimalan dan dapat menghasilkan biner yang tidak dapat digunakan dengan debugger. Mode debug menonaktifkan pengoptimalan sehingga debugger dapat digunakan.
Perhatikan bahwa Anda dapat men-debug biner rilis maupun biner debug. Namun, biner rilis menyediakan lebih sedikit informasi selama proses debug. Misalnya, variabel dapat dioptimalkan, tetapi akan mencegah inspeksi. Selain itu, pengurutan ulang kode dapat mempersulit penelusuran kode; pelacakan tumpukan mungkin tidak dapat diandalkan.
Mendeklarasikan android:debuggable
dalam tag <application>
manifes aplikasi Anda akan menyebabkan variabel ini ditetapkan secara default ke debug
, bukan release
.
Ganti nilai default ini dengan menetapkan APP_OPTIM
ke release
.
APP_PLATFORM
APP_PLATFORM
mendeklarasikan API level Android yang menjadi dasar pembuatan aplikasi ini dan berhubungan dengan minSdkVersion
aplikasi.
Jika tidak ditetapkan, ndk-build akan menargetkan API level minimum yang didukung oleh NDK. API level minimum yang didukung oleh NDK terbaru akan selalu serendah mungkin untuk mendukung hampir semua perangkat aktif.
Misalnya, nilai android-16
menentukan bahwa library Anda menggunakan API yang
tidak tersedia untuk versi di bawah Android 4.1 (API level 16), dan tidak dapat digunakan di perangkat
yang menjalankan versi platform yang lebih rendah. Untuk melihat daftar lengkap nama platform dan
image sistem Android terkait, lihat API native Android
NDK.
Saat menggunakan Gradle dan externalNativeBuild
, parameter ini tidak boleh ditetapkan
secara langsung. Sebagai gantinya, tetapkan properti minSdkVersion
di blok defaultConfig
atau productFlavors
pada file build.gradle
level modul Anda. Hal ini memastikan bahwa library hanya digunakan oleh aplikasi yang diinstal di perangkat yang menjalankan versi Android yang memadai.
Perhatikan bahwa NDK tidak memuat library untuk setiap API level Android. Versi yang tidak mencakup API native baru dihilangkan untuk menghemat ruang di NDK. Dalam urutan preferensi menurun, ndk-build menggunakan:
- Versi platform yang cocok dengan
APP_PLATFORM
. - API level yang tersedia berikutnya di bawah
APP_PLATFORM
. Misalnya,android-19
akan digunakan jikaAPP_PLATFORM
adalahandroid-20
, karena tidak ada API native baru di Android-20. - API level minimum yang didukung oleh NDK.
APP_PROJECT_PATH
Jalur absolut direktori utama project.
APP_SHORT_COMMANDS
Padanan lingkup project dari LOCAL_SHORT_COMMANDS
. Untuk informasi selengkapnya, lihat
dokumentasi LOCAL_SHORT_COMMANDS
di Android.mk.
APP_STL
Library standar C++ yang akan digunakan untuk aplikasi ini.
STL system
digunakan secara default. Pilihan lainnya adalah c++_shared
,
c++_static
, dan none
. Lihat Runtime dan Fitur
C++ NDK.
APP_STRIP_MODE
Argumen yang akan diteruskan ke strip
untuk modul dalam aplikasi ini. Default-nya adalah --strip-unneeded
Untuk menghindari stripping semua biner dalam modul, tetapkan ke none
. Untuk mode strip lainnya, lihat dokumentasi strip.
APP_THIN_ARCHIVE
Tetapkan ke true untuk menggunakan arsip tipis bagi semua library statis dalam project. Untuk mengetahui informasi selengkapnya, lihat dokumentasi LOCAL_THIN_ARCHIVE
di Android.mk.
APP_WRAP_SH
Jalur ke file wrap.sh yang akan disertakan dengan aplikasi ini.
Varian dari variabel ini tersedia untuk setiap ABI, begitu juga varian umum ABI:
APP_WRAP_SH
APP_WRAP_SH_armeabi-v7a
APP_WRAP_SH_arm64-v8a
APP_WRAP_SH_x86
APP_WRAP_SH_x86_64