Library AAR dapat berisi dependensi native yang dapat digunakan Plugin Android Gradle. AGP juga mampu menghasilkan AAR yang mengekspos library native kepada konsumennya.
Menggunakan dependensi native
Mulai dari plugin Android Gradle 4.0, dependensi C/C++ dapat diimpor dari
AAR yang ditautkan dalam file build.gradle Anda. Gradle akan otomatis menyediakannya
untuk sistem build native, tetapi sistem build Anda harus dikonfigurasi
untuk menggunakan library dan header yang diimpor. Karena dependensi C/C++ didistribusikan sebagai
AAR, link terkait AAR umum berikut mungkin berguna:
- Membuat Library Android untuk dokumentasi AAR umum dan cara mengintegrasikannya ke dalam project, terutama saat Anda ingin menggunakan AAR sebagai dependensi C/C++ lokal.
- Menambahkan dependensi build untuk informasi tentang cara menambahkan dependensi ke file
build.gradle, terutama untuk dependensi jarak jauh.
Dokumen ini berfokus pada cara mengonfigurasi sistem build native dan berasumsi bahwa Anda telah menambahkan AAR dependensi C/C++ ke lingkungan build Gradle project.
Dependensi native di AAR
Dependensi AAR dari modul Gradle dapat menampilkan library native untuk digunakan oleh
aplikasi Anda. Di dalam AAR, direktori prefab berisi paket Prefab,
yang mencakup header dan library dependensi native.
Setiap dependensi dapat menampilkan maksimal satu paket Prefab, yang terdiri dari satu atau beberapa modul. Modul Prefab adalah library tunggal, yang dapat berupa library bersama, statis, atau hanya header.
Nama paket dan modul perlu diketahui untuk menggunakan library. Berdasarkan konvensi, nama paket akan cocok dengan nama artefak Maven dan nama modul akan cocok dengan nama library C/C++, namun hal ini tidak diperlukan. Lihat dokumentasi dependensi untuk menentukan nama yang digunakan.
Konfigurasi sistem build
Fitur prefab harus diaktifkan untuk modul Android Gradle.
Untuk melakukannya, tambahkan kode berikut ke blok android file
build.gradle modul:
Kotlin
buildFeatures { prefab = true }
Groovy
buildFeatures { prefab true }
Cara lain ialah dengan mengonfigurasikan versi
dalam file gradle.properties project Anda:
android.prefabVersion=2.0.0
Biasanya, versi default AGP yang dipilih akan sesuai dengan kebutuhan Anda. Anda hanya perlu memilih versi lain jika ada bug yang perlu diperbaiki atau fitur baru yang Anda inginkan.
Setiap dependensi menampilkan file Android.mk untuk build Anda. Keduanya
diimpor dengan perintah import-module. Perintah ini menelusuri file Android.mk
dengan jalur yang ditentukan dalam direktori impor build (seperti yang dikonfigurasi
oleh import-add-path) dan menampilkan modul yang ditetapkan untuk digunakan dalam
build Anda. Misalnya, jika aplikasi Anda menentukan libapp.so dan menggunakan cURL,
file Android.mk Anda harus menyertakan hal berikut:
include $(CLEAR_VARS)
LOCAL_MODULE := libapp
LOCAL_SRC_FILES := app.cpp
LOCAL_SHARED_LIBRARIES := curl
include $(BUILD_SHARED_LIBRARY)
# If you don't need your project to build with NDKs older than r21, you can omit
# this block.
ifneq ($(call ndk-major-at-least,21),true)
$(call import-add-path,$(NDK_GRADLE_INJECTED_IMPORT_PATH))
endif
$(call import-module,prefab/curl)
Perlu diperhatikan bahwa import-add-path eksplisit hanya diperlukan saat menggunakan
NDK sebelum r21. Mulai r21, NDK_GRADLE_INJECTED_IMPORT_PATH akan otomatis ditambahkan ke jalur impor.
Sekarang app.cpp dapat #include "curl/curl.h", libapp.so akan otomatis
ditautkan ke libcurl.so saat melakukan build, dan libcurl.so akan
disertakan dengan aplikasi.
Memublikasikan library native di AAR
Kemampuan untuk membuat AAR native pertama kali ditambahkan di AGP 4.1.
Untuk mengekspor library native, tambahkan hal berikut ke blok android dari
file build.gradle.kts project library Anda:
Kotlin
buildFeatures { prefabPublishing = true } prefab { create("mylibrary") { headers = "src/main/cpp/mylibrary/include" } create("myotherlibrary") { headers = "src/main/cpp/myotherlibrary/include" } }
Groovy
buildFeatures { prefabPublishing true } prefab { mylibrary { headers "src/main/cpp/mylibrary/include" } myotherlibrary { headers "src/main/cpp/myotherlibrary/include" } }
Dalam contoh ini, library mylibrary dan myotherlibrary dari
ndk-build atau build native eksternal CMake akan dipaketkan dalam AAR yang dihasilkan oleh
build Anda, dan masing-masing akan mengekspor header dari direktori yang ditentukan ke
turunannya.