Android Gradle 플러그인의 네이티브 종속 항목

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 기본 버전이 필요에 적합합니다. 해결해야 하는 버그가 있거나 원하는 새 기능이 있는 경우에만 다른 버전을 선택해야 합니다.

AAR에서 가져온 종속 항목은 CMAKE_FIND_ROOT_PATH를 통해 CMake에 노출됩니다. 이 값은 CMake 호출 시 Gradle에 의해 자동으로 설정되므로, 빌드가 이 변수를 수정하는 경우 변수에 할당하지 말고 추가해야 합니다.

각 종속 항목은 config-file 패키지를 빌드에 노출합니다. 이 패키지는 find_package 명령어를 사용하여 가져옵니다. 이 명령어는 지정된 패키지 이름 및 버전과 일치하는 config-file 패키지를 검색하여 정의하는 타겟을 빌드에서 사용되도록 노출합니다. 예를 들어 애플리케이션에서 libapp.so를 정의하고 cURL을 사용한다면 CMakeLists.txt에는 다음이 포함되어야 합니다.

add_library(app SHARED app.cpp)

# Add these two lines.
find_package(curl REQUIRED CONFIG)
target_link_libraries(app curl::curl)

이제 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 외부 네이티브 빌드의 mylibrarymyotherlibrary 라이브러리는 빌드에서 생성된 AAR에 패키징되며 각각은 지정된 디렉터리의 헤더를 종속 디렉터리로 내보냅니다.