Dependensi native dengan plugin Android Gradle

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.