Configurare e gestire la proprietà degli aggiornamenti per le app

Quando un'app viene installata da uno store o da un installatore, lo store o l'installatore è considerato "l'installatore registrato", ovvero l'ultimo installatore dell'app. Prima di Android 14, Android consentiva a un altro installatore di app o di store di diventare l'installatore registrato e di aggiornare l'app senza avvisare l'utente.

In Android 14, l'installatore iniziale di un'app può dichiararsi "proprietario dell'aggiornamento" e gestire gli aggiornamenti dell'app. Se un altro installatore tenta di aggiornare l'app, l'utente ha la possibilità di approvare il nuovo aggiornamento prima che venga eseguito.

Attivare i pacchetti per aggiornare la proprietà

Per dichiarare che un negozio o un installatore è proprietario di un pacchetto di app, includere 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 dell'app di cui vuoi essere proprietario e com.example.installer è il proprietario del pacchetto. Quando un pacchetto viene attivato per l'aggiornamento della proprietà, altri store o installatori con privilegi devono gestire l'aggiornamento del proprietario e ottenere il consenso dell'utente per aggiornare l'app.

Disattivare le modifiche alla proprietà per i pacchetti

Puoi chiedere al tuo store o installatore di disattivare per un sottoinsieme di pacchetti le modifiche al proprietario dell'aggiornamento fornendo una lista negativa nell'APK. Se includi un pacchetto in questo elenco, nessun negozio o installatore può richiedere l'aggiornamento della proprietà del pacchetto.

Per impedire l'aggiornamento dei pacchetti da parte di un altro store o installatore:

  1. Includi la seguente proprietà nel file AndroidManifest.xml del gestore o dell'installatore 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 lista di siti non consentiti come risorsa XML non elaborata con il seguente formato:

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

Se un negozio o un installatore richiede la proprietà di un pacchetto inserito in una lista negativa, la proprietà non verrà concessa e il pacchetto verrà comunque installato, ma non sarà di proprietà di nessun installatore. Inoltre, indipendentemente dal programma di installazione, un'app in una lista vietata 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 successivamente inserito in un elenco di rifiuto viene cancellata quando il programma di installazione viene aggiornato. Di conseguenza, gli aggiornamenti successivi del pacchetto dell'app nell'elenco di rifiuto non richiederanno l'interazione dell'utente.

Gestire l'aggiornamento del proprietario e ottenere il consenso dell'utente

Con Android 14, anche se un installatore di app o uno store dispone dell'autorizzazioneandroid.permission.INSTALL_PACKAGES, deve comunque gestire lo statoSTATUS_PENDING_USER_ACTION se vuole aggiornare un'app i cui aggiornamenti sono di proprietà di un altro installatore o store.

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

Stabilire la proprietà per le app precaricate

In genere, le app precaricate non sono di proprietà di un installatore specifico. Al contrario, alle app precaricate viene assegnato un nuovo proprietario utilizzando la configurazione di sistema, come illustrato in Attivare i pacchetti per aggiornare la proprietà.