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.
Attiva l'aggiornamento della proprietà per i pacchetti
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
aggiornare la proprietà, altri archivi con privilegi o utenti che hanno eseguito l'installazione devono
gestire l'aggiornamento del proprietario e ottenere il consenso degli utenti per aggiornare l'app.
Disattiva le modifiche alla proprietà per i pacchetti
Puoi chiedere al tuo store o installatore di disattivare per un sottoinsieme di pacchetti le modifiche del 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 che i pacchetti possano essere aggiornati da un altro store o programma di installazione:
Includi la seguente proprietà nel negozio o nella sede di installazione originale File
AndroidManifest.xml
:<application …> <property android:name="android.app.PROPERTY_LEGACY_UPDATE_OWNERSHIP_DENYLIST" android:resource="@xml/legacyOwnershipDenylist" /> </application>
Questo esempio fa riferimento a una lista bloccata XML denominata
legacyOwnershipDenylist
.Crea una lista bloccata 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 del programma di installazione APK che fornisce l'elenco. Qualsiasi proprietà impostata per un pacchetto che una lista bloccata viene cancellata quando il programma di installazione aggiornato. Di conseguenza, gli aggiornamenti successivi del pacchetto dell'app nella lista bloccata richiedono l'interazione dell'utente.
Gestisci l'aggiornamento del proprietario e ottieni il consenso degli utenti
Con Android 14, anche se uno store o un programma di installazione di app ha la
Autorizzazione android.permission.INSTALL_PACKAGES
, deve comunque gestire
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
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 mostrato in Attivare i pacchetti per aggiornare la proprietà.