アプリ モジュールを設定する

このページでは、モジュール レベルの build.gradle.kts ファイルで役立つアプリ設定について説明します。build.gradle.kts ファイルで設定される重要なプロパティの概要だけでなく、以下の方法についても説明します。

  • 異なるビルド構成用にアプリケーション ID を変更する。
  • 名前空間をアプリケーション ID とは独立にかつ安全に調整する。

アプリケーション ID の設定

すべての Android アプリには、「com.example.myapp」など、Java または Kotlin パッケージ名に似た一意のアプリケーション ID があります。この ID によってアプリがデバイスと Google Play ストアで一意に識別されます。

アプリケーション ID は、次に示すように、モジュールの build.gradle.kts ファイル内の applicationId プロパティで定義されます。com.example.myapp をアプリの ID に置き換えて、applicationId の値を更新します。

Kotlin

android {
    defaultConfig {
        applicationId = "com.example.myapp"
        minSdk = 15
        targetSdk = 24
        versionCode = 1
        versionName = "1.0"
    }
    ...
}

Groovy

android {
    defaultConfig {
        applicationId "com.example.myapp"
        minSdkVersion 15
        targetSdkVersion 24
        versionCode 1
        versionName "1.0"
    }
    ...
}

アプリケーション ID は従来の Kotlin または Java パッケージ名に似ていますが、アプリケーション ID の命名規則はもう少し厳密になっています。

  • 2 つ以上のセグメント(1 つ以上のドット)が必要
  • 各セグメントは文字で始まる必要がある
  • 使用できる文字は英数字と下線のみ(a~z、A~Z、0~9、_)

Android Studio で新しいプロジェクトを作成した場合、applicationId には、セットアップ時に選択したパッケージ名が自動的に割り当てられます。技術的には、その後で 2 つのプロパティを独立に切り替えることは可能ですが、おすすめはしません。

アプリケーション ID を設定する際は、次のようにすることをおすすめします。

  • アプリケーション ID は名前空間と同じにしておきます。2 つのプロパティの違いに多少混乱する可能性がありますが、同じままにしておけば心配はありません。
  • アプリの公開後は、アプリケーション ID を変更しないでください。変更すると、Google Play ストアでそれ以降のアップロードが新しいアプリとして扱われます。
  • アプリケーション ID を明示的に定義します。applicationId プロパティを使用してアプリケーション ID を明示的に定義しなかった場合、自動的に名前空間と同じ値が割り当てられます。つまり、名前空間を変更するとアプリケーション ID が変更されるという通常は望ましくないことが起こります。

テスト用にアプリケーション ID を変更する

デフォルトでは、ビルドツールは、指定されたビルド バリアントのアプリケーション ID の末尾に .test を付加したものを使用して、インストゥルメンテーション テスト APK にアプリケーション ID を適用します。たとえば、com.example.myapp.free ビルド バリアントのテスト APK では、アプリケーション ID は com.example.myapp.free.test です。

必須ではありませんが、defaultConfig または productFlavor ブロックで testApplicationId プロパティを定義することにより、アプリケーション ID を変更できます。

名前空間を設定する

どの Android モジュールにも名前空間があり、その名前空間は生成される R クラスと BuildConfig クラスの Kotlin または Java パッケージ名として使用されます。

名前空間は、次のコード スニペットに示すように、モジュールの build.gradle.kts ファイル内の namespace プロパティで定義されます。namespace は、最初はプロジェクトの作成時に選択したパッケージ名に設定されます。

Kotlin

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

Groovy

android {
    namespace "com.example.myapp"
    ...
}

アプリを最終的なアプリ パッケージ(APK)にビルドする際、Android ビルドツールは、アプリで生成された R クラス(アプリのリソースへのアクセスに使用される)の名前空間にこの名前空間を使用します。たとえば、上記のビルドファイルでは、R クラスは com.example.myapp.R に作成されます。

build.gradle.kts ファイルの namespace プロパティに設定する名前は、アクティビティと他のアプリコードを配置する、プロジェクトのベース パッケージ名に常に一致させる必要があります。他のサブパッケージをプロジェクトに含めることはできますが、それらのファイルでは namespace プロパティの名前空間を使用して R クラスをインポートする必要が生じます。

簡単なワークフローにするため、デフォルトのとおり、名前空間をアプリケーション ID と同じにしてください。

名前空間を変更する

ほとんどの場合は、デフォルトのとおり、名前空間とアプリケーション ID は同じにすることをおすすめします。ただし、コードを再編成する場合や、名前空間の競合を避ける必要がある場合には、いずれかの時点で名前空間を変更する必要があります。

このような場合、アプリケーション ID とは独立に(モジュールの build.gradle.kts ファイル内の namespace プロパティを更新して)名前空間を変更します。その前に、アプリケーション ID を明示的に定義して、名前空間を変更してもアプリケーション ID が変更されないようにしておいてください。名前空間がアプリケーション ID に与える影響については、アプリケーション ID を設定するをご覧ください。

namespace と Gradle の applicationId で名前が異なる場合は、ビルドの最後に、ビルドツールによってアプリケーション ID がアプリの最終マニフェスト ファイルにコピーされます。そのため、ビルド後に AndroidManifest.xml ファイルを検査すると、package 属性はアプリケーション ID に設定されています。マージ マニフェストの package 属性は、Google Play ストアと Android プラットフォームが実際にアプリを識別するために使用するものです。

テスト用の名前空間を変更する

androidTest ソースセットと test ソースセットのデフォルトの名前空間は、メインの名前空間の末尾に .test を追加したものです。たとえば、build.gradle ファイルの namespace プロパティが com.example.myapp の場合、テスト用の名前空間はデフォルトで com.example.myapp.test に設定されています。テスト用の名前空間を変更するには、次のコード スニペットのように、testNamespace プロパティを使用します。

Kotlin

android {
    namespace = "com.example.myapp"
    testNamespace = "com.example.mytestapp"
    ...
}

Groovy

android {
    namespace "com.example.myapp"
    testNamespace "com.example.mytestapp"
    ...
}

注意: testNamespacenamespace を同じ値に設定しないでください。同じ値の場合、名前空間の競合が発生します。

テストについて詳しくは、Android でのアプリのテストをご覧ください。