SdkSandboxManager

public final class SdkSandboxManager
extends Object

java.lang.Object
   ↳ android.app.sdksandbox.SdkSandboxManager


Proporciona las API para cargar SDKs en el proceso de la zona de pruebas del SDK y, luego, interactuar con ellas.

SdkSandbox es un proceso de Java que se ejecuta en otro rango de UID. Cada app tiene su propio proceso de la zona de pruebas del SDK.

La primera app debe declarar SDKs de la que depende en su AndroidManifest.xml con la etiqueta <uses-sdk-library>. La app solo puede cargar SDKs de la que depende en SdkSandbox.

Nota: Ninguna de las API definidas en esta clase es estable, y todas están sujetas a cambios.

Resumen

Clases anidadas

interface SdkSandboxManager.LoadSdkCallback

Una devolución de llamada para realizar un seguimiento de los eventos relacionados con la carga de SDKs y la interacción con estos. 

interface SdkSandboxManager.RequestSurfacePackageCallback

Una devolución de llamada para realizar el seguimiento de una solicitud de un paquete de superficie desde un SDK. 

interface SdkSandboxManager.SendDataCallback

Una devolución de llamada para realizar un seguimiento del envío de datos a un SDK. 

Constantes

int LOAD_SDK_ALREADY_LOADED

Ya se cargó el SDK.

int LOAD_SDK_INTERNAL_ERROR

Se produjo un error interno durante la carga del SDK.

int LOAD_SDK_NOT_FOUND

No se encontró el SDK.

int REQUEST_SURFACE_PACKAGE_INTERNAL_ERROR

Se produjo un error interno cuando se solicitó SurfacePackage.

String SDK_SANDBOX_SERVICE

Úsalo con Context#getSystemService(String) a fin de recuperar SdkSandboxManager para interactuar con los SDK que pertenecen a esta aplicación cliente.

int SDK_SANDBOX_STATE_DISABLED

La zona de pruebas del SDK está inhabilitada.

int SDK_SANDBOX_STATE_ENABLED_PROCESS_ISOLATION

La zona de pruebas del SDK está habilitada.

int SEND_DATA_INTERNAL_ERROR

Se produjo un error interno cuando se realizaba SdkSandboxManager#sendData(String, Bundle, Executor, SendDataCallback).

Métodos públicos

static int getSdkSandboxState()

Muestra el estado actual de SdkSandbox.

void loadSdk(String sdkName, Bundle params, Executor callbackExecutor, SdkSandboxManager.LoadSdkCallback callback)

Carga el SDK en el proceso de Java de la zona de pruebas del SDK.

void requestSurfacePackage(String sdkName, int displayId, int width, int height, Bundle params, Executor callbackExecutor, SdkSandboxManager.RequestSurfacePackageCallback callback)

Envía al SDK una solicitud para un paquete de superficie.

void sendData(String sdkName, Bundle data, Executor callbackExecutor, SdkSandboxManager.SendDataCallback callback)

Se envía un paquete de data al SDK.

Métodos heredados

Constantes

LOAD_SDK_ALREADY_LOADED

public static final int LOAD_SDK_ALREADY_LOADED

Ya se cargó el SDK.

Esto indica que la aplicación cliente intentó volver a cargar el mismo SDK mediante una llamada a loadSdk(java.lang.String, android.os.Bundle, java.util.concurrent.Executor, android.app.sdksandbox.SdkSandboxManager.LoadSdkCallback) después de cargarse correctamente.

Valor constante: 101 (0x00000065)

LOAD_SDK_INTERNAL_ERROR

public static final int LOAD_SDK_INTERNAL_ERROR

Se produjo un error interno durante la carga del SDK.

Esto indica que se produjo un error interno genérico cuando se aplicaba la llamada desde la aplicación cliente.

Valor constante: 500 (0x000001f4)

LOAD_SDK_NOT_FOUND

public static final int LOAD_SDK_NOT_FOUND

No se encontró el SDK.

Esto indica que la aplicación cliente intentó cargar un SDK inexistente con una llamada a loadSdk(java.lang.String, android.os.Bundle, java.util.concurrent.Executor, android.app.sdksandbox.SdkSandboxManager.LoadSdkCallback).

Valor constante: 100 (0x00000064)

REQUEST_SURFACE_PACKAGE_INTERNAL_ERROR

public static final int REQUEST_SURFACE_PACKAGE_INTERNAL_ERROR

Se produjo un error interno cuando se solicitó SurfacePackage.

Esto indica que se produjo un error interno genérico cuando se solicitaba SurfacePackage.

Valor constante: 700 (0x000002bc)

SDK_SANDBOX_SERVICE

public static final String SDK_SANDBOX_SERVICE

Úsalo con Context#getSystemService(String) a fin de recuperar SdkSandboxManager para interactuar con los SDK que pertenecen a esta aplicación cliente.

Valor constante: "sdk_sandbox"

SDK_SANDBOX_STATE_DISABLED

Se agregó en el nivel de API 33.
public static final int SDK_SANDBOX_STATE_DISABLED

La zona de pruebas del SDK está inhabilitada.

Se ocultaron las API de SdkSandboxManager. Los intentos de llamarlas generarán UnsupportedOperationException.

Valor constante: 0 (0x00000000)

SDK_SANDBOX_STATE_ENABLED_PROCESS_ISOLATION

Se agregó en el nivel de API 33.
public static final int SDK_SANDBOX_STATE_ENABLED_PROCESS_ISOLATION

La zona de pruebas del SDK está habilitada.

La app puede usar las API de SdkSandboxManager para cargar SDKs de la que depende en el proceso SdkSandbox correspondiente.

Valor constante: 2 (0x00000002)

SEND_DATA_INTERNAL_ERROR

public static final int SEND_DATA_INTERNAL_ERROR

Se produjo un error interno cuando se realizaba SdkSandboxManager#sendData(String, Bundle, Executor, SendDataCallback).

Esto indica que se produjo un error interno genérico cuando se solicitaba el envío de datos a un SDK.

Valor constante: 800 (0x00000320)

Métodos públicos

getSdkSandboxState

Se agregó en el nivel de API 33.
public static int getSdkSandboxState ()

Muestra el estado actual de SdkSandbox.

Resultado que se muestra
int El valor es SDK_SANDBOX_STATE_DISABLED o SDK_SANDBOX_STATE_ENABLED_PROCESS_ISOLATION.

loadSdk

public void loadSdk (String sdkName,
                Bundle params,
                Executor callbackExecutor,
                SdkSandboxManager.LoadSdkCallback callback)

Carga el SDK en el proceso de Java de la zona de pruebas del SDK.

De forma asíncrona, carga la biblioteca del SDK con sdkName en un proceso de zona de pruebas. El llamador debe recibir la notificación desde LoadSdkCallback callback.

La app ya debe declarar SDKs de la que depende en su AndroidManifest con la etiqueta <use-sdk-library>. La app solo puede cargar SDKs de la que depende en SdkSandbox.

Cuando la aplicación cliente cargue el primer SDK, se creará un nuevo proceso SdkSandbox; de lo contrario, otros SDKs se cargarán en la misma zona de pruebas que ya se creó para la aplicación cliente.

Parámetros
sdkName String: nombre del SDK que se cargará. Este valor no puede ser null.

params Bundle: los parámetros que la app pasa al SDK. Este valor no puede ser null.

callbackExecutor Executor: el Executor en el que se invoca la devolución de llamada. Este valor no puede ser null.
callback SdkSandboxManager.LoadSdkCallback: el LoadSdkCallback que recibirá los eventos de los SDK de carga. Este valor no puede ser null.

requestSurfacePackage

public void requestSurfacePackage (String sdkName,
                int displayId,
                int width,
                int height,
                Bundle params,
                Executor callbackExecutor,
                SdkSandboxManager.RequestSurfacePackageCallback callback)

Envía al SDK una solicitud para un paquete de superficie.

Después de que la aplicación cliente reciba un indicador sobre la carga correcta de un SDK por parte de SdkSandboxManager.LoadSdkCallback.onLoadSdkSuccess(android.os.Bundle), este puede solicitar, de forma asíncrona, un SurfacePackage para renderizar la vista desde el SDK.

El SurfacePackage solicitado se muestra a la aplicación cliente a través de SdkSandboxManager.RequestSurfacePackageCallback.onSurfacePackageReady(android.view.SurfaceControlViewHost.SurfacePackage, int, android.os.Bundle).

Parámetros
sdkName String: nombre del SDK que se cargó en la zona de pruebas del SDK. Este valor no puede ser null.

displayId int: el ID de la pantalla lógica para mostrar el paquete de superficie.

width int: el ancho del paquete de superficie.

height int: la altura del paquete de superficie.

params Bundle: los parámetros que la aplicación cliente pasa al SDK. Este valor no puede ser null.

callbackExecutor Executor: el Executor en el que se invoca la devolución de llamada. Este valor no puede ser null.
callback SdkSandboxManager.RequestSurfacePackageCallback: el RequestSurfacePackageCallback que recibirá los resultados de la solicitud de paquetes de superficie de los SDKs. Este valor no puede ser null.

sendData

public void sendData (String sdkName,
                Bundle data,
                Executor callbackExecutor,
                SdkSandboxManager.SendDataCallback callback)

Se envía un paquete de data al SDK.

Después de que la aplicación cliente reciba un indicador sobre la carga correcta de un SDK por parte de SdkSandboxManager.LoadSdkCallback.onLoadSdkSuccess(android.os.Bundle), puede solicitar de forma asíncrona que se envíen datos al SDK en la zona de pruebas. Si no se carga el SDK, se genera SecurityException.

Parámetros
sdkName String: nombre del SDK que se cargó en la zona de pruebas del SDK. Este es el mismo nombre que se usa en loadSdk(java.lang.String, android.os.Bundle, java.util.concurrent.Executor, android.app.sdksandbox.SdkSandboxManager.LoadSdkCallback). Este valor no puede ser null.

data Bundle: los datos que se enviarán al SDK representado en forma de un Bundle. Este valor no puede ser null.

callbackExecutor Executor: el Executor en el que se invoca la devolución de llamada. Este valor no puede ser null.
callback SdkSandboxManager.SendDataCallback: el SendDataCallback que recibirá eventos de carga e interacción con SDK. El SDK también puede enviar datos a través de SendDataCallback#onSendDataSuccess(Bundle). Este valor no puede ser null.