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, l'installer iniziale di un'app può dichiararsi "proprietario dell'aggiornamento" e possedere gli aggiornamenti dell'app. Se un altro installer tenta di aggiornare l'app, l'utente ha la possibilità di approvare il nuovo aggiornamento prima che venga eseguito.
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 dell'app di cui si vuole acquisire la proprietà e
com.example.installer è il proprietario del pacchetto. 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 al 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:
Includi la seguente proprietà nel file
AndroidManifest.xmldel negozio 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 chiamata
legacyOwnershipDenylist.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 negato viene cancellata quando il programma di installazione viene aggiornato. Pertanto, gli aggiornamenti successivi del pacchetto dell'app 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à.