リリースに向けてライブラリを準備する

このページでは、Android Gradle プラグイン(AGP) を使用して公開用の Android ライブラリ プロジェクトを準備する必要があるプロパティとオプションについて説明します。ライブラリ作成の時点でこれらのプロパティの一部を設定する場合でも、以下のガイダンスを参照して設定を最適化してください。

名前空間を選択する

Android ライブラリは、名前空間を宣言することにより、リソースのコンパイル時に一意の R クラスを生成できるようにする必要があります。ユーザーがライブラリとその R クラスから通常のクラスをインポートするときに混乱しないようにするため、この名前空間はライブラリのルートクラス パッケージとほぼ一致するものにする必要があります。

AGP 7.0 以降では、次のコードサンプルに示すように、アプリの build.gradle ファイルで名前空間を設定できます。

Groovy

android {
  namespace = 'com.example.library'
}

Kotlin

android {
  namespace = "com.example.library"
}

名前空間は、ライブラリのデベロッパー向けのプロパティです。これは、applicationId プロパティを使用して設定されるアプリケーション ID とは関係ありません。

以前のバージョンの AGP では、マニフェストの package 属性を使用して、applicationId プロパティ(アプリ向け)と namespace プロパティ(ライブラリ向け)の両方を設定できましたが、このことが混乱を招いていました。

minSdkVersion 値を選択する

ライブラリ用の minSdkVersion を選択することは、ライブラリを公開する作業の重要な要素です。minSdkVersion は、コードがサポートできる Android の最小バージョンを反映する必要があります。

minSdkVersion を選択する際は、次の点を考慮してください。

  • 一般的に、小さい minSdkVersion を選択すると、ライブラリをより広範に配布できます。

    通常、ライブラリのコードは、アプリによって明示的に呼び出されるまで実行されません。ライブラリがアプリのコア機能にとって不可欠でない場合は、ライブラリを呼び出す前にランタイム チェックを行うことにより、ライブラリの依存関係が要求するバージョンより低いバージョンの Android でもアプリを実行できます。したがって、ライブラリの minSdkVersion を、アプリに埋め込んで可能な場合に呼び出せるような十分に小さい値に設定して、より多くのユーザーにリーチできるようにします。

  • 大きい minSdkVersion を選択すると、アプリがライブラリをインクルードできなくなることがあります。

    マニフェスト マージは、アプリのマニフェスト ファイルとその依存関係のマニフェスト ファイルをマージする AGP のステップであり、いかなる依存関係もアプリより大きい minSdkVersion を持たないようにします。

  • minSdkVersion の値を大きくすると、アプリ デベロッパーはマニフェスト マージツールの安全確認を無効にするよう促されることがあります。これは、その後のビルドプロセスで問題が発生する原因になります。

    マニフェスト マージツールは、アプリ自体より大きい minSdkVersion を持つライブラリがアプリ プロジェクトに含まれないようにします。したがって、アプリ デベロッパーは、ビルドエラーを最小限に抑えるために、マニフェスト マージツールの安全確認を無効にできます。ただし、無効にすると、その後の工程で互換性に関する実際の問題が生じるリスクがあります。

  • ブロードキャスト レシーバやコードが自動的にトリガーされるその他のメカニズムが、ライブラリのマニフェストに含まれる特別なケースでは、大きい minSdkVersion の選択が必要になる場合があります。

    このようなケースでは、大きい minSdkVersion を選択することにより、コードが確実に実行されます。または、アプリが適切なチェックを行った後でライブラリの実行をオプトインできるように、自動化された動作を無効にすることもできます。

アプリへの埋め込みを許可するには、ライブラリで RequiresApi アノテーションを使用して、ランタイム チェックを行う必要があることを呼び出し元に知らせる必要があります。Android Lint は、RequiresApi の情報を検査に使用します。アノテーションを使用して API コードと API を改善する方法について詳しくは、アノテーションによるコード検査の改善をご覧ください。

AAR メタデータをセットアップする

Android ライブラリは、Android Archive(AAR)ファイルの形式でパッケージ化されます。AAR メタデータは、AGP がライブラリを消費する際に役立つプロパティで構成されています。ライブラリが互換性のない構成によって消費され、AAR メタデータがセットアップされている場合は、問題の解決に役立つエラー メッセージがユーザーに表示されます。

minCompileSdk の値を選択する

バージョン 4.1 以降では、AGP は minCompileSdk をサポートします。これは、消費元のプロジェクトが使用できる最小の compileSdk を示します。マニフェスト エントリや、新しいプラットフォーム属性を利用するリソースがライブラリに含まれている場合、この値を設定する必要があります。

minCompileSdk の値は、モジュール レベルの build.gradle ファイルの defaultConfig{} ブロック、productFlavors{} ブロック、buildTypes{} ブロックで設定できます。

Groovy

android {
  defaultConfig {
    aarMetadata {
      minCompileSdk = 29
    }
  }
  productFlavors {
    foo {
      ...
      aarMetadata {
        minCompileSdk = 30
      }
    }
  }
}

Kotlin

android {
  defaultConfig {
    aarMetadata {
      minCompileSdk = 29
    }
  }
  productFlavors {
    register("foo") {
      ...
      aarMetadata {
        minCompileSdk = 30
      }
    }
  }
}

複数の場所で minCompileSdk を設定した場合、Gradle はビルドプロセスで設定の場所を次のように優先順位付けします。

  1. buildTypes{}

  2. productFlavors{}

  3. defaultConfig{}

上記の例では、minCompileSdkdefaultConfig{}productFlavors{} の両方で定義されており、productFlavors{} が優先され、minCompileSdk は 30 に設定されています。

コードとリソースを組み合わせたときに Gradle が設定をどのように優先順位付けするかについて詳しくは、ソースセットでビルドするをご覧ください。

テスト フィクスチャを有効にする

テスト フィクスチャは、テスト対象のコードをセットアップしたり、コンポーネントのテストを円滑に進めるためによく使用されます。バージョン 7.1 以降、AGP は、アプリ プロジェクトと動的機能プロジェクトに加えて、ライブラリ プロジェクト用のテスト フィクスチャを作成できるようになりました。

他のユーザーが使用できるようにライブラリを公開する場合は、API 用のテスト フィクスチャを作成することを検討してください。テスト フィクスチャは、モジュール レベルの build.gradle ファイルで有効にできます。

Groovy

android {
  testFixtures {
    enable = true
  }
}

Kotlin

android {
  testFixtures {
    enable = true
  }
}

テスト フィクスチャを有効にすると、Gradle はテスト フィクスチャを記述できる src/testFixtures ソースセットを自動的に作成します。

詳しくは、テスト フィクスチャの使用に関する Gradle のドキュメントをご覧ください。