アプリの所有権の更新を設定、処理する

ショップやインストーラでインストールされたアプリの場合、そのストアやインストーラはアプリの最終的なインストーラを意味する「記録上のインストーラ」と見なされます。Android 14 まで、Android は別のストアやアプリ インストーラが記録上のインストーラになること、およびそれらがユーザーに通知せずにアプリを更新することを認めていました。

Android 14 では、アプリの最初のインストーラが、自身を「アップデート オーナー」と宣言して、アプリのアップデートを所有することができます。別のインストーラがアプリを更新しようとすると、更新に進む前に新しいアップデートを承認する機会がユーザーに付与されます。

アップデート オーナー権限にパッケージをオプトインする

ストアやインストーラがアプリ パッケージを所有することを宣言するには、以下のように、パッケージごとに sysconfig XML に update-ownership を追加します。

<update-ownership package="com.example.application" installer="com.example.installer" />

上記の例では、com.example.application が所有対象のアプリ パッケージで、com.example.installer がパッケージのオーナーです。パッケージをアップデート オーナー権限にオプトインした場合、権限のある他のストアやインストーラがアプリを更新するにはアップデート オーナーを処理してユーザーの同意を得ることが必要になります。

オーナー権限の変更からパッケージをオプトアウトする

APK で拒否リストを指定することで、ストアやインストーラが更新できないようアップデート オーナーの変更からパッケージのサブセットをオプトアウトできます。拒否リストにパッケージを追加すると、ストアやインストーラはパッケージのアップデート オーナー権限をリクエストできなくなります。

別のストアやインストーラが更新できないようパッケージをオプトアウトするには:

  1. 元のストアまたはインストーラの AndroidManifest.xml ファイルに以下のプロパティを追加します。

    <application …>
      <property android:name="android.app.PROPERTY_LEGACY_UPDATE_OWNERSHIP_DENYLIST"
                android:resource="@xml/legacyOwnershipDenylist" />
    </application>
    

    上記の例で、XML 拒否リストは legacyOwnershipDenylist です。

  2. 拒否リストは以下の形式で未加工の XML リソースとして作成します。

    <deny-ownership>com.example.app1</deny-ownership>
    <deny-ownership>com.example.app2</deny-ownership>
    

ストアやインストーラが拒否リストにあるパッケージのオーナー権限をリクエストしても、オーナー権限は付与されません、パッケージはインストールされますが、どのインストーラもオーナーにはなりません。さらに、インストーラにかかわらず、誰も拒否リストにあるアプリのオーナーになることはできません。

拒否リスト内の一連のパッケージは、そのリストを指定したインストーラ APK を更新することで変更できます。インストーラが更新されると、拒否リストにそれ以後導入されたパッケージに設定されたオーナー権限はすべてクリアされます。このように、拒否リストにあるアプリ パッケージの今後の更新にユーザーの介入は必要なくなります。

アップデート オーナーを処理してユーザーの同意を得る

Android 14 では、ストアやアプリ インストーラに android.permission.INSTALL_PACKAGES 権限があっても、別のストアまたはインストーラがアップデートのオーナーであるアプリを更新する場合は、STATUS_PENDING_USER_ACTION 状態を処理する必要があります。

InstallAPKSessionApi.java サンプルアプリに STATUS_PENDING_USER_ACTION を処理する方法も示されています。

プリロードされたアプリのオーナー権限を設定する

一般に、プリロードされたアプリを所有しているのは特定のインストーラではありません。代わりに、アップデート オーナー権限にパッケージをオプトインするで説明したように、プリロードされたアプリには、システム設定を使用して新しいオーナーが割り当てられます。