このページでは、モジュール レベルの 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" ... }
注意: testNamespace
と namespace
を同じ値に設定しないでください。同じ値の場合、名前空間の競合が発生します。
テストについて詳しくは、Android でのアプリのテストをご覧ください。