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:
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
.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à.