Bagaimana Cara Mengonfigurasikan CMake pada Android Studio?
Skrip build CMake adalah file teks biasa yang harus diberi nama
CMakeLists.txt dan menyertakan perintah yang digunakan CMake untuk mem-build library C/C++ Anda. Jika sumber native Anda belum memiliki skrip build CMake, Anda perlu membuatnya sendiri dan menyertakan perintah CMake yang sesuai.
Bagian ini membahas tentang beberapa perintah dasar yang harus Anda sertakan dalam skrip build agar dapat memberi tahu CMake sumber mana yang digunakan saat membuat library native Anda. Untuk mempelajari lebih lanjut, baca dokumentasi resmi tentang perintah CMake.
Setelah mengonfigurasi skrip build CMake baru, Anda perlu mengonfigurasi Gradle untuk menyertakan project CMake sebagai dependensi build, sehingga Gradle dapat mem-build dan memaketkan library native Anda dengan APK aplikasi.
Catatan: Jika project menggunakan ndk-build, Anda tidak perlu membuat skrip build CMake. Anda cukup mengonfigurasi Gradle untuk menyertakan project library native yang ada dengan menyediakan lokasi file
Android.mk Anda.Membuat skrip build CMake
Untuk membuat file teks biasa yang dapat Anda gunakan sebagai skrip build CMake, lakukan langkah berikut:
- Buka panel Project dari sisi kiri IDE, lalu pilih tampilan Project dari menu drop-down.
- Klik kanan pada direktori utama modul Anda, lalu pilih New > File.Catatan: Anda dapat membuat skrip build di lokasi mana pun yang Anda inginkan. Namun, saat mengonfigurasi skrip build, lokasi file dan library sumber native bersifat relatif terhadap lokasi skrip build.
- Masukkan "CMakeLists.txt" sebagai nama file, lalu klik OK.
Kini Anda dapat mengonfigurasi skrip build dengan menambahkan perintah CMake. Untuk menginstruksikan CMake agar membuat library native dari kode sumber native, tambahkan perintah
cmake_minimum_required() dan add_library() ke skrip build:
Tips: Mirip dengan cara Anda memberi tahu CMake untuk membuat library native dari file sumber, Anda juga dapat menggunakan perintah
add_executable() guna memberi tahu CMake untuk membuat file sumber yang dapat dijalankan. Namun, mem-build file yang dapat dijalankan dari sumber native adalah opsional, dan mem-build library native untuk dipaketkan ke APK Anda akan memenuhi sebagian besar persyaratan project.
Jika Anda menambahkan file sumber atau library ke skrip build CMake menggunakan
add_library(), Android Studio juga akan menampilkan file header terkait dalam tampilan Project setelah Anda menyinkronkan project. Namun, agar CMake dapat menemukan file header Anda selama waktu kompilasi, Anda perlu menambahkan perintah include_directories() ke skrip build CMake dan menetapkan lokasi header:
Konvensi yang digunakan CMake untuk menamai file library adalah seperti berikut:
liblibrary-name.so
Misalnya, jika Anda menetapkan "native-lib" sebagai nama library bersama dalam skrip build, CMake akan membuat file bernama
libnative-lib.so. Namun, saat memuat library ini dalam kode Java atau Kotlin, gunakan nama yang Anda tetapkan dalam skrip build CMake:
Catatan: Jika Anda mengganti nama atau menghapus library dalam skrip build CMake, Anda harus membersihkan project sebelum Gradle menerapkan perubahan atau menghapus versi library lama dari APK Anda. Untuk membersihkan project, pilih Build > Clean Project dari panel menu.
Android Studio secara otomatis menambahkan file sumber dan header ke grup cpp dalam panel Project. Dengan beberapa perintah
add_library(), Anda dapat menentukan library tambahan agar CMake dapat melakukan build dari file sumber lainnya.Menambahkan NDK API
Android NDK menyediakan kumpulan library dan API native yang mungkin berguna. Anda dapat menggunakan semua API ini dengan library NDK dalam file skrip
CMakeLists.txt project.
Library NDK bawaan sudah ada di platform Android, jadi Anda tidak perlu mem-build atau memaketkannya ke APK. Karena library NDK sudah menjadi bagian dari lokasi penelusuran CMake, Anda bahkan tidak perlu menentukan lokasi library di penginstalan NDK lokal. Anda hanya perlu menyediakan CMake dengan nama library yang ingin digunakan dan menautkannya terhadap library native Anda sendiri.
Tambahkan perintah
find_library() ke skrip build CMake untuk menemukan library NDK dan menyimpan lokasinya sebagai variabel. Anda menggunakan variabel ini untuk merujuk ke library NDK di bagian lain skrip build. Contoh berikut menemukan support library log spesifik Android dan menyimpan lokasinya di log-lib:
Agar library native Anda dapat memanggil fungsi dalam library
log, Anda perlu menautkan library menggunakan perintah target_link_libraries() dalam skrip build CMake:
NDK juga menyertakan beberapa library sebagai kode sumber yang perlu di-build dan ditautkan ke library native. Anda dapat mengompilasi kode sumber ke library native menggunakan perintah
add_library() dalam skrip build CMake. Untuk menyediakan lokasi library NDK lokal, Anda dapat menggunakan variabel lokasi ANDROID_NDK, yang ditentukan Android Studio secara otomatis untuk Anda.
Perintah berikut memberi tahu CMake untuk mem-build
android_native_app_glue.c, yang mengelola peristiwa siklus proses NativeActivity dan input sentuh, ke library statis dan menautkannya ke native-lib:Menambahkan library bawaan lainnya
Langkah menambahkan library bawaan serupa dengan menetapkan library native lainnya untuk CMake yang di-build. Namun, karena library sudah di-build, Anda perlu menggunakan tanda
IMPORTED untuk memberi tahu CMake bahwa Anda hanya ingin mengimpor library ke project:
Selanjutnya Anda perlu menetapkan lokasi library menggunakan perintah
set_target_properties()seperti yang ditunjukkan di bawah ini.
Beberapa library menyediakan paket terpisah untuk arsitektur CPU spesifik, atau Application Binary Interfaces (ABI), dan mengaturnya ke beberapa direktori terpisah. Pendekatan ini membantu library memanfaatkan arsitektur CPU spesifik serta memungkinkan Anda hanya menggunakan versi library yang Anda inginkan. Untuk menambahkan beberapa versi ABI library ke skrip build CMake, tanpa perlu menulis banyak perintah untuk setiap versi library, Anda dapat menggunakan variabel lokasi
ANDROID_ABI. Variabel ini menggunakan daftar ABI default yang didukung NDK atau daftar ABI terfilter yang secara manual mengonfigurasi Gradle untuk digunakan. Contoh:
Agar CMake dapat menemukan file header selama waktu kompilasi, Anda perlu menggunakan perintah
include_directories() dan menyertakan lokasi file header:
Catatan: Jika Anda ingin memaketkan library bawaan yang bukan dependensi waktu-build, misalnya, saat menambahkan library bawaan yang merupakan dependensi
imported-lib, Anda tidak perlu melakukan petunjuk berikut ini untuk menautkan library.
Untuk menautkan library bawaan ke library native Anda sendiri, tambahkan ke perintah
target_link_libraries() dalam skrip build CMake:
Untuk memaketkan library bawaan ke APK, Anda perlu mengonfigurasi Gradle secara manual dengan blok
sourceSets untuk menyertakan lokasi file .so Anda. Setelah mem-build APK, Anda dapat memverifikasi library yang dipaketkan oleh Gradle ke APK menggunakan Penganalisis APK.Menyertakan project CMake lainnya
Jika Anda ingin mem-build beberapa project CMake dan memasukkan output ke project Android, Anda dapat menggunakan satu file
CMakeLists.txt sebagai skrip build CMake level atas (yang Anda tautkan ke Gradle) dan menambahkan poject CMake tambahan sebagai dependensi skrip build tersebut. Skrip build CMake level atas berikut menggunakan perintah add_subdirectory() untuk menentukan file CMakeLists.txt lain sebagai dependensi build, lalu menautkan ke outputnya seperti dengan library bawaan lainnya.
Komentar
Posting Komentar