Application.mk

Dokumen ini menjelaskan file build Application.mk yang digunakan oleh ndk-build.

Kami merekomendasikan agar 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 menghasilkan kode untuk semua ABI yang masih digunakan. Anda dapat menggunakan setelan APP_ABI untuk menghasilkan kode bagi ABI tertentu. Tabel 1 menunjukkan setelan APP_ABI untuk set instruksi yang berbeda.

Tabel 1. Setelan APP_ABI untuk set instruksi yang berbeda.

Set instruksi 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 dan detail tentang penggunaan dan batasannya, baca Pengelolaan ABI.

APP_ASFLAGS

Tanda yang akan diteruskan ke assembler untuk setiap file sumber assembly (.s dan .S) dalam project.

APP_ASMFLAGS

Tanda yang akan diteruskan ke YASM untuk semua file sumber YASM (.asm, x86/x86_64 saja).

APP_BUILD_SCRIPT

Secara default, ndk-build mengasumsikan bahwa file Android.mk berada 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

Tanda 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

Tanda yang akan diteruskan untuk semua kompilasi C dalam project. Tanda ini tidak akan digunakan untuk kode C++.

Lihat juga: APP_CFLAGS, APP_CPPFLAGS.

APP_CPPFLAGS

Tanda yang akan diteruskan untuk semua kompilasi C++ dalam project. Tanda 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 dibuat. 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, file 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 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, Anda dapat men-debug biner rilis maupun biner debug. Akan tetapi, biner rilis menyediakan lebih sedikit informasi selama proses debug. Misalnya, variabel dapat dioptimalkan tetapi akan mencegah inspeksi. Selain itu, penataan ulang kode dapat mempersulit perunutan kode; pelacakan tumpukan mungkin tidak dapat diandalkan.

Mendeklarasikan android:debuggable dalam tag <application> manifes aplikasi Anda akan menyebabkan variabel ini didefaultkan ke debug, bukan ke release. Ganti nilai default ini dengan menetapkan APP_OPTIM ke release.

APP_PLATFORM

APP_PLATFORM mendeklarasikan level API Android yang menjadi dasar pembuatan aplikasi ini dan berhubungan dengan minSdkVersion aplikasi.

Jika tidak ditetapkan, ndk-build akan menargetkan level API minimum yang didukung oleh NDK. Level API minimum yang didukung oleh NDK terbaru akan selalu cukup rendah untuk mendukung hampir semua perangkat aktif.

Misalnya, nilai android-16 menetapkan bahwa library Anda menggunakan API yang tidak tersedia di bawah Android 4.1 (API level 16) dan tidak dapat digunakan pada perangkat yang menjalankan versi platform lebih rendah. Untuk daftar lengkap nama platform dan image sistem Android yang terkait, lihat API Native Android NDK.

Saat menggunakan Gradle dan externalNativeBuild, parameter ini tidak boleh ditetapkan secara langsung. Sebagai gantinya, tetapkan properti minSdkVersion pada blok defaultConfig atau productFlavors dari file build.gradle level modul Anda. Hal ini memastikan bahwa library hanya digunakan oleh aplikasi yang diinstal di perangkat yang menjalankan versi Android memadai.

Perhatikan bahwa NDK tidak memuat library untuk setiap level API 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. Level API 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. Level API minimum yang didukung oleh NDK.

APP_PROJECT_PATH

Jalur absolut direktori utama project.

APP_SHORT_COMMANDS

Ekuivalensi lingkup project dari LOCAL_SHORT_COMMANDS. Untuk informasi selengkapnya, lihat dokumentasi untuk 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 NDK.

APP_STRIP_MODE

Argumen yang akan diteruskan ke strip untuk modul dalam aplikasi ini. Nilai defaultnya adalah --strip-unneeded. Untuk menghindari stripping semua biner dalam modul, tetapkan STL ke none. Untuk mode strip lainnya, lihat dokumentasi strip.

APP_THIN_ARCHIVE

Tetapkan ke true untuk menggunakan arsip tipis untuk semua library statis dalam project. Untuk 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, seperti halnya 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