Android Gradle eklentisiyle yerel bağımlılıklar

AAR kitaplıkları, Android Gradle Eklentisi'nin yapabileceği yerel bağımlılıklar içerebilir. tüketim. AGP aynı zamanda yerel kitaplıkların açık olduğu AAR'ler de üretebilir. teşvik etmek anlamına gelir.

Yerel bağımlılıkları kullanma

Android Gradle eklentisi 4.0 ile başlayarak C/C++ bağımlılıkları şuradan içe aktarılabilir: AAR'ler build.gradle dosyanızda bağlandı. Gradle şunları otomatik olarak yapar: kullanılabilir ancak derleme sisteminizin yapılandırılması gerekir içe aktarılan kitaplık ve başlıkları kullanın. C/C++ bağımlılıkları dağıtıldığı için genel AAR'lerle ilgili aşağıdaki bağlantılar yararlı olabilir:

Bu belgede, yerel derleme sisteminizi nasıl yapılandıracağınıza odaklanılmakta ve daha önce projenizin Gradle derleme ortamına bir C/C++ bağımlılık AAR'si ekledi.

AAR'lerde yerel bağımlılıklar

Gradle modüllerinizin AAR bağımlılıkları, en iyi yoludur. AAR'daki prefab dizini bir Prefab (Prefab) içerir paketine (bu belge, yerel bağımlılığın başlıklarını ve kitaplıklarını) ekler.

Her bağımlılık en fazla bir Prefab paketi ortaya çıkarabilir. Bu paket, üzerinde çalışıyoruz. Prefabrik modülü tek bir kitaplıktır. paylaşılan, statik veya yalnızca başlık içeren kitaplıklar.

Kitaplıklardan yararlanabilmeniz için paket ve modül adlarının bilinmesi gerekir. Ölçüt kuralınız, paket adı Maven yapısı adıyla ve modülle eşleşir. ad, C/C++ kitaplığının adıyla eşleşecektir, ancak bu zorunlu değildir. Destek için: bağımlılık belgelerini inceleyin.

Derleme sistem yapılandırması

Android Gradle modülünüz için prefab özelliği etkinleştirilmiş olmalıdır.

Bunu yapmak için, aşağıdakileri modülünüzün android bloğuna ekleyin: build.gradle dosyası:

Kotlin

buildFeatures {
  prefab = true
}

Eski

buildFeatures {
  prefab true
}

İsteğe bağlı olarak bir sürüm yapılandırın projenizin gradle.properties dosyasında:

android.prefabVersion=2.0.0

Genellikle, seçilen varsayılan AGP sürümü ihtiyaçlarınıza uygundur. Yalnızca düzeltilmesi gereken bir hata varsa farklı bir sürüm seçmeniz gerekir. yeni bir özellik ekleyin.

Her bağımlılık, derlemenize bir Android.mk dosyası sunar. Bunlar: import-module komutuyla içe aktarılır. Bu komut Android.mk sorgusunu arar derlemenin içe aktarma dizinlerinde belirtilen yola sahip dosyalar (yapılandırıldığı şekliyle) tarafından import-add-path tarafından) ve tanımlanan modüllerin uygulamanızda seçeceğiz. Örneğin, uygulamanız libapp.so öğesini tanımlıyorsa ve cURL kullanıyorsa, Android.mk dosyanız şunları içermelidir:

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)

Açık import-add-path değerinin yalnızca önceki NDK'lar kullanılırken gerekli olduğunu unutmayın r21'e. 21. sürüm itibarıyla NDK_GRADLE_INJECTED_IMPORT_PATH otomatik olarak içe aktarma yollarına eklenir.

app.cpp artık #include "curl/curl.h" yapabilir. libapp.so olacak oluşturma sırasında libcurl.so ile otomatik olarak bağlanacak ve libcurl.so, ve uygulamaya dahil edilmelidir.

AAR'larda 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 aşağıdakileri android bloğuna ekleyin: kitaplık projenizin build.gradle.kts dosyası:

Kotlin

buildFeatures {
    prefabPublishing = true
}

prefab {
    create("mylibrary") {
      headers = "src/main/cpp/mylibrary/include"
    }

    create("myotherlibrary") {
        headers = "src/main/cpp/myotherlibrary/include"
    }
}

Eski

buildFeatures {
    prefabPublishing true
}

prefab {
    mylibrary {
      headers "src/main/cpp/mylibrary/include"
    }

    myotherlibrary {
        headers "src/main/cpp/myotherlibrary/include"
    }
}

Bu örnekte, mylibrarymyotherlibrary ndk-build veya CMake harici yerel derlemesi, içerir ve her biri belirtilen dizinden başlıkları yardımcı oluyorum.