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

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.

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.

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.

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.

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 SurfacePackage.

int REQUEST_SURFACE_PACKAGE_SDK_NOT_LOADED

L'SDK non viene caricato durante la richiesta di un SurfacePackage.

int SDK_SANDBOX_PROCESS_NOT_AVAILABLE

Il processo sandbox SDK non è disponibile.

String SDK_SANDBOX_SERVICE

Usalo con Context#getSystemService(String) per recuperare un SdkSandboxManager per interagire con gli SDK appartenenti a questa applicazione client.

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 SharedPreferences all'SDK sandbox.

List<AppOwnedSdkSandboxInterface> getAppOwnedSdkSandboxInterfaces()

Recupera un elenco di AppOwnedSdkSandboxInterface registrati per un'app

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 SharedPreferences a la sandbox dell'SDK.

void loadSdk(String sdkName, Bundle params, Executor executor, OutcomeReceiver<SandboxedSdkLoadSdkException> receiver)

Carica l'SDK in un processo Java della sandbox dell'SDK.

void registerAppOwnedSdkSandboxInterface(AppOwnedSdkSandboxInterface appOwnedSdkSandboxInterface)

Registra AppOwnedSdkSandboxInterface per un processo di app.

void removeSdkSandboxProcessDeathCallback(SdkSandboxManager.SdkSandboxProcessDeathCallback callback)

Rimuove un valore SdkSandboxProcessDeathCallback aggiunto in precedenza utilizzando addSdkSandboxProcessDeathCallback(java.util.concurrent.Executor, android.app.sdksandbox.SdkSandboxManager.SdkSandboxProcessDeathCallback)

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.

void requestSurfacePackage(String sdkName, Bundle params, Executor callbackExecutor, OutcomeReceiver<BundleRequestSurfacePackageException> receiver)

Invia una richiesta per un pacchetto Surface all'SDK.

void startSdkSandboxActivity(Activity fromActivity, IBinder sdkActivityToken)

Avvia un Activity nella sandbox dell'SDK.

void unloadSdk(String sdkName)

Scarica un SDK che è stato caricato in precedenza dal chiamante.

void unregisterAppOwnedSdkSandboxInterface(String name)

Annulla la registrazione di ERROR(/AppOwnedSdkSandboxInterfaces) per un processo di app.

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<SandboxedSdkLoadSdkException> 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<BundleRequestSurfacePackageException> 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 un Activity 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 elemento Activity.
  • 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.