ネイティブ依存関係を使用する

Android Gradle Plugin 4.0 以降、build.gradle ファイルでリンクされている AAR から C / C++ の依存関係をインポートできます。Gradle 内で自動的にネイティブ ビルドシステムがこれらを利用できるようになりますが、インポートされたライブラリとヘッダーを使用するようにビルドシステムを構成する必要があります。C / C++ の依存関係は AAR として配信されるため、一般的な AAR に関する以下のリンクが参考になります。

  • AAR 全般に関するドキュメントやプロジェクトへの統合方法については(AAR をローカルの C / C++ 依存関係として使用する場合は特に)、Android ライブラリの作成をご覧ください。
  • build.gradle ファイルに依存関係を追加する方法については(リモートの依存関係の場合は特に)ビルド依存関係の追加をご覧ください。

このドキュメントでは、ネイティブ ビルドシステムの構成方法を中心にして説明します。C / C++ 依存関係の AAR をプロジェクトの Gradle ビルド環境にすでに追加していることを前提とします。

AAR のネイティブ依存関係

Gradle モジュールの AAR 依存関係によって、アプリケーションで使用するネイティブ ライブラリを公開できます。AAR 内の prefab ディレクトリには、ネイティブ依存関係のヘッダーとライブラリを含む Prefab パッケージが含まれます。

Prefab パッケージは 1 つ以上のモジュールで構成され、各依存関係は最大 1 つのパッケージを公開できます。Prefab モジュールは単一のライブラリで、共有ライブラリ、静的ライブラリ、ヘッダーのみのライブラリのいずれかになります。

ライブラリを使用するには、パッケージ名とモジュール名を公開する必要があります。通常、パッケージ名は Maven アーティファクト名と同じで、モジュール名はライブラリ名と同じにしますが、これは必須ではありません。依存関係のドキュメントを参照して、使用する名前を決定します。

ビルドシステムの構成

Android Gradle モジュールで prefab 機能を有効にする必要があります。

それには、モジュールの build.gradle ファイルの android ブロックに次のコードを追加します。

buildFeatures {
  prefab true
}

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 にリンクされ、APK に libcurl.so が含まれます。