Configurare e gestire la proprietà degli aggiornamenti per le app

Quando un'app viene installata da uno store o da un programma di installazione, lo store o il programma di installazione è considerato l'ultimo programma di installazione dell'app. Prima di Android 14, Android consentiva a un altro store o programma di installazione di app di diventare il programma di installazione registrato e di aggiornare l'app senza notificare l'utente.

In Android 14, il programma di installazione iniziale di un'app può dichiararsi "proprietario dell'aggiornamento" e possedere gli aggiornamenti dell'app. Se un altro programma di installazione tenta di aggiornare l'app, l'utente ha la possibilità di approvare il nuovo aggiornamento prima di procedere.

Attiva i pacchetti per aggiornare la proprietà

Per dichiarare che un negozio o un programma di installazione è proprietario di un pacchetto dell'app, includi il tag update-ownership nel file XML sysconfig per ogni pacchetto come segue:

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

In questo esempio, com.example.application è il pacchetto applicativo di cui si vuole diventare proprietari e com.example.installer è il proprietario del pacchetto applicativo. Quando un pacchetto viene attivato per l'aggiornamento della proprietà, altri store o programmi di installazione privilegiati devono gestire l'aggiornamento del proprietario e ottenere il consenso dell'utente per aggiornare l'app.

Disattivare i pacchetti dalle modifiche alla proprietà

Puoi fare in modo che il tuo store o programma di installazione escluda un sottoinsieme di pacchetti dalle modifiche del proprietario dell'aggiornamento fornendo un elenco bloccato nell'APK. Se includi un pacchetto in questo elenco, nessun negozio o programma di installazione può richiedere la proprietà dell'aggiornamento del pacchetto.

Per disattivare l'aggiornamento dei pacchetti da parte di un altro negozio o programma di installazione:

  1. Includi la seguente proprietà nel file AndroidManifest.xml dello store o del programma di installazione originale:

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

    Questo esempio fa riferimento a una lista nera XML denominata legacyOwnershipDenylist.

  2. Crea una denylist come risorsa XML non elaborata nel seguente formato:

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

Se un negozio o un programma di installazione richiede la proprietà di un pacchetto in una denylist, la proprietà non verrà concessa e il pacchetto verrà comunque installato, ma non sarà di proprietà di alcun programma di installazione. Inoltre, indipendentemente dal programma di installazione, un'app in una lista bloccata non può essere di proprietà di nessuno.

L'insieme di pacchetti in questo elenco può cambiare tramite un aggiornamento dell'APK del programma di installazione che fornisce l'elenco. Qualsiasi proprietà impostata per un pacchetto che viene successivamente inserito in un elenco di negazione viene cancellata quando il programma di installazione viene aggiornato. Pertanto, gli aggiornamenti successivi del pacchetto applicativo nell'elenco di negazione non richiederanno l'interazione dell'utente.

Gestire il proprietario dell'aggiornamento e ottenere il consenso degli utenti

Con Android 14, anche se uno store o un programma di installazione di app dispone dell'autorizzazione android.permission.INSTALL_PACKAGES, deve comunque gestire lo stato STATUS_PENDING_USER_ACTION se vuole aggiornare un'app i cui aggiornamenti sono di proprietà di un altro store o programma di installazione.

L'app di esempio InstallAPKSessionApi.java mostra anche come gestire STATUS_PENDING_USER_ACTION.

Stabilire la proprietà per le app precaricate

Le app precaricate in genere non sono di proprietà di un programma di installazione specifico. Le app precaricate vengono invece assegnate a un nuovo proprietario utilizzando la configurazione di sistema come mostrato in Attivare i pacchetti per aggiornare la proprietà.