SdkSandboxManager
public
final
class
SdkSandboxManager
extends Object
java.lang.Object | |
↳ | android.app.sdksandbox.SdkSandboxManager |
提供相应 API,用于将 SDKs
加载到 SDK 沙盒进程中,然后与之进行交互。
SdkSandbox
是在单独的 uid 范围内运行的 Java 进程。每个应用都有自己的 SDK 沙盒进程。
第一个应用需要使用 <uses-sdk-library>
标记在其 AndroidManifest.xml
中声明它所依赖的 SDKs
。应用只能将自己所依赖的 SDKs
加载到 SdkSandbox
中。
注意:此类中定义的所有 API 都不是稳定版,可能会发生变化。
摘要
嵌套类 | |
---|---|
interface |
SdkSandboxManager.LoadSdkCallback
用于跟踪与 SDK 加载和交互相关的事件的回调。 |
interface |
SdkSandboxManager.RequestSurfacePackageCallback
用于跟踪来自 SDK 的 Surface 包请求的回调。 |
interface |
SdkSandboxManager.SendDataCallback
用于跟踪向 SDK 发送数据的回调。 |
常量 | |
---|---|
int |
LOAD_SDK_ALREADY_LOADED
SDK 已加载。 |
int |
LOAD_SDK_INTERNAL_ERROR
加载 SDK 时出现内部错误。 |
int |
LOAD_SDK_NOT_FOUND
找不到 SDK。 |
int |
REQUEST_SURFACE_PACKAGE_INTERNAL_ERROR
请求 |
String |
SDK_SANDBOX_SERVICE
与 |
int |
SDK_SANDBOX_STATE_DISABLED
SDK 沙盒已停用。 |
int |
SDK_SANDBOX_STATE_ENABLED_PROCESS_ISOLATION
SDK 沙盒已启用。 |
int |
SEND_DATA_INTERNAL_ERROR
执行 |
公共方法 | |
---|---|
static
int
|
getSdkSandboxState()
返回 |
void
|
loadSdk(String sdkName, Bundle params, Executor callbackExecutor, SdkSandboxManager.LoadSdkCallback callback)
在 SDK 沙盒 Java 进程中加载 SDK。 |
void
|
requestSurfacePackage(String sdkName, int displayId, int width, int height, Bundle params, Executor callbackExecutor, SdkSandboxManager.RequestSurfacePackageCallback callback)
向 SDK 发送 Surface 包请求。 |
void
|
sendData(String sdkName, Bundle data, Executor callbackExecutor, SdkSandboxManager.SendDataCallback callback)
向 SDK 发送一个包的 |
继承的方法 | |
---|---|
常量
LOAD_SDK_ALREADY_LOADED
public static final int LOAD_SDK_ALREADY_LOADED
SDK 已加载。
这表示客户端应用在成功加载后试图通过调用 loadSdk(java.lang.String, android.os.Bundle, java.util.concurrent.Executor, android.app.sdksandbox.SdkSandboxManager.LoadSdkCallback)
重新加载相同的 SDK。
常量值: 101 (0x00000065)
LOAD_SDK_INTERNAL_ERROR
public static final int LOAD_SDK_INTERNAL_ERROR
加载 SDK 时出现内部错误。
这表示从客户端应用执行调用时发生了常规内部错误。
常量值: 500 (0x000001f4)
LOAD_SDK_NOT_FOUND
public static final int LOAD_SDK_NOT_FOUND
找不到 SDK。
这表示客户端应用试图通过调用 loadSdk(java.lang.String, android.os.Bundle, java.util.concurrent.Executor, android.app.sdksandbox.SdkSandboxManager.LoadSdkCallback)
加载不存在的 SDK。
常量值: 100 (0x00000064)
REQUEST_SURFACE_PACKAGE_INTERNAL_ERROR
public static final int REQUEST_SURFACE_PACKAGE_INTERNAL_ERROR
请求 SurfacePackage
时出现内部错误。
这表示在请求 SurfacePackage
时发生了常规内部错误。
常量值: 700 (0x000002bc)
SDK_SANDBOX_SERVICE
public static final String SDK_SANDBOX_SERVICE
与 Context#getSystemService(String)
配合使用以检索 SdkSandboxManager
,以便与属于此客户端应用的 SDK 进行交互。
常量值: "sdk_sandbox"
SDK_SANDBOX_STATE_DISABLED
public static final int SDK_SANDBOX_STATE_DISABLED
SDK 沙盒已停用。
SdkSandboxManager
API 已隐藏。尝试调用这些 API 会导致 UnsupportedOperationException
。
常量值: 0 (0x00000000)
SDK_SANDBOX_STATE_ENABLED_PROCESS_ISOLATION
public static final int SDK_SANDBOX_STATE_ENABLED_PROCESS_ISOLATION
SDK 沙盒已启用。
应用可以使用 SdkSandboxManager
API 将自己所依赖的 SDKs
加载到相应的 SdkSandbox
进程中。
常量值: 2 (0x00000002)
SEND_DATA_INTERNAL_ERROR
public static final int SEND_DATA_INTERNAL_ERROR
执行 SdkSandboxManager#sendData(String, Bundle, Executor,
SendDataCallback)
时出现内部错误。
这表示在请求向 SDK 发送数据时发生了常规内部错误。
常量值: 800 (0x00000320)
公共方法
getSdkSandboxState
public static int getSdkSandboxState ()
返回 SdkSandbox
的当前状态。
返回 | |
---|---|
int |
值为 SDK_SANDBOX_STATE_DISABLED 或 SDK_SANDBOX_STATE_ENABLED_PROCESS_ISOLATION |
loadSdk
public void loadSdk (String sdkName, Bundle params, Executor callbackExecutor, SdkSandboxManager.LoadSdkCallback callback)
在 SDK 沙盒 Java 进程中加载 SDK。
此方法会将带有 sdkName
的 SDK 库异步加载到沙盒进程中,调用方应通过 LoadSdkCallback
callback
收到通知。
应用应事先使用 <use-sdk-library>
标记在其 AndroidManifest
中声明其所依赖的 SDKs
。应用只能将自己所依赖的 SDKs
加载到 SdkSandbox
中。
当客户端应用加载第一个 SDK 时,系统会创建一个新的 SdkSandbox
进程,之后的其他 SDK 将会加载到已为该客户端应用创建的同一个沙盒中。
参数 | |
---|---|
sdkName |
String :要加载的 SDK 的名称。此值不能为 null 。 |
params |
Bundle :应用传递给 SDK 的参数。此值不能为 null 。 |
callbackExecutor |
Executor :要在其上调用回调的 Executor 。此值不能为 null 。 |
callback |
SdkSandboxManager.LoadSdkCallback :将接收与 SDK 加载相关的事件的 LoadSdkCallback 。此值不能为 null 。 |
requestSurfacePackage
public void requestSurfacePackage (String sdkName, int displayId, int width, int height, Bundle params, Executor callbackExecutor, SdkSandboxManager.RequestSurfacePackageCallback callback)
向 SDK 发送 Surface 包请求。
客户端应用通过 SdkSandboxManager.LoadSdkCallback.onLoadSdkSuccess(android.os.Bundle)
收到成功加载 SDK 的信号后,便可向 SDK 异步请求 SurfacePackage
来呈现视图。
所请求的 SurfacePackage
会通过 SdkSandboxManager.RequestSurfacePackageCallback.onSurfacePackageReady(android.view.SurfaceControlViewHost.SurfacePackage, int, android.os.Bundle)
返回给客户端应用。
参数 | |
---|---|
sdkName |
String :加载到 SDK 沙盒中的 SDK 的名称。此值不能为 null 。 |
displayId |
int :用于显示 Surface 包的逻辑屏幕的 ID |
width |
int :Surface 包的宽度 |
height |
int :Surface 包的高度 |
params |
Bundle :客户端应用传递给 SDK 的参数。此值不能为 null 。 |
callbackExecutor |
Executor :要在其上调用回调的 Executor 。此值不能为 null 。
|
callback |
SdkSandboxManager.RequestSurfacePackageCallback :将接收向 SDK 请求 Surface 包的结果的 RequestSurfacePackageCallback 。
此值不能为 null 。 |
sendData
public void sendData (String sdkName, Bundle data, Executor callbackExecutor, SdkSandboxManager.SendDataCallback callback)
向 SDK 发送一个包的 data
。
客户端应用通过 SdkSandboxManager.LoadSdkCallback.onLoadSdkSuccess(android.os.Bundle)
收到成功加载 SDK 的信号后,便可向沙盒中的 SDK 异步请求发送任何数据。如果不加载 SDK,系统将抛出 SecurityException
。
参数 | |
---|---|
sdkName |
String :加载到 SDK 沙盒中的 SDK 的名称,与 loadSdk(java.lang.String, android.os.Bundle, java.util.concurrent.Executor, android.app.sdksandbox.SdkSandboxManager.LoadSdkCallback) 中使用的名称相同。此值不能为 null 。 |
data |
Bundle :要向 SDK 发送的数据,格式为 Bundle 。此值不能为 null 。 |
callbackExecutor |
Executor :要在其上调用回调的 Executor 。此值不能为 null 。
|
callback |
SdkSandboxManager.SendDataCallback :将接收与 SDK 加载和交互相关的事件的 SendDataCallback 。SDK 也可以通过 SendDataCallback#onSendDataSuccess(Bundle) 发送回数据。此值不能为 null 。 |