Skip to content

Most visited

Recently visited

navigation

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

すべての Android アプリには、Java パッケージ名のように、com.example.myapp などの一意のアプリケーション ID があります。 この ID によって、端末上と Google Play ストアでアプリが一意に識別されます。 アプリの新しいバージョンをアップロードする場合、アプリケーション ID(と 署名した証明書)は、元の APK と同じにする必要があります。アプリケーション ID が変更されると、Google Play ストアはこの APK を全く別のアプリとして処理します。アプリの公開後は、アプリケーション ID を変更できません

アプリケーション ID は、以下のようにモジュールの build.gradle ファイル内の applicationId プロパティで定義されます。

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

Android Studio に新しいプロジェクトを作成すると、applicationId は、セットアップ時に選択した Java スタイルのパッケージ名と完全に同じ値になります。 アプリケーション ID とパッケージ名は、この点を除いては互いに独立しています。 コードのパッケージ名(コード名前空間)を変更しても、アプリケーション ID は変わりません。この逆も同様です(ただし、アプリの公開後はアプリケーション ID を変更できません)。 パッケージ名の変更による影響については注意が必要です。パッケージ名の変更のセクションをご覧ください。

アプリケーション ID は従来の Java パッケージ名に類似していますが、アプリケーション ID の命名規則は、以下のようにさらに厳密になっています。

注:アプリケーション ID は、コードのパッケージ名と直接紐付けるために使用されます。そのため、一部の Android API ではメソッド名とパラメータ名に「パッケージ名」を使用しますが、これは実際にはアプリケーション ID です。たとえば、Context.getPackageName() メソッドではアプリケーション ID が返されます。 コードの実際のパッケージ名をアプリのコード以外で共有する必要はありません。

警告:WebView を使用している場合は、アプリケーション ID のプレフィックスとしてパッケージ名を使用することをお勧めします。使用しないと、issue 211768 で説明している問題が発生する可能性があります。

ビルド バリアント向けにアプリケーション ID を変更する

アプリ用に APK をビルドすると、ビルドツールは build.gradle ファイルの defaultConfig ブロックで定義したアプリケーション ID を使用して APK をタグ付けします(以下に例を示します)。ただし、「free」や「pro」のようにアプリのバージョンを複数作成して、Google Play ストアで別々の掲載情報として表示されるように作成したい場合は、 アプリケーション ID がそれぞれ異なるビルド バリアントを別に作成する必要があります。

この場合、ビルド バリアントはそれぞれ、別のプロダクト フレーバーとして定義する必要があります。 productFlavors {} ブロック内のフレーバーごとに applicationId プロパティを再定義するか、以下の例に示すように applicationIdSuffix を使用して、デフォルトのアプリケーション ID にセグメントを付加します。

android {
    defaultConfig {
        applicationId "com.example.myapp"
    }
    productFlavors {
        free {
            applicationIdSuffix ".free"
        }
        pro {
            applicationIdSuffix ".pro"
        }
    }
}

この結果、「free」プロダクト フレーバーのアプリケーション ID は "com.example.myapp.free" となります。

以下の例に示すように、applicationIdSuffix を使用して、ビルドタイプに基づいたセグメントを付加することもできます。

android {
    ...
    buildTypes {
        debug {
            applicationIdSuffix ".debug"
        }
    }
}

Gradle ではプロダクト フレーバーの後にビルドタイプの設定を適用するため、「free debug」ビルド バリアント用のアプリケーション ID は、"com.example.myapp.free.debug" となります。 2 つの APK で同じアプリケーション ID を使用することはできないため、この方法は、デバッグビルドとリリースビルドの両方を同じ端末に組み込みたい場合に有用です。

アプリケーション ID が異なる APK は、Google Play ストアでは別のアプリとして扱われることを再度ご確認ください。 アプリの掲載情報は共通のものを使用して、それぞれ異なる端末設定(API レベルなど)をターゲットとする APK を複数配布したい場合は、すべてのビルド バリアントに同じアプリケーション ID を使用する必要があります。ただし、APK ごとに別の versionCode を指定してください。詳細については、複数 APK のサポートをご覧ください。

警告:前の SDK ツールとの互換性を持つため、build.gradleファイルに applicationId プロパティを定義していない場合、ビルドツールは AndroidManifest.xml ファイルのパッケージ名をアプリケーション ID として使用します。この場合、パッケージ名のリファクタリングによってもアプリケーション ID が変わります。

ヒント:マニフェスト ファイルでアプリケーション ID を参照する必要がある場合、どのマニフェスト属性でも ${applicationId} プレースホルダを使用できます。Gradle はビルド時にこのタグを実際のアプリケーション ID に置き換えます。 詳細については、マニフェストへのビルド変数の追加をご覧ください。

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

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

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

注:テスト中のアプリとの名前の競合を防ぐため、ビルドツールでは、マニフェスト ファイルに定義したパッケージ名でなく、テスト アプリケーション ID に基づいた名前空間を使用して、テスト APK 用の R クラスを生成します。

パッケージ名の変更

プロジェクトのパッケージ名がデフォルトのアプリケーション ID と一致していても、パッケージ名を変更できます。 ただし、パッケージ名を変更したい場合、(プロジェクトのディレクトリ構造で定義されているように)パッケージ名は、以下に示すように AndroidManifest.xml ファイルの package 属性と常に一致している必要があります。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapp"
    android:versionCode="1"
    android:versionName="1.0" >

Android ビルドツールは次の 2 つの場合に package 属性を使用します。

そのため、package 属性の名前は、アクティビティと他のアプリコードを保持する、プロジェクトのベース パッケージ名と常に一致している必要があります。 プロジェクトにサブパッケージが含まれていてもかまいませんが、これらのファイルでは package 属性の名前空間を使用して R.java クラスをインポートし、マニフェストで宣言されたすべてのアプリ コンポーネントでは、不足しているサブパッケージ名(または完全修飾パッケージ名)を追加する必要があります。

パッケージ名を完全にリファクタリングしたい場合、package 属性もアップデートしてください。 Android Studio のツールを使用してパッケージの名前を変更してリファクタリングする限り、パッケージは自動的に同期されます。 (同期状態にならない場合、アプリのコードでは R クラスを解決することができません。これは、アプリのコードが同じパッケージに含まれず、マニフェストがアクティビティまたは他のコンポーネントを識別しないためです。)

package 属性をプロジェクトのメイン AndroidManifest.xml ファイルに常に指定する必要があります。 追加のマニフェスト ファイル(プロダクトフレーバーまたはビルドタイプ)がある場合、最も優先度の高いマニフェスト ファイルで提供されるパッケージ名が、最終的に統合されたマニフェストで必ず使用されることに注意してください。 詳細については、複数のマニフェスト ファイルの統合をご覧ください。

補足情報:マニフェストの package と Gradle の applicationId で名前が異なる可能性がありますが、ビルドツールは、ビルドの最後にアプリケーション ID を APK の最終的なマニフェスト ファイルにコピーします。そのため、ビルド後に AndroidManifest.xml ファイルを調べたときに、package 属性が変わっていても驚かないでください。Google Play ストアと Android プラットフォームでは、実際に package 属性を調べることでアプリを識別します。そのためビルドで(R クラスに名前空間を設定し、マニフェスト クラス名を解決するために)元の値が使用されたあと、その値は無視され、アプリケーション ID で置き換えられます。

This site uses cookies to store your preferences for site-specific language and display options.

Get the latest Android developer news and tips that will help you find success on Google Play.

* Required Fields

Hooray!

Follow Google Developers on WeChat

Browse this site in ?

You requested a page in , but your language preference for this site is .

Would you like to change your language preference and browse this site in ? If you want to change your language preference later, use the language menu at the bottom of each page.

This class requires API level or higher

This doc is hidden because your selected API level for the documentation is . You can change the documentation API level with the selector above the left navigation.

For more information about specifying the API level your app requires, read Supporting Different Platform Versions.

Take a short survey?
Help us improve the Android developer experience.
(Sep 2017 survey)