Application.mk

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

Kami menyarankan agar Anda membaca halaman Konsep dan Android.mk sebelum halaman ini. Hal itu akan membantu memaksimalkan pemahaman Anda mengenai materi pada halaman ini.

Ringkasan

File Application.mk benar-benar fragmen kecil GNU Makefile yang menentukan sejumlah variabel untuk kompilasi. Biasanya berada di $PROJECT/jni/, tempat $PROJECT mengarah ke direktori proyek aplikasi. Alternatif lain adalah menempatkannya di sub-direktori dari direktori $NDK/apps/ tingkat teratas. Misalnya:

$NDK/apps/<myapp>/Application.mk

Di sini, <myapp> adalah nama pendek yang digunakan untuk menjelaskan aplikasi Anda pada sistem pembangunan NDK. Kode ini tidak benar-benar masuk ke pustaka bersama yang dihasilkan atau paket akhir Anda.

Variabel

APP_PROJECT_PATH

Variabel ini menyimpan jalur absolut ke direktori akar proyek Anda. Sistem pembangunan menggunakan informasi ini untuk menempatkan versi yang telah dihilangkan dari pustaka bersama JNI yang dihasilkan ke dalam lokasi tertentu yang dikenal oleh alat pembuat APK.

Jika Anda menempatkan file Application.mk di $NDK/apps/<myapp>/, Anda harus menentukan variabel ini. Jika Anda menempatkannya di $PROJECT/jni/, ini bersifat opsional.

APP_MODULES

Jika variabel ini ditetapkan, variabel ini meminta ndk-build untuk membangun hanya modul dan yang tergantung padanya. Ini harus berupa daftar terpisah ruang dari nama modul karena nama tersebut muncul di definisi LOCAL_MODULE dari file Android.mk.

Jika variabel ini tidak ditentukan, ndk-build cari daftar dari semua modul teratas yang dapat diinstal, yaitu yang terdaftar oleh file Android.mk file apa pun yang termasuk di dalamnya secara langsung. Meski modul yang diimpor bukan tingkat teratas.

Modul yang dapat diinstal adalah pustaka bersama atau eksekutabel, yang akan menghasilkan file dalam libs/$ABI/.

Jika variabel tidak ditentukan, tidak ada modul tingkat teratas yang dapat diinstal, maka ndk-build membangun semua pustaka statis tingkat teratas dan dependensinya. Pustaka ini terletak di lokasi biasa di obj/ atau obj-debug/.

APP_OPTIM

Tentukan variabel opsional ini sebagai salah satu release atau debug. Anda menggunakannya untuk mengubah tingkat optimalisasi saat membangun modul aplikasi.

Defaultnya adalah mode rilis, dan menghasilkan biner yang sangat dioptimalkan. Mode debug menghasilkan biner yang tidak dioptimalkan yang jauh lebih mudah di-debug.

Perhatikan, Anda bisa men-debug biner rilis maupun biner debug. Akan tetapi, biner rilis menyediakan lebih sedikit informasi selama proses debug. Misalnya, sistem pembangunan akan mengoptimalkan banyak variabel, yang akan mencegah Anda memeriksanya. Selain itu, penataan ulang kode bisa mempersulit perunutan kode; pelacakan tumpukan mungkin tidak bisa diandalkan.

Mendeklarasikan android:debuggable dalam tag manifes aplikasi <application> akan menyebabkan variabel ini menyetetal default ke debug sebagai ganti release. Gantilah nilai default dengan menyetel APP_OPTIM ke release.

APP_CFLAGS

Variabel ini menyimpan satu set pengompilasi bendera C yang akan diteruskan oleh sistem pembangunan ke pengompilasi saat mengompilasi kode sumber C atau C++ untuk salah satu modul. Anda bisa menggunakan variabel ini untuk mengubah pembangunan modul yang ditentukan sesuai dengan aplikasi yang membutuhkannya, daripada harus memodifikasi file Android.mk itu sendiri. Gunakan APP_CPPFLAGS untuk menentukan bendera untuk C++ saja.

Semua jalur di bendera ini harus relatif dengan direktori NDK tingkat teratas. Misalnya, jika persiapan Anda seperti berikut ini:

sources/foo/Android.mk
sources/bar/Android.mk

Untuk menetapkan dalam foo/Android.mk yang ingin Anda tambahkan jalurnya ke sumber bar selama kompilasi, Anda harus menggunakan:

APP_CFLAGS += -Isources/bar

Atau, alternatifnya:

APP_CFLAGS += -I$(LOCAL_PATH)/../bar

-I../bar tidak akan bekerja karena sepadan dengan -I$NDK_ROOT/../bar.

APP_CPPFLAGS

Variabel ini berisi satu set pengompilasi bendera C++ yang akan diteruskan oleh sistem pembangunan ke pengompilasi saat membangun sumber C++ saja. Gunakan APP_CFLAGS untuk menentukan bendera untuk C dan C++.

APP_LDFLAGS

Satu set bendera penaut yang diteruskan sistem pembangunan saat menautkan aplikasi. Variabel ini hanya relvan bila sistem pembangunan sedang membangun pustaka bersama dan eksekutabel. Bila sistem pembangunan membangun pustaka statis, sistem ini akan mengabaikan flag ini.

APP_BUILD_SCRIPT

Secara default, sistem pembangunan NDK akan mencari di jni/ file bernama Android.mk.

Jika Anda ingin mengganti perilaku ini, Anda bisa menentukan APP_BUILD_SCRIPT untuk menunjuk ke skrip pembangunan alternatif. Sistem pembangunan selalu menafsirkan jalur non-absolut sebagai relatif ke direktori tingkat teratas NDK.

APP_ABI

Secara default, sistem pembangunan NDK menghasilkan kode mesin untuk semua ABI yang tidak usang. Anda bisa menggunakan setelan APP_ABI untuk menghasilkan kode meisn untuk ABI khusus. Tabel 1 menampilkan setelan APP_ABI untuk set petunjuk yang berbeda.

Tabel 1. Setelan APP_ABI untuk set petunjuk berbeda.

Set petunjuk Nilai
Petunjuk FPU perangkat keras di perangkat berbasis ARMv7 APP_ABI := armeabi-v7a
ARMv8 AArch64 APP_ABI := arm64-v8a
IA-32 APP_ABI := x86
Intel64 APP_ABI := x86_64
Semua set petunjuk yang didukung APP_ABI := all

Catatan: all tersedia dimulai dari NDKr7.

Anda juga bisa menetapkan multinilai dengan menempatkannya pada baris yang sama, dipisah dengan spasi. Misalnya:

APP_ABI := armeabi-v7a arm64-v8a x86

Catatan: Jika Anda menggunakan petunjuk externalNativeBuild Gradle untuk mengintegrasikan proyek ndk-build ke proyek Gradle, maka setelan APP_ABI di file Application.mk akan diabaikan. Anda bisa mengonfigurasi ABI untuk membangun skrip Gradle menggunakan blok abiFilters atau (jika Anda menggunakan "Beberapa APK"), abi blok di dalam splits blok.

Untuk daftar semua ABI yang didukung dan detail tentang penggunaan serta keterbatasannya, lihat Manajemen ABI.

APP_PLATFORM

Variabel ini berisi versi platform Android minimum yang ingin Anda dukung. Misalnya, nilai android-15 menentukan bahwa pustaka Anda menggunakan API yang tidak tersedia di bawah Android 4.0.3 (API level 15) dan tidak dapat digunakan di perangkat yang menjalankan versi platform lebih rendah. Untuk daftar lengkap nama platform dan citra sistem Android yang sesuai, lihat Android NDK Native API.

Daripada mengubah bendera ini langsung, Anda harus menyetel properti minSdkVersion di dalam defaultConfig atau productFlavors blok dari level modul build.gradle file. Hal ini memastikan pustaka hanya digunakan oleh aplikasi yang diinstal di perangkat yang menjalankan versi Android yang memadai. Rantai alat ndk-build menggunakan logikan berikut untuk memilih versi minimum platform untuk pustaka berbasis ABI yang Anda bangun dan minSdkVersion tentukan:

  1. Jika ada versi platform untuk ABI yang setara dengan minSdkVersion, ndk-build akan menggunakan versi itu.
  2. Jika tidak, jika terdapat versi platform lebih rendah daripada minSdkVersion untuk ABI, ndk-build menggunakan versi platform itu. Ada alasan masuk akal karena versi platform yang hilang biasanya berarti tidak ada perubahan pada API platform asli sejak versi yang tersedia sebelumnya.
  3. Jika tidak, ndk-build menggunakan versi platform yang tersedia berikutnya lebih tinggi daripada minSdkVersion.

APP_STL

Sistem pembangunan akan dikembalikan ke default STL `system`. Pilihan lainnya adalah `c++_shared`, `c++_static`, dan `none`. Lihat Waktu Proses dan Fitur NDK.

APP_SHORT_COMMANDS

Yang setara dengan LOCAL_SHORT_COMMANDS dalam Application.mk untuk seluruh proyek Anda. Untuk informasi selengkapnya, lihat dokumentasi untuk variabel ini di Android.mk.

APP_THIN_ARCHIVE

Menyetel nilai default LOCAL_THIN_ARCHIVE dalam file Android.mk untuk semua modul pustaka dalam proyek ini. Untuk informasi selengkapnya, lihat dokumentasi untuk LOCAL_THIN_ARCHIVE di Android.mk.