SdkSandboxManager
public
final
class
SdkSandboxManager
extends Object
java.lang.Object | |
🎞 | android.app.sdksandbox.SdkSandboxManager |
Fornisce le API per caricare SDKs
nel
processo sandbox SDK e poi interagire con essi.
SDK Sandbox è un processo Java eseguito in un intervallo UID separato. Ogni app può avere il proprio SDK processo sandbox.
Innanzitutto, l'app deve dichiarare gli SDK da cui dipende nel file manifest utilizzando il tag <uses-sdk-library>
. Le app possono caricare nella sandbox SDK solo gli SDK da cui dipendono.
Riepilogo
Classi nidificate | |
---|---|
interface |
SdkSandboxManager.SdkSandboxProcessDeathCallback
Un callback per monitorare gli eventi di morte sandbox SDK. |
Costanti | |
---|---|
String |
EXTRA_DISPLAY_ID
Il nome della chiave da utilizzare nei campi Bundle di |
String |
EXTRA_HEIGHT_IN_PIXELS
Il nome della chiave da utilizzare nei campi Bundle di |
String |
EXTRA_HOST_TOKEN
Il nome della chiave da utilizzare nei campi Bundle di |
String |
EXTRA_SURFACE_PACKAGE
Il nome della chiave nel bundle che viene passata alla funzione |
String |
EXTRA_WIDTH_IN_PIXELS
Il nome della chiave da utilizzare nei campi Bundle di |
int |
LOAD_SDK_ALREADY_LOADED
L'SDK è già caricato. |
int |
LOAD_SDK_INTERNAL_ERROR
Errore interno durante il caricamento dell'SDK. |
int |
LOAD_SDK_NOT_FOUND
SDK non trovato. |
int |
LOAD_SDK_SDK_DEFINED_ERROR
Errore dell'SDK dopo il caricamento. |
int |
LOAD_SDK_SDK_SANDBOX_DISABLED
La sandbox dell'SDK è disabilitata. |
int |
REQUEST_SURFACE_PACKAGE_INTERNAL_ERROR
Errore interno durante la richiesta di un |
int |
REQUEST_SURFACE_PACKAGE_SDK_NOT_LOADED
L'SDK non viene caricato durante la richiesta di un |
int |
SDK_SANDBOX_PROCESS_NOT_AVAILABLE
Il processo sandbox SDK non è disponibile. |
String |
SDK_SANDBOX_SERVICE
Usalo con |
int |
SDK_SANDBOX_STATE_DISABLED
La sandbox dell'SDK è disabilitata. |
int |
SDK_SANDBOX_STATE_ENABLED_PROCESS_ISOLATION
La sandbox dell'SDK è abilitata. |
Metodi pubblici | |
---|---|
void
|
addSdkSandboxProcessDeathCallback(Executor callbackExecutor, SdkSandboxManager.SdkSandboxProcessDeathCallback callback)
Aggiunge un callback che viene registrato per gli eventi del ciclo di vita della sandbox SDK, ad esempio SDK sandbox la morte. |
void
|
addSyncedSharedPreferencesKeys(Set<String> keys)
Aggiunge chiavi al set di chiavi sincronizzate dal valore predefinito dell'app |
List<AppOwnedSdkSandboxInterface>
|
getAppOwnedSdkSandboxInterfaces()
Recupera un elenco di |
List<SandboxedSdk>
|
getSandboxedSdks()
Recupera le informazioni sugli SDK caricati nella sandbox. |
static
int
|
getSdkSandboxState()
Restituisce lo stato attuale della disponibilità della funzionalità sandbox dell'SDK. |
Set<String>
|
getSyncedSharedPreferencesKeys()
Restituisce le chiavi impostate che vengono sincronizzate dal valore predefinito dell'app |
void
|
loadSdk(String sdkName, Bundle params, Executor executor, OutcomeReceiver<SandboxedSdk, LoadSdkException> receiver)
Carica l'SDK in un processo Java della sandbox dell'SDK. |
void
|
registerAppOwnedSdkSandboxInterface(AppOwnedSdkSandboxInterface appOwnedSdkSandboxInterface)
Registra |
void
|
removeSdkSandboxProcessDeathCallback(SdkSandboxManager.SdkSandboxProcessDeathCallback callback)
Rimuove un valore |
void
|
removeSyncedSharedPreferencesKeys(Set<String> keys)
Rimuove le chiavi dal set di chiavi aggiunte utilizzando Le chiavi rimosse verranno cancellate dalla sandbox dell'SDK se sono già state sincronizzate. |
void
|
requestSurfacePackage(String sdkName, Bundle params, Executor callbackExecutor, OutcomeReceiver<Bundle, RequestSurfacePackageException> receiver)
Invia una richiesta per un pacchetto Surface all'SDK. |
void
|
startSdkSandboxActivity(Activity fromActivity, IBinder sdkActivityToken)
Avvia un |
void
|
unloadSdk(String sdkName)
Scarica un SDK che è stato caricato in precedenza dal chiamante. |
void
|
unregisterAppOwnedSdkSandboxInterface(String name)
Annulla la registrazione di |
Metodi ereditati | |
---|---|
Costanti
EXTRA_DISPLAY_ID
public static final String EXTRA_DISPLAY_ID
Il nome della chiave da utilizzare nei campi Bundle di requestSurfacePackage(java.lang.String, android.os.Bundle, java.util.concurrent.Executor, android.os.OutcomeReceiver)
; il suo valore deve definire l'ID intero della chiave
per visualizzare SurfacePackage
.
Valore costante: "android.app.sdksandbox.extra.DISPLAY_ID"
EXTRA_HEIGHT_IN_PIXELS
public static final String EXTRA_HEIGHT_IN_PIXELS
Il nome della chiave da utilizzare nei campi Bundle di requestSurfacePackage(java.lang.String, android.os.Bundle, java.util.concurrent.Executor, android.os.OutcomeReceiver)
; il suo valore deve definire l'altezza intera della SurfacePackage
in pixel.
Valore costante: "android.app.sdksandbox.extra.HEIGHT_IN_PIXELS"
HOST_TOKEN extra
public static final String EXTRA_HOST_TOKEN
Il nome della chiave da utilizzare nei campi Bundle di requestSurfacePackage(java.lang.String, android.os.Bundle, java.util.concurrent.Executor, android.os.OutcomeReceiver)
. Il suo valore deve presentare il token restituito da SurfaceView.getHostToken()
una volta che il SurfaceView
è stato
aggiunto alla gerarchia delle visualizzazioni. Per attivare i report ANR è accettato solo un valore diverso da null.
Valore costante: "android.app.sdksandbox.extra.HOST_TOKEN"
PACCHETTO_EXTRA_SURFACE_PACKAGE
public static final String EXTRA_SURFACE_PACKAGE
Il nome della chiave nel bundle che viene passata alla funzione onResult
dell'elemento OutcomeReceiver
, che è un campo di requestSurfacePackage(java.lang.String, android.os.Bundle, java.util.concurrent.Executor, android.os.OutcomeReceiver)
. Il suo valore presenta il SurfacePackage
richiesto.
Valore costante: "android.app.sdksandbox.extra.SURFACE_PACKAGE"
EXTRA_WIDTH_IN_PIXELS
public static final String EXTRA_WIDTH_IN_PIXELS
Il nome della chiave da utilizzare nei campi Bundle di requestSurfacePackage(java.lang.String, android.os.Bundle, java.util.concurrent.Executor, android.os.OutcomeReceiver)
; il suo valore deve definire la larghezza intera di SurfacePackage
in pixel.
Valore costante: "android.app.sdksandbox.extra.WIDTH_IN_PIXELS"
LOAD_SDK_ALREADY_LOADED
public static final int LOAD_SDK_ALREADY_LOADED
L'SDK è già caricato.
Questo indica che l'applicazione client ha tentato di ricaricare lo stesso SDK chiamando loadSdk(java.lang.String, android.os.Bundle, java.util.concurrent.Executor, android.os.OutcomeReceiver)
dopo essere stato
caricato correttamente.
Valore costante: Guida introduttiva (0x00000065)
LOAD_SDK_INTERNAL_ERROR
public static final int LOAD_SDK_INTERNAL_ERROR
Errore interno durante il caricamento dell'SDK.
Questo indica un errore interno generico durante l'applicazione della chiamata dal client un'applicazione.
Valore costante: 500 (0x000001f4)
LOAD_SDK_NOT_FOUND
public static final int LOAD_SDK_NOT_FOUND
SDK non trovato.
Questo indica che l'applicazione client ha tentato di caricare un SDK non esistente chiamando loadSdk(java.lang.String, android.os.Bundle, java.util.concurrent.Executor, android.os.OutcomeReceiver)
.
Valore costante: 100 (0x00000064)
LOAD_SDK_SDK_DEFINED_ERROR
public static final int LOAD_SDK_SDK_DEFINED_ERROR
Errore dell'SDK dopo il caricamento.
Questo indica che l'SDK ha riscontrato un errore durante l'inizializzazione post-caricamento. La
puoi ricavarne i dettagli dal bundle restituito in LoadSdkException
tramite
OutcomeReceiver
passato a SdkSandboxManager#loadSdk
.
Valore costante: 102 (0x00000066)
LOAD_SDK_SDK_SANDBOX_DISABLED
public static final int LOAD_SDK_SDK_SANDBOX_DISABLED
La sandbox dell'SDK è disabilitata.
Questo indica che la sandbox dell'SDK è disabilitata. Eventuali tentativi successivi di caricare gli SDK anche questo avvio non andrà a buon fine.
Valore costante: 103 (0x00000067)
REQUEST_SURFACE_PACKAGE_ERRORE_INTERNO
public static final int REQUEST_SURFACE_PACKAGE_INTERNAL_ERROR
Errore interno durante la richiesta di un SurfacePackage
.
Questo indica un errore interno generico durante la richiesta di
SurfacePackage
.
Valore costante: 700 (0x000002bc)
REQUEST_SURFACE_PACKAGE_SDK_NOT_LOADED
public static final int REQUEST_SURFACE_PACKAGE_SDK_NOT_LOADED
L'SDK non viene caricato durante la richiesta di un SurfacePackage
.
Questo indica che l'SDK per cui viene richiesto l'oggetto SurfacePackage
non è
caricato, perché la sandbox è terminata o non è stata caricata.
Valore costante: 701 (0x000002bd)
SDK_SANDBOX_PROCESS_NOT_AVAILABLE
public static final int SDK_SANDBOX_PROCESS_NOT_AVAILABLE
Il processo sandbox SDK non è disponibile.
Questo indica che il processo sandbox SDK non è disponibile perché è terminato. è disconnesso o non è stato creato.
Valore costante: 503 (0x000001f7)
SDK_SANDBOX_SERVICE
public static final String SDK_SANDBOX_SERVICE
Usalo con Context#getSystemService(String)
per recuperare un SdkSandboxManager
per interagire con gli SDK appartenenti a questa applicazione client.
Valore costante: "sdk_sandbox"
SDK_SANDBOX_STATE_DISABLED
public static final int SDK_SANDBOX_STATE_DISABLED
La sandbox dell'SDK è disabilitata.
SdkSandboxManager
API sono nascoste. I tentativi di chiamare la persona comporteranno UnsupportedOperationException
.
Valore costante: 0 (0x00000000)
SDK_SANDBOX_STATE_ENABLED_PROCESS_ISOLATION
public static final int SDK_SANDBOX_STATE_ENABLED_PROCESS_ISOLATION
La sandbox dell'SDK è abilitata.
L'app può utilizzare le API SdkSandboxManager
per caricare SDKs
da cui dipende
il processo sandbox SDK corrispondente.
Valore costante: 2 (0x00000002)
Metodi pubblici
addSdkSandboxProcessDeathCallback
public void addSdkSandboxProcessDeathCallback (Executor callbackExecutor, SdkSandboxManager.SdkSandboxProcessDeathCallback callback)
Aggiunge un callback che viene registrato per gli eventi del ciclo di vita della sandbox SDK, ad esempio SDK sandbox la morte. Se la sandbox non è stata ancora creata quando viene chiamato, la richiesta verrà archiviati fino alla creazione di una sandbox, dopodiché viene attivata per quella sandbox. Più di uno è possibile aggiungere callback per rilevare la morte e non verranno rimossi quando la sandbox muore.
Parametri | |
---|---|
callbackExecutor |
Executor : il Executor su cui richiamare il callback
Questo valore non può essere null .
Gli eventi di callback e listener vengono inviati tramite questo
Executor , che consente di controllare facilmente quale thread
in uso. Per inviare eventi tramite il thread principale del tuo
puoi utilizzare
Context.getMainExecutor() .
In caso contrario, specifica un valore Executor che effettui l'invio a un thread appropriato. |
callback |
SdkSandboxManager.SdkSandboxProcessDeathCallback : il SdkSandboxProcessDeathCallback che riceverà la sandbox dell'SDK
degli eventi del ciclo di vita.
Questo valore non può essere null . |
addSyncedSharedPreferencesKey
public void addSyncedSharedPreferencesKeys (Set<String> keys)
Aggiunge chiavi al set di chiavi sincronizzate dal valore predefinito dell'app SharedPreferences
all'SDK
sandbox.
I dati sincronizzati saranno disponibili per la lettura da parte degli SDK tramite l'API SdkSandboxController.getClientSharedPreferences()
.
Per interrompere la sincronizzazione di qualsiasi chiave aggiunta tramite questa API, utilizza removeSyncedSharedPreferencesKeys(java.util.Set)
.
La sincronizzazione si interrompe se l'app si riavvia e l'utente deve chiamare di nuovo questa API per ricreare il pool di chiavi per la sincronizzazione.
Nota: questa classe non supporta l'utilizzo in più processi.
Parametri | |
---|---|
keys |
Set : insieme di chiavi che verranno sincronizzate con la sandbox.
Questo valore non può essere null . |
Interfacce getAppOwnedSdkSandbox
public List<AppOwnedSdkSandboxInterface> getAppOwnedSdkSandboxInterfaces ()
Recupera un elenco di AppOwnedSdkSandboxInterface
registrati per un'app
Ritorni | |
---|---|
List<AppOwnedSdkSandboxInterface> |
elenco vuoto se callInfo non viene trovato nella mappa, altrimenti un elenco di AppOwnedSdkSandboxInterface
Questo valore non può essere null . |
getSandboxedSdks
public List<SandboxedSdk> getSandboxedSdks ()
Recupera le informazioni sugli SDK caricati nella sandbox.
Ritorni | |
---|---|
List<SandboxedSdk> |
Elenco di SandboxedSdk contenente tutti gli SDK attualmente caricati.
Questo valore non può essere null . |
getSdkSandboxState
public static int getSdkSandboxState ()
Restituisce lo stato attuale della disponibilità della funzionalità sandbox dell'SDK.
Ritorni | |
---|---|
int |
Il valore è SDK_SANDBOX_STATE_DISABLED o SDK_SANDBOX_STATE_ENABLED_PROCESS_ISOLATION |
getSyncedSharedPreferencesKey
public Set<String> getSyncedSharedPreferencesKeys ()
Restituisce le chiavi impostate che vengono sincronizzate dal valore predefinito dell'app SharedPreferences
a
la sandbox dell'SDK.
Ritorni | |
---|---|
Set<String> |
Questo valore non può essere null . |
caricamentoSdk
public void loadSdk (String sdkName, Bundle params, Executor executor, OutcomeReceiver<SandboxedSdk, LoadSdkException> receiver)
Carica l'SDK in un processo Java della sandbox dell'SDK.
Carica la libreria SDK con sdkName
in un processo sandbox SDK in modo asincrono. La
il chiamante riceverà una notifica tramite il receiver
.
Il chiamante dovrebbe già dichiarare SDKs
da cui dipende il proprio file manifest utilizzando il tag <uses-sdk-library>
. Il chiamante può caricare nell'SDK solo SDKs
da cui dipende
sandbox.
Quando l'applicazione client carica il primo SDK, viene eseguito un nuovo processo sandbox SDK è stato creato. Se è già stata creata una sandbox per l'applicazione client, gli SDK aggiuntivi verrà caricato nella stessa sandbox.
Questa API può essere chiamata solo quando il chiamante è in esecuzione in primo piano. Chiamate da
uno sfondo comporterà la restituzione di LoadSdkException
in receiver
.
Parametri | |
---|---|
sdkName |
String : nome dell'SDK da caricare.
Questo valore non può essere null . |
params |
Bundle : parametri aggiuntivi da passare all'SDK sotto forma di Bundle .
come concordato tra il client e l'SDK.
Questo valore non può essere null . |
executor |
Executor : il Executor su cui richiamare il ricevitore.
Questo valore non può essere null .
Gli eventi di callback e listener vengono inviati tramite questo
Executor , che consente di controllare facilmente quale thread
in uso. Per inviare eventi tramite il thread principale del tuo
puoi utilizzare
Context.getMainExecutor() .
In caso contrario, specifica un valore Executor che effettui l'invio a un thread appropriato. |
receiver |
OutcomeReceiver : questo riceve un SandboxedSdk in un'esecuzione corretta, oppure LoadSdkException .
Questo valore non può essere null . |
Interfaccia registriAppProprietàSdkSandbox
public void registerAppOwnedSdkSandboxInterface (AppOwnedSdkSandboxInterface appOwnedSdkSandboxInterface)
Registra AppOwnedSdkSandboxInterface
per un processo di app.
Registrazione di un AppOwnedSdkSandboxInterface
che ha lo stesso nome di una precedente
nell'interfaccia registrata produrrà IllegalStateException
.
AppOwnedSdkSandboxInterface#getName()
indica il nome dell'interfaccia.
Parametri | |
---|---|
appOwnedSdkSandboxInterface |
AppOwnedSdkSandboxInterface : l'AppOwnedSdkSandboxInterface da registrare
Questo valore non può essere null . |
rimuovereSdkSandboxProcessDeathCallback
public void removeSdkSandboxProcessDeathCallback (SdkSandboxManager.SdkSandboxProcessDeathCallback callback)
Rimuove un valore SdkSandboxProcessDeathCallback
aggiunto in precedenza utilizzando addSdkSandboxProcessDeathCallback(java.util.concurrent.Executor, android.app.sdksandbox.SdkSandboxManager.SdkSandboxProcessDeathCallback)
Parametri | |
---|---|
callback |
SdkSandboxManager.SdkSandboxProcessDeathCallback : il valore SdkSandboxProcessDeathCallback precedentemente aggiunto utilizzando
SdkSandboxManager#addSdkSandboxProcessDeathCallback(Executor,
SdkSandboxProcessDeathCallback)
Questo valore non può essere null . |
removeSyncedSharedPreferencesKey
public void removeSyncedSharedPreferencesKeys (Set<String> keys)
Rimuove le chiavi dal set di chiavi aggiunte utilizzando addSyncedSharedPreferencesKeys(java.util.Set)
Le chiavi rimosse verranno cancellate dalla sandbox dell'SDK se sono già state sincronizzate.
Parametri | |
---|---|
keys |
Set : insieme di nomi delle chiavi che non devono più essere sincronizzati con Sandbox.
Questo valore non può essere null . |
requestSurfacePackage
public void requestSurfacePackage (String sdkName, Bundle params, Executor callbackExecutor, OutcomeReceiver<Bundle, RequestSurfacePackageException> receiver)
Invia una richiesta per un pacchetto Surface all'SDK.
Dopo che l'applicazione client ha ricevuto un segnale relativo al corretto caricamento dell'SDK e
aggiunto SurfaceView
alla gerarchia delle visualizzazioni, potrebbe richiedere in modo asincrono
un SurfacePackage
per eseguire il rendering di una vista dall'SDK.
Quando SurfacePackage
è pronto, viene eseguito il callback OutcomeReceiver#onResult
di
verrà richiamato il metodo receiver
passato. Questo callback conterrà un Bundle
che conterrà la chiave SdkSandboxManager#EXTRA_SURFACE_PACKAGE
la cui
è il SurfacePackage
richiesto.
L'elemento params
trasmesso deve contenere le seguenti chiavi: EXTRA_WIDTH_IN_PIXELS
, SdkSandboxManager#EXTRA_HEIGHT_IN_PIXELS
,
SdkSandboxManager#EXTRA_DISPLAY_ID
e SdkSandboxManager#EXTRA_HOST_TOKEN
. Se
una di queste chiavi risulta mancante o non valida, verrà generato un errore IllegalArgumentException
.
Questa API può essere chiamata solo quando il chiamante è in esecuzione in primo piano. Chiamate da
background causerà la restituzione di RequestSurfacePackageException in receiver
.
Parametri | |
---|---|
sdkName |
String : nome dell'SDK caricato nella sandbox dell'SDK.
Questo valore non può essere null . |
params |
Bundle : i parametri trasmessi dall'applicazione client all'SDK.
Questo valore non può essere null . |
callbackExecutor |
Executor : il Executor su cui richiamare il callback
Questo valore non può essere null .
Gli eventi di callback e listener vengono inviati tramite questo
Executor , che consente di controllare facilmente quale thread
in uso. Per inviare eventi tramite il thread principale del tuo
puoi utilizzare
Context.getMainExecutor() .
In caso contrario, specifica un valore Executor che effettui l'invio a un thread appropriato. |
receiver |
OutcomeReceiver : restituisce un Bundle all'esito positivo che conterrà la chiave
SdkSandboxManager#EXTRA_SURFACE_PACKAGE con un valore SurfacePackage , oppure
RequestSurfacePackageException in caso di errore.
Questo valore non può essere null . |
Lanci | |
---|---|
IllegalArgumentException |
se params non contiene tutte le chiavi richieste. |
startSdkSandboxActivity
public void startSdkSandboxActivity (Activity fromActivity, IBinder sdkActivityToken)
Avvia un Activity
nella sandbox dell'SDK.
Questa funzione avvierà una nuova Activity
nella stessa attività della fromActivity
passata e la trasmetterà all'SDK che ha condiviso il sdkActivityToken
passato che
identifica una richiesta proveniente da quell'SDK per stabilire questo Activity
.
Activity
non verrà avviato nei seguenti casi:
- L'app che chiama questa API è in background.
- Il valore
sdkActivityToken
trasmesso non corrisponde a una richiesta per unActivity
dall'SDK che lo ha condiviso con l'app del chiamante. - L'SDK che ha condiviso l'oggetto
sdkActivityToken
trasmesso ha rimosso la sua richiesta per questo elementoActivity
. - La sandbox
Activity
è già stata creata.
Parametri | |
---|---|
fromActivity |
Activity : il Activity verrà utilizzato per avviare la nuova sandbox Activity chiamando Activity#startActivity(Intent) .
Questo valore non può essere null . |
sdkActivityToken |
IBinder : l'identificatore condiviso dall'SDK che richiede Activity .
Questo valore non può essere null . |
unloadSdk
public void unloadSdk (String sdkName)
Scarica un SDK che è stato caricato in precedenza dal chiamante.
Non è garantito che la memoria allocata per questo SDK venga liberata immediatamente. Tutti
chiamate successive a requestSurfacePackage(java.lang.String, android.os.Bundle, java.util.concurrent.Executor, android.os.OutcomeReceiver)
per il sdkName
specificato non riuscirà.
Questa API può essere chiamata solo quando il chiamante è in esecuzione in primo piano. Chiamate da
uno sfondo,
verrà generato SecurityException
.
Parametri | |
---|---|
sdkName |
String : nome dell'SDK da scaricare.
Questo valore non può essere null . |
unregistraAppProprietàSdkSandboxInterface
public void unregisterAppOwnedSdkSandboxInterface (String name)
Annulla la registrazione di ERROR(/AppOwnedSdkSandboxInterfaces)
per un processo di app.
Parametri | |
---|---|
name |
String : il nome con cui è stato registrato AppOwnedSdkSandboxInterface.
Questo valore non può essere null . |