Gestore sandbox Sdk
public
final
class
SdkSandboxManager
extends Object
java.lang.Object | |
↳ | android.app.sdksandbox.SdkSandboxManager |
Fornisce le API per caricare SDKs
nel processo
sandbox dell'SDK e quindi interagirvi.
La sandbox dell'SDK è un processo Java in esecuzione in un intervallo UID separato. Ogni app può avere il proprio processo sandbox dell'SDK.
L'app deve prima dichiarare gli SDK da cui dipende nel file manifest utilizzando il tag <uses-sdk-library>
. Le app possono caricare nella sandbox dell'SDK solo gli SDK da cui dipendono.
Riepilogo
Classi nidificate | |
---|---|
interface |
SdkSandboxManager.SdkSandboxProcessDeathCallback
Un callback per il monitoraggio degli eventi di interruzione della sandbox dell'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 passato 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à stato 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 SDK dopo il caricamento. |
int |
LOAD_SDK_SDK_SANDBOX_DISABLED
La sandbox dell'SDK è disattivata. |
int |
REQUEST_SURFACE_PACKAGE_INTERNAL_ERROR
Errore interno durante la richiesta di |
int |
REQUEST_SURFACE_PACKAGE_SDK_NOT_LOADED
L'SDK non è stato caricato durante la richiesta di un |
int |
SDK_SANDBOX_PROCESS_NOT_AVAILABLE
La procedura sandbox dell'SDK non è disponibile. |
String |
SDK_SANDBOX_SERVICE
Da utilizzare con |
int |
SDK_SANDBOX_STATE_DISABLED
La sandbox dell'SDK è disattivata. |
int |
SDK_SANDBOX_STATE_ENABLED_PROCESS_ISOLATION
La sandbox dell'SDK è attivata. |
Metodi pubblici | |
---|---|
void
|
addSdkSandboxProcessDeathCallback(Executor callbackExecutor, SdkSandboxManager.SdkSandboxProcessDeathCallback callback)
Aggiunge un callback che viene registrato per gli eventi del ciclo di vita della sandbox dell'SDK, come l'interruzione della sandbox dell'SDK. |
void
|
addSyncedSharedPreferencesKeys(Set<String> keys)
Aggiunge chiavi al set di chiavi in fase di sincronizzazione dal |
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 elemento |
void
|
removeSyncedSharedPreferencesKeys(Set<String> keys)
Rimuove le chiavi dal gruppo 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 di pacchetto della piattaforma all'SDK. |
void
|
startSdkSandboxActivity(Activity fromActivity, IBinder sdkActivityToken)
Avvia un'istanza |
void
|
unloadSdk(String sdkName)
Consente di annullare il caricamento di un SDK caricato in precedenza dal chiamante. |
void
|
unregisterAppOwnedSdkSandboxInterface(String name)
Consente di annullare la registrazione di |
Metodi ereditati | |
---|---|
Costanti
ID_DISPLAY_EXTRA
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 numero intero della visualizzazione logica 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 di SurfacePackage
in pixel.
Valore costante: "android.app.sdksandbox.extra.HEIGHT_IN_PIXELS"
EXTRA_HOST_TOKEN
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 dovrebbe presentare il token restituito da SurfaceView.getHostToken()
una volta che SurfaceView
è stato aggiunto alla gerarchia delle visualizzazioni. Per attivare i report ANR è accettato solo un valore non null.
Valore costante: "android.app.sdksandbox.extra.HOST_TOKEN"
PACCHETTO_EXTRA_SURFACE
public static final String EXTRA_SURFACE_PACKAGE
Il nome della chiave nel bundle che viene passato alla funzione onResult
di OutcomeReceiver
, che è il campo requestSurfacePackage(java.lang.String, android.os.Bundle, java.util.concurrent.Executor, android.os.OutcomeReceiver)
, il cui valore presenta il valore 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à stato 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: 101 (0x00000065)
LOAD_SDK_INTERNAL_ERROR
public static final int LOAD_SDK_INTERNAL_ERROR
Errore interno durante il caricamento dell'SDK.
Indica che si è verificato un errore interno generico durante l'applicazione della chiamata dall'applicazione client.
Valore costante: 500 (0x000001f4)
CARICA_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 SDK dopo il caricamento.
Questo indica che l'SDK ha riscontrato un errore durante l'inizializzazione post-caricamento. I
dettagli possono essere ottenuti dal bundle restituito in LoadSdkException
tramite
il codice OutcomeReceiver
trasmesso a SdkSandboxManager#loadSdk
.
Valore costante: 102 (0x00000066)
LOAD_SDK_SDK_SANDBOX_DISABILITATO
public static final int LOAD_SDK_SDK_SANDBOX_DISABLED
La sandbox dell'SDK è disattivata.
Questo indica che la sandbox dell'SDK è disattivata. Anche eventuali tentativi successivi di caricare SDK in questo avvio non andranno a buon fine.
Valore costante: 103 (0x00000067)
REQUEST_SURFACE_PACKAGE_INTERNAL_ERROR
public static final int REQUEST_SURFACE_PACKAGE_INTERNAL_ERROR
Errore interno durante la richiesta di SurfacePackage
.
Indica che si è verificato 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 è stato caricato durante la richiesta di un SurfacePackage
.
Ciò indica che l'SDK per il quale viene richiesta l'API SurfacePackage
non è stato caricato, perché la sandbox non è più disponibile o perché non è stato caricato inizialmente.
Valore costante: 701 (0x000002bd)
SDK_SANDBOX_PROCESS_NOT_AVAILABLE
public static final int SDK_SANDBOX_PROCESS_NOT_AVAILABLE
La procedura sandbox dell'SDK non è disponibile.
Ciò indica che il processo sandbox dell'SDK non è disponibile, perché è terminato, è disconnesso o non è stato creato inizialmente.
Valore costante: 503 (0x000001f7)
SDK_SANDBOX_SERVICE
public static final String SDK_SANDBOX_SERVICE
Da utilizzare 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 è disattivata.
SdkSandboxManager
API sono nascoste. Tentativi di chiamata daranno luogo a 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 è attivata.
L'app può utilizzare le API SdkSandboxManager
per caricare l'elemento SDKs
in base al processo corrispondente nel
processo sandbox dell'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 dell'SDK, come l'interruzione della sandbox dell'SDK. Se la sandbox non è stata ancora creata quando viene richiamata, la richiesta viene archiviata fino alla creazione di una sandbox, dopodiché viene attivata per quella sandbox. È possibile aggiungere più callback per rilevare la morte e non verranno rimossi quando la sandbox si esaurisce.
Parametri | |
---|---|
callbackExecutor |
Executor : il valore Executor sul quale richiamare il callback
Questo valore non può essere null .
Gli eventi di callback e di listener vengono inviati tramite questo
Executor , offrendo un modo semplice per controllare quale thread viene
utilizzato. Per inviare eventi tramite il thread principale della tua
applicazione, puoi utilizzare
Context.getMainExecutor() .
In caso contrario, specifica un Executor che verrà inviato al thread appropriato. |
callback |
SdkSandboxManager.SdkSandboxProcessDeathCallback : SdkSandboxProcessDeathCallback che riceverà gli eventi del ciclo di vita della sandbox dell'SDK.
Questo valore non può essere null . |
addSyncedSharedPreferencesKeys
public void addSyncedSharedPreferencesKeys (Set<String> keys)
Aggiunge chiavi al set di chiavi in fase di sincronizzazione dal SharedPreferences
predefinito dell'app alla sandbox dell'SDK.
I dati sincronizzati saranno disponibili per gli SDK per la lettura utilizzando l'API SdkSandboxController.getClientSharedPreferences()
.
Per interrompere la sincronizzazione di qualsiasi chiave aggiunta utilizzando questa API, utilizza removeSyncedSharedPreferencesKeys(java.util.Set)
.
La sincronizzazione si interrompe se l'app si riavvia e l'utente deve richiamare nuovamente l'API per ricreare il pool di chiavi per la sincronizzazione.
Nota: questo corso non supporta l'utilizzo in più processi.
Parametri | |
---|---|
keys |
Set : set di chiavi che verrà sincronizzato con la sandbox.
Questo valore non può essere null . |
getAppOwnedSdkSandboxInterfaces
public List<AppOwnedSdkSandboxInterface> getAppOwnedSdkSandboxInterfaces ()
Recupera un elenco di AppOwnedSdkSandboxInterface
registrati per un'app
Ritorni | |
---|---|
List<AppOwnedSdkSandboxInterface> |
elenco vuoto se parlando di Info non 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 |
getSyncedSharedPreferencesKeys
public Set<String> getSyncedSharedPreferencesKeys ()
Restituisce le chiavi impostate che vengono sincronizzate dal valore predefinito dell'app SharedPreferences
alla sandbox dell'SDK.
Ritorni | |
---|---|
Set<String> |
Questo valore non può essere null . |
LoadSdk
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 dell'SDK in modo asincrono. Il chiamante riceverà una notifica tramite receiver
.
Il chiamante dovrebbe già dichiarare SDKs
da cui dipende nel manifest utilizzando il tag <uses-sdk-library>
. Il chiamante può caricare solo SDKs
a seconda di quale elemento dipende nella sandbox dell'SDK.
Quando l'applicazione client carica il primo SDK, viene creato un nuovo processo sandbox dell'SDK. Se è già stata creata una sandbox per l'applicazione client, nella stessa sandbox verranno caricati SDK aggiuntivi.
Questa API può essere chiamata solo mentre il chiamante è in esecuzione in primo piano. Le chiamate in background restituiranno LoadSdkException
in receiver
.
Parametri | |
---|---|
sdkName |
String : nome dell'SDK da caricare.
Questo valore non può essere null . |
params |
Bundle : parametri aggiuntivi da trasmettere all'SDK sotto forma di Bundle , come concordato tra il client e l'SDK.
Questo valore non può essere null . |
executor |
Executor : l'elemento Executor su cui richiamare il destinatario.
Questo valore non può essere null .
Gli eventi di callback e di listener vengono inviati tramite questo
Executor , offrendo un modo semplice per controllare quale thread viene
utilizzato. Per inviare eventi tramite il thread principale della tua
applicazione, puoi utilizzare
Context.getMainExecutor() .
In caso contrario, specifica un Executor che verrà inviato al thread appropriato. |
receiver |
OutcomeReceiver : riceve un SandboxedSdk se l'esecuzione è andata a buon fine oppure LoadSdkException .
Questo valore non può essere null . |
registryAppProprietàSdkSandboxInterface
public void registerAppOwnedSdkSandboxInterface (AppOwnedSdkSandboxInterface appOwnedSdkSandboxInterface)
Registra AppOwnedSdkSandboxInterface
per un processo dell'app.
La registrazione di un AppOwnedSdkSandboxInterface
con lo stesso nome di un'interfaccia registrata in precedenza genererà IllegalStateException
.
AppOwnedSdkSandboxInterface#getName()
si riferisce al nome dell'interfaccia.
Parametri | |
---|---|
appOwnedSdkSandboxInterface |
AppOwnedSdkSandboxInterface : l'AppOwnedSdkSandboxInterface da registrare
Questo valore non può essere null . |
removeSdkSandboxProcessDeathCallback
public void removeSdkSandboxProcessDeathCallback (SdkSandboxManager.SdkSandboxProcessDeathCallback callback)
Rimuove un elemento SdkSandboxProcessDeathCallback
precedentemente aggiunto tramite addSdkSandboxProcessDeathCallback(java.util.concurrent.Executor, android.app.sdksandbox.SdkSandboxManager.SdkSandboxProcessDeathCallback)
Parametri | |
---|---|
callback |
SdkSandboxManager.SdkSandboxProcessDeathCallback : SdkSandboxProcessDeathCallback che è stato aggiunto in precedenza utilizzando SdkSandboxManager#addSdkSandboxProcessDeathCallback(Executor,
SdkSandboxProcessDeathCallback) . Questo valore non può essere null . |
removeSyncedSharedPreferencesKeys
public void removeSyncedSharedPreferencesKeys (Set<String> keys)
Rimuove le chiavi dal gruppo 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 la sandbox.
Questo valore non può essere null . |
requestSurfacePackage
public void requestSurfacePackage (String sdkName, Bundle params, Executor callbackExecutor, OutcomeReceiver<Bundle, RequestSurfacePackageException> receiver)
Invia una richiesta di pacchetto della piattaforma all'SDK.
Dopo che l'applicazione client ha ricevuto un indicatore relativo al caricamento dell'SDK riuscito e ha aggiunto un SurfaceView
alla gerarchia delle visualizzazioni, potrebbe richiedere in modo asincrono un SurfacePackage
per eseguire il rendering di una vista dall'SDK.
Quando SurfacePackage
è pronto, verrà richiamato il callback OutcomeReceiver#onResult
del
receiver
passato. Questo callback conterrà un oggetto Bundle
, che conterrà la chiave SdkSandboxManager#EXTRA_SURFACE_PACKAGE
il cui valore associato è il SurfacePackage
richiesto.
Il valore params
passato 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 non è presente o non è valida, verrà generato un valore IllegalArgumentException
.
Questa API può essere chiamata solo mentre il chiamante è in esecuzione in primo piano. Le chiamate in background restituiranno RequestSurfacePackageException in receiver
.
Parametri | |
---|---|
sdkName |
String : nome dell'SDK caricato nella sandbox dell'SDK.
Questo valore non può essere null . |
params |
Bundle : i parametri che l'applicazione client passa all'SDK.
Questo valore non può essere null . |
callbackExecutor |
Executor : il valore Executor sul quale richiamare il callback
Questo valore non può essere null .
Gli eventi di callback e di listener vengono inviati tramite questo
Executor , offrendo un modo semplice per controllare quale thread viene
utilizzato. Per inviare eventi tramite il thread principale della tua
applicazione, puoi utilizzare
Context.getMainExecutor() .
In caso contrario, specifica un Executor che verrà inviato al thread appropriato. |
receiver |
OutcomeReceiver : in caso di esito positivo, viene restituito un valore Bundle che conterrà la chiave
SdkSandboxManager#EXTRA_SURFACE_PACKAGE con un valore SurfacePackage o
RequestSurfacePackageException in caso di errore.
Questo valore non può essere null . |
Tiri | |
---|---|
IllegalArgumentException |
se params non contiene tutte le chiavi richieste. |
attivitàstartSdkSandbox
public void startSdkSandboxActivity (Activity fromActivity, IBinder sdkActivityToken)
Avvia un'istanza Activity
nella sandbox dell'SDK.
Questa funzione avvierà un nuovo Activity
nella stessa attività del fromActivity
passato e lo trasmetterà all'SDK che ha condiviso il sdkActivityToken
passato che
identifica una richiesta di tale SDK per ottenere questo Activity
.
Activity
non verrà avviato nei seguenti casi:
- L'app che chiama questa API è in background.
- Il valore
sdkActivityToken
passato non è mappato a una richiesta di unActivity
dall'SDK che lo ha condiviso con l'app chiamante. - L'SDK che ha condiviso l'elemento
sdkActivityToken
passato ha rimosso la sua richiesta per questoActivity
. - La sandbox
Activity
è già stata creata.
Parametri | |
---|---|
fromActivity |
Activity : 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 l'oggetto Activity .
Questo valore non può essere null . |
unloadSdk
public void unloadSdk (String sdkName)
Consente di annullare il caricamento di un SDK caricato in precedenza dal chiamante.
Non è garantito che la memoria allocata per questo SDK verrà liberata immediatamente. Tutte
le chiamate successive a requestSurfacePackage(java.lang.String, android.os.Bundle, java.util.concurrent.Executor, android.os.OutcomeReceiver)
per il sdkName
specificato non andranno a buon fine.
Questa API può essere chiamata solo mentre il chiamante è in esecuzione in primo piano. Le chiamate in background generano un SecurityException
.
Parametri | |
---|---|
sdkName |
String : nome dell'SDK da scaricare.
Questo valore non può essere null . |
unregisterAppOwnedSdkSandboxInterface
public void unregisterAppOwnedSdkSandboxInterface (String name)
Consente di annullare la registrazione di ERROR(/AppOwnedSdkSandboxInterfaces)
per il processo di un'app.
Parametri | |
---|---|
name |
String : il nome con cui è stata registrata la proprietà AppOwnedSdkSandboxInterface.
Questo valore non può essere null . |