Application.mk

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:

  1. Versi platform yang cocok dengan APP_PLATFORM.
  2. API level yang tersedia berikutnya di bawah APP_PLATFORM. Misalnya, android-19 akan digunakan jika APP_PLATFORM adalah android-20, karena tidak ada API native baru di Android-20.
  3. 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