AAR 라이브러리에는 Android Gradle 플러그인이 사용할 수 있는 네이티브 종속 항목이 포함될 수 있습니다. AGP는 네이티브 라이브러리를 소비자에게 노출하는 AAR을 생성할 수도 있습니다.
네이티브 종속 항목 사용
Android Gradle 플러그인 4.0부터는 C/C++ 종속 항목을 build.gradle 파일에 연결된 AAR에서 가져올 수 있습니다. Gradle은 이 기능을 네이티브 빌드 시스템에 자동으로 제공하지만 가져온 라이브러리와 헤더를 사용하도록 빌드 시스템을 구성해야 합니다. C/C++ 종속 항목은 AAR로 배포되므로 일반 AAR에 관한 다음 링크가 도움이 될 수 있습니다.
- 일반 AAR을 위한 Android 라이브러리 만들기 문서 및 프로젝트에 라이브러리를 통합하는 방법(로컬 C/C++ 종속 항목으로 AAR을 사용하려는 경우)
build.gradle파일에 종속 항목을 추가하는 방법에 관한 빌드 종속 항목 추가(특히 원격 종속 항목인 경우)
이 문서에서는 네이티브 빌드 시스템을 구성하는 방법에 중점을 두며, 프로젝트의 Gradle 빌드 환경에 C/C++ 종속 항목 AAR을 이미 추가했다고 가정합니다.
AAR의 네이티브 종속 항목
Gradle 모듈의 AAR 종속 항목은 애플리케이션에서 사용할 네이티브 라이브러리를 노출할 수 있습니다. AAR 내의 prefab 디렉터리는 Prefab 패키지를 포함하며 이 패키지에는 네이티브 종속 항목의 헤더와 라이브러리가 포함됩니다.
각 종속 항목은 하나 이상의 모듈로 구성된 Prefab 패키지를 최대 한 개까지 노출할 수 있습니다. Prefab 모듈은 단일 라이브러리로서 공유, 정적 또는 헤더 전용 라이브러리일 수 있습니다.
라이브러리를 사용하려면 패키지 및 모듈 이름을 알아야 합니다. 규칙에 따라 패키지 이름은 Maven 아티팩트 이름과 일치하고 모듈 이름은 C/C++ 라이브러리 이름과 일치하지만 반드시 그래야 하는 것은 아닙니다. 종속 항목의 문서를 참고하여 사용하는 이름이 무엇인지 확인합니다.
빌드 시스템 구성
Android Gradle 모듈에 prefab 기능이 사용 설정되어 있어야 합니다.
이렇게 하려면 모듈의 build.gradle 파일에 있는 android 블록에 다음을 추가합니다.
Kotlin
buildFeatures { prefab = true }
Groovy
buildFeatures { prefab true }
필요한 경우 프로젝트의 gradle.properties 파일에서 버전을 구성합니다.
android.prefabVersion=2.0.0
일반적으로 선택한 AGP 기본 버전이 필요에 적합합니다. 해결해야 하는 버그가 있거나 원하는 새 기능이 있는 경우에만 다른 버전을 선택해야 합니다.
각 종속 항목은 빌드에 Android.mk 파일을 노출합니다. 파일은 import-module 명령어를 사용하여 가져옵니다. 이 명령어는 빌드의 가져오기 디렉터리(import-add-path로 구성됨) 내에서 지정된 경로를 사용하여 Android.mk 파일을 검색하고 정의하는 모듈을 빌드에서 사용되도록 노출합니다. 예를 들어 애플리케이션에서 libapp.so를 정의하고 cURL을 사용한다면 Android.mk 파일에는 다음이 포함되어야 합니다.
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)
명시적인 import-add-path는 r21 이전의 NDK를 사용할 때만 필요합니다. r21부터 NDK_GRADLE_INJECTED_IMPORT_PATH가 가져오기 경로에 자동으로 추가됩니다.
이제 app.cpp가 #include "curl/curl.h"할 수 있으며 libapp.so는 빌드할 때 자동으로 libcurl.so에 연결되고 libcurl.so는 앱에 포함됩니다.
AAR로 네이티브 라이브러리 게시
네이티브 AAR을 만드는 기능은 AGP 4.1에서 처음 추가되었습니다.
네이티브 라이브러리를 내보내려면 라이브러리 프로젝트 build.gradle.kts 파일의 android 블록에 다음을 추가하세요.
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" } }
이 예에서 ndk-build 또는 CMake 외부 네이티브 빌드의 mylibrary 및 myotherlibrary 라이브러리는 빌드에서 생성된 AAR에 패키징되며 각각은 지정된 디렉터리의 헤더를 종속 디렉터리로 내보냅니다.