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.
Dependensi yang diimpor dari AAR ditampilkan ke CMake melalui CMAKE_FIND_ROOT_PATH. Nilai ini akan disetel otomatis oleh Gradle saat CMake dipanggil, jadi jika build Anda memodifikasi variabel ini, pastikan untuk menambahkan, bukan menetapkannya.
Setiap dependensi menampilkan paket file konfigurasi ke build Anda. Keduanya
diimpor dengan perintah find_package. Perintah ini menelusuri beberapa paket file konfigurasi
yang cocok dengan nama dan versi paket tertentu serta menampilkan target
yang ditetapkannya untuk digunakan dalam build Anda. Misalnya, jika aplikasi Anda menentukan
libapp.so
dan menggunakan cURL, CMakeLists.txt
harus menyertakan hal berikut:
add_library(app SHARED app.cpp)
# Add these two lines.
find_package(curl REQUIRED CONFIG)
target_link_libraries(app curl::curl)
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.