アプリのアップデートの仕組み

このガイドでは、Android プラットフォームと Google Play でアプリのアップデートを処理する仕組みと、アプリを複数のアプリストアで公開するデベロッパー向けのさまざまなオプションについて説明します。

Android でアプリのアップデートを処理する仕組み

すべての Android アプリには、Java または Kotlin のパッケージ名(com.example.myapp など)に似た一意のアプリケーション ID があります。この ID によって、デバイス上の各アプリが一意に識別されます。Android デバイスには、特定のアプリケーション ID を持つアプリを一度に 1 つだけインストールできます。

Android プラットフォームでアップデートの承認を受けるには、次の条件を満たす必要があります。

  • アップデートのアプリケーション ID は、インストール済みのアプリと同じである必要がある。
  • アップデートの署名証明書は、インストール済みのアプリの署名証明書と同じであるか、有効な proof-of-rotation を含んでいる必要がある。
  • アップデートのバージョン コードは、インストール済みのアプリのバージョン コードと同じかそれより大きくする必要がある。
  • 場合によって、ユーザーがアップデートを承認する必要がある。

なお、あるアプリについて、アップデートの署名証明書が同じであり、バージョン コードが同じかそれより大きい場合、異なるインストーラによるアップデートを防ぐための機能は組み込まれていません。

上記の条件を満たさないアプリをインストールするには、まず、現在インストールされているバージョンをアンインストールし、デバイスからすべてのアプリデータを削除する必要があります。

Google Play でアプリを更新する方法

Google Play では、以下の原則に基づいてアプリを更新します。

  • ユーザーに最新情報を提供する。 セキュリティの問題からユーザーを保護し、最新の機能改善のメリットを得るために、アプリを最新の状態にしておくことをおすすめします。
  • ユーザーの選択を尊重する。 Google Play では、ユーザーのアカウントに関連付けられているアプリを、ユーザーが選択したアップデート設定(従量制データの使用の許可または禁止など)に基づいて更新します。
  • デベロッパーの選択を尊重する。 Google Play は、アプリのアップデートを判断する際にデベロッパーの構成オプションを使用します。
  • リソースの無駄を防ぐ。 アップデートをダウンロードするタイミングを最適化してバッテリー駆動時間を節約し、圧縮やパッチ適用などの手法でデータの使用を最小限に抑えます。

Google Play は、デバイスにインストールされた特定のアプリについて、以下の条件を満たす場合にアプリを更新します。

  • アプリが、同じアプリケーション ID を使用して Google Play で公開されている。
  • 公開版アプリの署名証明書は、現在インストールされているバージョンの署名証明書と一致するか、有効なproof-of-rotation を含んでいる。
  • アプリがユーザーのライブラリの一部であるか、OEM によってプリロードされている。
  • アプリが、そのユーザーとデバイスで、デベロッパー定義のターゲティング オプションに応じて利用できる。
  • インストール済みのアプリが Google Play で利用できるバージョンと比較して、古いバージョンである。

Google Play は、これらの条件を満たしていればアプリを更新できます。以下のサブセクションでは、記載されているいくつかの条件について詳しく説明します。

ただし、部分的なダウンロードの完了やオンデマンドでのスプリットのダウンロードなど、Google Play が Android バージョン コードを変更せずに、デベロッパーの代わりにアプリ コンテンツのダウンロードやアプリバイナリのメンテナンスを行う場合もあります。

Google Play での公開

Google Play では、アプリケーション ID を使用して、Google Play で公開されているアプリを一意に識別します。この条件は、インストール済みのアプリのアプリケーション ID が Google Play で公開されているアプリのアプリケーション ID と一致する場合に満たされます。

ユーザーのライブラリの一部

この条件は、次のいずれかに該当する場合に満たされます。

  • デバイス上に有効な Google アカウントがあり、Google Play でインストール ボタンまたは購入ボタンをタップすることでアプリを入手している。
  • OEM で、システム イメージの一部としてアプリをプリロードしている。

ユーザーはライブラリからアプリを手動で削除することもできます。

古いバージョン

Google Play は、デバイスにインストールされているアプリが古くなっているかどうかを判断するために、バージョン コードを確認します。Google Play でダウンロードできるバージョンのバージョン コードが、インストール済みのバージョンよりも後のものである場合、Google Play ではインストール済みのアプリが古くなっているとみなします。

複数のアプリストアのアプリ

複数のアプリストアでアプリを公開するときに、ストアをまたいだアップデートを制御する方法がいくつかあります。以下のセクションでは、これらのオプションと、考えられるメリットとデメリットについて説明します。

ストアをまたいだアップデートの防止

各アプリストアでストアをまたいだアプリ アップデートを行わないようにすることもできます。この方法は、アプリのコンテンツがアプリストアごとに異なる場合にも使用できます。これを行うには、2 つの異なるアプリケーション ID を使用してアプリを公開するか、同じアプリケーション ID と 2 つの異なる署名鍵を使用してアプリを公開します。

署名鍵の再利用を最小限に抑えて、鍵の不正使用のリスクを低減したい場合は、アプリストアごとに異なるアプリ署名鍵を使用します。こうすることで、ストアをまたいだアップデートを防ぎます。

Android では、いずれの方法でも、アプリケーション ID と署名鍵が一致しないアプリは互換性がないものとして扱います。あるストアから別のストアに切り替える場合、インストール済みのアプリを削除し(これにより、そのアプリに関連するすべてのデータが削除されます)、他のストアから再インストールする必要があります。

ストアをまたいだアップデートの許可

各アプリストアでストアをまたいだアプリのアップデートを行えるようにすることができます。この方法は、すべてのアプリストアで同じコンテンツを使用してアプリを配布し、ユーザーを最新の状態に保つことを優先する場合に便利です。アプリを公開するすべてのアプリストアで同じアプリケーション ID と署名鍵を使用する限り、ユーザーが最初にアプリをダウンロードした場所に関係なく、各アプリストアでアプリのインストールをアップデートできます。

しかし、各アプリストアがストアをまたいだアプリのアップデートを実装する方法によっては、予想外の動作が発生する可能性があります。たとえば、ユーザーがあるストアのアップデートを無効にし、別のストアがアップデートを提供し続けていることに気づかない場合があります。

以前にストアをまたいだアップデートを許可したものの、特定のアップデート ソースがデバイスに存在するときにはそのアップデートを優先したい場合、優先するアプリストアでは数字の大きなバージョン コードを使用してアプリをリリースし、他のアプリストアでは数字の小さなバージョン コードを使用してリリースすることが可能です。優先するソースからより数字の大きなバージョン コードのアップデートがインストールされると、他のアプリストアではそのデバイスでのストアをまたいだアップデートが行えなくなります。