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 possedere 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 si deve essere proprietari 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.

Disattiva le modifiche alla proprietà per i pacchetti

Puoi fare in modo che lo store o il programma di installazione disattivino le modifiche del proprietario degli aggiornamenti per un sottoinsieme di pacchetti fornendo una lista bloccata nell'APK. Se includi un pacchetto in questo elenco, nessun negozio o programma di installazione 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 negozio 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 programma di installazione richiede la proprietà di un pacchetto inserito in una lista bloccata, la proprietà non verrà concessa e il pacchetto sarà ancora installato, ma non sarà di proprietà di nessun programma di installazione. 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, i successivi aggiornamenti del pacchetto dell'app nell'elenco di pacchetti non consentiti non richiedono 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à delle 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à.