AAR kitaplıkları, Android Gradle Eklentisi'nin tüketebileceği yerel bağımlılıklar içerebilir. AGP, yerel kitaplıkları tüketicilere gösteren AAR'ler de oluşturabilir.
Yerel bağımlılıkları kullanma
Android Gradle eklentisi 4.0 ile başlayarak, C/C++ bağımlılıkları build.gradle
dosyanıza bağlı AAR'lerden içe aktarılabilir. Gradle, bunları otomatik olarak yerel derleme sisteminde kullanılabilir hale getirir ancak derleme sisteminiz, içe aktarılan kitaplıkları ve üst bilgileri kullanacak şekilde yapılandırılmalıdır. C/C++ bağımlılıkları AAR'ler olarak dağıtıldığından genel AAR'lerle ilgili aşağıdaki bağlantılar yararlı olabilir:
- Özellikle AAR'yi yerel bir C/C++ bağımlılığı olarak kullanmak istediğinizde, genel AAR belgeleri için Android Kitaplığı oluşturma ve bu kitaplığı projenize entegre etme.
- Özellikle uzaktan bağımlılıklar için
build.gradle
dosyanıza bağımlılık ekleme hakkında bilgi edinmek için derleme bağımlılıkları ekleyin.
Bu belge yerel derleme sisteminizi nasıl yapılandıracağınıza odaklanmaktadır ve projenizin Gradle derleme ortamına zaten bir C/C++ bağımlılık AAR'si eklediğiniz varsayılır.
AAR'lerde yerel bağımlılıklar
Gradle modüllerinizin AAR bağımlılıkları, uygulamanızın kullanması için yerel kitaplıkları açığa çıkarabilir. AAR'nin içindeki prefab
dizini, yerel bağımlılığın başlıklarını ve kitaplıklarını içeren bir Prefab paketi içerir.
Her bağımlılık, bir veya daha fazla modül içeren en fazla bir Prefab paketi sunabilir. Prefab modülü paylaşılan, statik veya yalnızca başlık kitaplığı olabilen tek bir kitaplıktır.
Kitaplıklardan yararlanabilmek için paket ve modül adlarının bilinmesi gerekir. Kural olarak, paket adı Maven yapı adıyla, modül adı da C/C++ kitaplık adıyla eşleşir ancak bu zorunlu değildir. Kullandığı adları öğrenmek için bağımlılığın belgelerine bakın.
Derleme sistemi yapılandırması
prefab
özelliği, Android Gradle modülünüz için etkinleştirilmiş olmalıdır.
Bunu yapmak için modülünüzün build.gradle
dosyasındaki android
bloğuna aşağıdaki kodu ekleyin:
Kotlin
buildFeatures { prefab = true }
Modern
buildFeatures { prefab true }
İsteğe bağlı olarak projenizin gradle.properties
dosyasında bir sürümü yapılandırın:
android.prefabVersion=2.0.0
Genellikle, seçilen AGP varsayılan sürümü ihtiyaçlarınıza uygundur. Düzeltmeniz gereken bir hata veya istediğiniz yeni bir özellik varsa farklı bir sürüm seçmeniz gerekir.
Bir AAR'den içe aktarılan bağımlılıklar CMAKE_FIND_ROOT_PATH üzerinden CMake'e uygulanır. Bu değer, CMake çağrıldığında Gradle tarafından otomatik olarak ayarlanır. Bu nedenle, derlemeniz bu değişkeni değiştiriyorsa atamak yerine değişkeni eklediğinizden emin olun.
Her bağımlılık, derlemenize bir yapılandırma dosyası paketi sunar. Bunlar find_package komutuyla içe aktarılır. Bu komut, belirtilen paket adı ve sürümüyle eşleşen yapılandırma dosyası paketlerini arar ve tanımladığı hedefleri derlemenizde kullanılmak üzere gösterir. Örneğin, uygulamanız libapp.so
öğesini tanımlıyorsa ve cURL kullanıyorsa CMakeLists.txt
aşağıdakileri içermelidir:
add_library(app SHARED app.cpp)
# Add these two lines.
find_package(curl REQUIRED CONFIG)
target_link_libraries(app curl::curl)
app.cpp
artık #include "curl/curl.h"
yapabiliyor. libapp.so
, derleme sırasında libcurl.so
ile otomatik olarak bağlanacak ve libcurl.so
uygulamaya dahil edilecek.
AAR'lerde yerel kitaplıklar yayınlama
Yerel AAR'ler oluşturma özelliği ilk olarak AGP 4.1'de eklenmiştir.
Yerel kitaplıklarınızı dışa aktarmak için kitaplık projenizin build.gradle.kts
dosyasındaki android
bloğuna şunu ekleyin:
Kotlin
buildFeatures { prefabPublishing = true } prefab { create("mylibrary") { headers = "src/main/cpp/mylibrary/include" } create("myotherlibrary") { headers = "src/main/cpp/myotherlibrary/include" } }
Modern
buildFeatures { prefabPublishing true } prefab { mylibrary { headers "src/main/cpp/mylibrary/include" } myotherlibrary { headers "src/main/cpp/myotherlibrary/include" } }
Bu örnekte, ndk-build veya CMake harici yerel derlemenizdeki mylibrary
ve myotherlibrary
kitaplıkları, derlemeniz tarafından oluşturulan AAR'de paketlenir ve her biri, başlıkları belirtilen dizinden bağlı dosyalarına dışa aktarır.