Configura e gestisci la proprietà degli aggiornamenti per le app, configura e gestisci 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 negozio o installatore di app di diventare l'installatore registrato e di aggiornare l'app senza avvisare l'utente.

In Android 14, chi installa inizialmente un'app può dichiararsi "proprietario dell'aggiornamento" e possedere gli aggiornamenti dell'app. Se un altro programma di installazione tenta di aggiornare l'app, all'utente viene data la possibilità di approvare il nuovo aggiornamento prima che proceda.

Attiva i pacchetti per aggiornare la proprietà

Per dichiarare che uno store o un programma di installazione possiede un pacchetto dell'app, includi il tag update-ownership nel tuo 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 avere la proprietà e com.example.installer è il proprietario del pacchetto. Quando si sceglie di aggiornare la proprietà di un pacchetto, altri archivi o installatori con privilegi devono gestire il proprietario dell'aggiornamento e ottenere il consenso dell'utente per aggiornare l'app.

Disattiva i pacchetti dalle modifiche di proprietà

Puoi fare in modo che il tuo negozio o installatore disattivi un sottoinsieme di pacchetti dalle modifiche del proprietario dell'aggiornamento fornendo una lista bloccata nell'APK. Includendo un pacchetto in questo elenco, nessun negozio o installatore potrà richiedere la proprietà dell'aggiornamento del pacchetto.

Per impedire che i pacchetti siano aggiornabili da un altro negozio o programma di installazione:

  1. Includi la seguente proprietà nello store originale o nel file AndroidManifest.xml del programma di installazione:

    <application …>
      <property android:name="android.app.PROPERTY_LEGACY_UPDATE_OWNERSHIP_DENYLIST"
                android:resource="@xml/legacyOwnershipDenylist" />
    </application>
    

    Questo esempio fa riferimento a una lista negata XML denominata legacyOwnershipDenylist .

  2. Crea una lista negata 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 su una lista bloccata, la proprietà non verrà concessa e il pacchetto sarà comunque installato ma non sarà di proprietà di alcun installatore. Inoltre, indipendentemente dal programma di installazione, un'app inclusa 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 successivamente introdotto in un elenco bloccati viene cancellata quando il programma di installazione viene aggiornato. Pertanto, i successivi aggiornamenti del pacchetto dell'app nell'elenco di app bloccate non richiederanno l'interazione dell'utente.

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

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 desidera aggiornare un'app i cui aggiornamenti sono di proprietà di un altro negozio o programma di installazione.

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

Stabilisci la proprietà per le app precaricate

Le app precaricate in genere non sono di proprietà di un installatore specifico. Alle app precaricate viene invece assegnato un nuovo proprietario utilizzando la configurazione di sistema come mostrato in Attivazione dei pacchetti per aggiornare la proprietà .