モジュールが多いプロジェクトでは、明確なプロジェクト構造を維持しながら Android ライブラリをユーザーに配布するのが難しい場合があります。多くの場合、意図したよりも多くのライブラリを公開する必要があります。
Android Gradle プラグインにバンドルされている Fused Library プラグインは、複数の Android ライブラリ モジュールを 1 つの公開可能な Android ライブラリにパッケージ化できます。これにより、ビルド内でライブラリのソースコードとリソースを必要に応じてモジュール化できます。また、配布後にプロジェクトの構造が公開されることを回避できます。
単一のライブラリとして配布すると、次のメリットがあります。
- 依存関係の簡素化: 複数のライブラリ依存関係を 1 つの AAR に置き換え、ユーザーのプロジェクト設定とバージョン管理を効率化
- ライブラリのサイズを削減: コード圧縮が改善され、AAR が小さくなる可能性があります。
- セキュリティの強化: 公開されたライブラリの内部実装の詳細をより細かく制御できます。
統合ライブラリを作成する
統合ライブラリをビルドするには、新しい Android モジュールを作成し、依存関係を追加してから、統合ライブラリを公開する必要があります。
新しい統合ライブラリ モジュールを追加する
プラグインを使用するには、プロジェクトに新しい Android モジュールを追加する必要があります。
この例では、統合ライブラリ モジュールは myFusedLibrary
と呼ばれます。
android.experimental.fusedLibrarySupport=true
をgradle.properties
ファイルに追加して、統合ライブラリのサポートを有効にします。settings.gradle.kts
ファイルにinclude(":myFusedLibrary")
を追加します。gradle/libs.versions.toml
ファイルの[plugins]
セクションの下にandroid-fusedlibrary = { id = "com.android.fused-library", version.ref = "agp" }
を追加します。- 最上位の
build.gradle.kts
ファイルの plugins ブロックにalias(libs.plugins.android.fusedlibrary) apply false
を追加します。 myFusedLibrary
モジュールを作成するには、myFusedLibrary
という名前の新しいディレクトリを作成します([My Application] を右クリック > [New] > [Directory])。myFusedLibrary
モジュールにbuild.gradle.kts
ファイルを作成します(myFusedLibrary
モジュールを右クリック > [新規] > [ファイル])。- 以下を
myFusedLibrary/build.gradle.kts
ファイルに貼り付けます。
Kotlin
plugins { alias(libs.plugins.android.fusedlibrary) `maven-publish` } androidFusedLibrary { namespace = "com.example.myFusedLibrary" minSdk = 21 } dependencies { }
Groovy
plugins { id 'fused-library' } androidFusedLibrary { namespace 'com.example.myFusedLibrary' minSdk 21 } dependencies { }
依存関係を追加する
統合ライブラリのコア機能は、依存関係をバンドルすることです。このプラグインは、ローカル プロジェクトの依存関係と外部ライブラリの追加をサポートしています。パッケージ化する依存関係を指定するには、include
構成を使用します。推移的依存関係はパッケージ化されません。
次に例を示します。
Kotlin
dependencies { include(project(":image-rendering")) include("mycoolfonts:font-wingdings:5.0") }
Groovy
dependencies { include project(':image-rendering') include 'mycoolfonts:font-wingdings:5.0' }
統合ライブラリを公開する
統合ライブラリを公開する前に、Android ライブラリの公開について理解しておく必要があります。統合ライブラリの公開は Android ライブラリの公開と似ていますが、統合ライブラリを正しく公開するために考慮すべき重要な違いがいくつかあります。
- Maven Publish プラグインは、Fused Library プラグインが適用されているモジュールにも適用する必要があります。
- パブリケーションは
fusedLibraryComponent
から継承する必要があります。これは、統合ライブラリ アーティファクトのコンパイルに必要な依存関係を提供するためです。
パブリケーションの構成の例を次に示します。
Kotlin
plugins { alias(libs.plugins.android.fusedlibrary) `maven-publish` } androidFusedLibrary { … } dependencies { … } publishing { publications { register<MavenPublication>("release") { groupId = "my-company" artifactId = "my-fused-library" version = "1.0" from(components["fusedLibraryComponent"]) } } }
Groovy
plugins { id 'fused-library' id 'maven-publish' } androidFusedLibrary { … } dependencies { … } publishing { publications { release(MavenPublication) { groupId = "my-company" artifactId = "my-fused-library" version = "1.0" afterEvaluate { from components.fusedLibraryComponent } } }
テスト用に統合ライブラリを公開する
Android アプリまたは Android ライブラリから公開された統合ライブラリに応じてテストする必要があります。推奨される方法は、統合ライブラリとそのプロジェクト依存関係をローカル Maven リポジトリに公開することです。
統合ライブラリ アーティファクトをローカル リポジトリに公開するには、次のような構成を定義します。
Kotlin
plugins { alias(libs.plugins.android.fusedlibrary) `maven-publish` } repositories { maven { name = "myLocalRepo" url = uri(layout.buildDirectory.dir("myLocalRepo")) } }
Groovy
plugins { id 'fused-library' id 'maven-publish' } repositories { maven { name 'myLocalRepo' url layout.buildDirectory.dir('myLocalRepo') } }
統合ライブラリをアップロードする
統合ライブラリを配布するには、ライブラリをアップロードするをご覧ください。
動作と安全保護
Android ライブラリを組み合わせると、プラグインが優先度を推論するのが難しくなる可能性があります。たとえば、同じクラスパスを持つ 2 つのライブラリを統合すると、ライブラリのビルドに失敗します。リソースの統合では、異なるライブラリで同じ名前のリソースを選択するときに、指定された依存関係の順序が考慮されます。
- 依存関係として追加するには、統合ライブラリを Android ライブラリ アーティファクト AAR としてのみ公開できます。
- データ バインディングを使用するライブラリの統合はサポートされていません。
- 1 つの統合ライブラリ内に複数のビルドタイプとプロダクト フレーバーを統合することはできません。バリアントごとに個別の統合ライブラリを作成します。
必要な構成量と使いやすさのバランスを取るために、このプラグインは、あいまいな競合が発生した場合はビルドを失敗させるか、アーティファクトを統合するときにヒューリスティックを使用します。アーティファクトの統合方法の詳細は、次の表をご覧ください。
タイプ | 動作 |
---|---|
クラス | クラスパスが同じライブラリは、ライブラリを統合するときにビルドエラーになります。 |
Android のリソース | リソースの統合では、異なる Namespace で同じ名前のリソースを選択するときに、指定された依存関係の順序が考慮されます。 |
AAR メタデータ | AAR メタデータのバージョンは、各依存関係ライブラリの最大値を優先して統合されます。これらの値をオーバーライドするための DSL が用意されています。KotlinandroidFusedLibrary { aarMetadata { minCompileSdk = 21 minCompileSdkExtension = 1 } } |
Java リソース | 複数のライブラリに同じパスの Java リソース ファイルが存在することは許可されず、ビルドが失敗します。 |
既知の問題
統合ライブラリは新しいプラグインであり、すべてのユースケースに対応するために現在対応中の既知の問題があります。
lint.jar
ファイルが統合された AAR に含まれていない- 他の .aar ファイルに対するファイル依存関係の追加
- RenderScript アーティファクトと Prefab アーティファクトの統合はサポートされていません
統合ライブラリの依存関係を理解する
統合ライブラリにはソースがなく、Android ライブラリを唯一のソースとして効果的に使用するため、どこから何が来るのかを理解することが重要です。結果のアーティファクトに統合された依存関係と、アーティファクトのビルドに必要な依存関係を一覧表示するには、統合されたライブラリで gradle :report
タスクを実行します。このタスクは、JSON レポートを生成し、統合ライブラリの build/reports
ディレクトリに保存します。
内部プラグインの依存関係の詳細については、gradle :dependencies
タスクを実行してプラグイン構成の状態を表示します。