自作アプリの公開を見据えアプリの「パッケージ名」を決めるために調査を始めたのですが、「パッケージ名」とはべつに「アプリケーション ID」も非常に重要であることが分かりましたのでノートとしてまとめておきます。(「アプリケーション ID」の方がはるかに重要でした。)
アプリケーションID
とは
オフィシャルサイトアプリケーション ID を設定するを参考にしました。
- アプリをデバイスや Google Play ストアで一意に識別するためのID
- アプリの新しいバージョンをアップロードする場合、アプリケーション ID(および署名に使用する証明書)は元のアーティファクトと同じでなければならない
アプリケーション ID は、モジュールの
build.gradle
ファイル内のapplicationId
プロパティで定義されるアプリケーションIDの命名規則
- 2 つ以上のセグメント(1 つ以上のドット)が必要
- 各セグメントは文字で始まる必要がある
- 使用できる文字は英数字とアンダースコアのみ(a~z、A~Z、0~9、_)
無料版、プロフェッショナル版などの様々なバージョンをGooglePlayストアで別々の掲載情報として表示したい場合は、アプリケーションIDが異なる
ビルドバリアント
を作成する必要がある
パッケージ名とは
- プロジェクトのパッケージ名は、デフォルトでアプリケーション ID と一致していますが、変更することも可能
パッケージ名を変更する場合は、AndroidManifest.xml ファイル内の package 属性と常に一致する必要があることにご注意ください。
Android ビルドツールは、次の 2 つの目的で package 属性を使用します。
package 属性内の名前は、プロジェクト内でアクティビティや他のアプリコードを保持する基本パッケージ名と常に一致する必要があります。プロジェクトにサブパッケージを含めることはもちろん可能ですが、そうすると、それらのファイルが package 属性の名前空間を使用して R.java クラスをインポートする必要が生じます。また、マニフェスト内で宣言されたすべてのアプリ コンポーネントが、欠落しているサブパッケージ名を追加する(または完全修飾パッケージ名を使用する)必要が生じます。
パッケージ名を完全にリファクタリングする場合は、必ず package 属性も更新してください。Android Studio のツールを使用してパッケージの名前を変更してリファクタリングすれば、パッケージは自動的に同期が維持されます(同期が失われると、アプリコードは R クラスを解決できません。これは、アプリコードが同じパッケージに含まれなくなり、マニフェストによってアクティビティまたは他のコンポーネントが識別されなくなるためです)。
アプリケーションID
とパッケージ名
の関係
以下は、オフィシャルサイトアプリケーション ID を設定するからの引用になります。
Android Studio で新しいプロジェクトを作成した場合、applicationId は、セットアップ時に選択した Java スタイルのパッケージ名と完全に同じになります。ただし、この点を除けばアプリケーション ID とパッケージ名は互いに独立しています。コードのパッケージ名(コード名前空間)を変更してもアプリケーション ID は変わらず、その逆も同様です(ただし、前述の理由からアプリの公開後はアプリケーション ID を変更しないでください)。
私は、「パッケージ名=アプリケーションID」と誤解をしていましたが、その理由は「パッケージ名=アプリケーションID」として説明しているTechブログばかり目についたからです。しかし、オフィシャルサイトの説明を読むとプロジェクト作成時に同じ値でセットされるだけであり、その後の振る舞いは独立であることが記述されていました。