SdkSandboxManager
public
final
class
SdkSandboxManager
extends Object
| java.lang.Object | |
| ↳ | android.app.sdksandbox.SdkSandboxManager |
提供 API,以將 SDKs 載入
SDK 沙箱程序,然後與其互動。
SDK 沙箱是一種在單獨 uid 範圍內執行的 Java 程序。每個應用程式都有專屬的 SDK 沙箱程序。
應用程式必須先使用 <uses-sdk-library> 標記,在資訊清單中宣告其仰賴的 SDK。應用程式只能將仰賴的 SDK 載入到 SDK 沙箱中。
摘要
巢狀類別 | |
|---|---|
interface |
SdkSandboxManager.SdkSandboxProcessDeathCallback
用於追蹤事件 SDK 沙箱死亡事件的回呼。 |
繼承方法 | |
|---|---|
常數
EXTRA_DISPLAY_ID
public static final String EXTRA_DISPLAY_ID
要在 requestSurfacePackage(java.lang.String, android.os.Bundle, java.util.concurrent.Executor, android.os.OutcomeReceiver) 的軟體包欄位中使用的鍵名稱,其值必須定義邏輯的整數 ID
顯示 SurfacePackage。
常數值: 「android.app.sdksandbox.extra.DISPLAY_ID」
EXTRA_HEIGHT_IN_PIXELS
public static final String EXTRA_HEIGHT_IN_PIXELS
要在 requestSurfacePackage(java.lang.String, android.os.Bundle, java.util.concurrent.Executor, android.os.OutcomeReceiver) 套件欄位中使用的鍵名稱,其值應定義 SurfacePackage 的整數高度 (以像素為單位)。
常數值: 「android.app.sdksandbox.extra.HEIGHT_IN_PIXELS」
EXTRA_HOST_TOKEN
public static final String EXTRA_HOST_TOKEN
要在 requestSurfacePackage(java.lang.String, android.os.Bundle, java.util.concurrent.Executor, android.os.OutcomeReceiver) 的套件欄位中使用的鍵名稱,其值應會顯示 SurfaceView.getHostToken() 傳回的權杖 (在 SurfaceView 經過後傳回)
加入到檢視區塊階層中如要啟用 ANR 回報功能,系統只會接受非空值的值。
常數值: 「android.app.sdksandbox.extra.HOST_TOKEN」
EXTRA_SURFACE_套件
public static final String EXTRA_SURFACE_PACKAGE
在套件中,這個鍵的名稱會傳遞至 OutcomeReceiver 的 onResult 函式,也就是 requestSurfacePackage(java.lang.String, android.os.Bundle, java.util.concurrent.Executor, android.os.OutcomeReceiver) 的欄位,其值會顯示要求的 SurfacePackage。
常數值: 「android.app.sdksandbox.extra.SURFACE_PACKAGE」
EXTRA_WIDTH_IN_PIXELS
public static final String EXTRA_WIDTH_IN_PIXELS
要在 requestSurfacePackage(java.lang.String, android.os.Bundle, java.util.concurrent.Executor, android.os.OutcomeReceiver) 套件欄位中使用的鍵名稱,其值應定義 SurfacePackage 的整數寬度 (以像素為單位)。
常數值: 「android.app.sdksandbox.extra.WIDTH_IN_PIXELS」
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.os.OutcomeReceiver),
成功載入。
常數值: 指南 (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.os.OutcomeReceiver) 嘗試了載入現有 SDK。
常數值: 100 名 (0x00000064)。
LOAD_SDK_SDK_DEFINED_ERROR
public static final int LOAD_SDK_SDK_DEFINED_ERROR
載入後 SDK 錯誤。
這表示 SDK 在載入後初始化期間遇到錯誤。
此詳細資料可透過 LoadSdkException 中傳回的套裝組合,取得
傳入 SdkSandboxManager#loadSdk 的 OutcomeReceiver。
常數值: 指南 (0x00000066)
LOAD_SDK_SDK_SANDBOX_DISABLED
public static final int LOAD_SDK_SDK_SANDBOX_DISABLED
SDK 沙箱已停用。
這表示 SDK 沙箱已停用。之後嘗試在 此開機程序也會失敗
常數值: 指南 (0x00000067)。
REQUEST_SURFACE_PACKAGE_INTERNAL_ERROR
public static final int REQUEST_SURFACE_PACKAGE_INTERNAL_ERROR
要求 SurfacePackage 時發生內部錯誤。
這表示請求
SurfacePackage。
常數值: 700 人 (0x000002bc)
REQUEST_SURFACE_PACKAGE_SDK_NOT_LOADED
public static final int REQUEST_SURFACE_PACKAGE_SDK_NOT_LOADED
並未在要求 SurfacePackage 時載入 SDK。
這表示並未要求 SurfacePackage 的 SDK
可能原因為沙箱停止運作,或是未在一開始就載入。
常數值: 701 次 (0x000002bd)
SDK_SANDBOX_PROCESS_NOT_AVAILABLE
public static final int SDK_SANDBOX_PROCESS_NOT_AVAILABLE
無法使用 SDK 沙箱程序。
表示 SDK 沙箱程序無法使用,原因可能是 SDK 已失效 請先中斷連線或並非在一開始建立
常數值: 503 個 (0x000001f7)。
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。嘗試呼叫這些函式會導致 UnsupportedOperationException。
常數值: 0 分 (0x00000000)
SDK_SANDBOX_STATE_ENABLED_PROCESS_ISOLATION
public static final int SDK_SANDBOX_STATE_ENABLED_PROCESS_ISOLATION
SDK 沙箱已啟用。
應用程式可以使用 SdkSandboxManager API,將其仰賴的 SDKs 載入到
對應的 SDK 沙箱程序
常數值: 2 分 (0x00000002)。
公用方法
addSdkSandboxProcessDeathCallback
public void addSdkSandboxProcessDeathCallback (Executor callbackExecutor, SdkSandboxManager.SdkSandboxProcessDeathCallback callback)
新增回呼,為 SDK 沙箱生命週期事件 (例如 SDK 沙箱) 註冊 死亡。如果呼叫此方法時尚未建立沙箱,請求將會 等到沙箱建立完成後,該沙箱才會啟用多個 您可新增回呼以偵測死亡,且不會在沙箱終止時移除。
| 參數 | |
|---|---|
callbackExecutor |
Executor:叫用回呼的 Executor
此值不能為 null。
回呼和事件監聽器事件會透過這個
Executor,可讓您輕鬆控制
如何透過應用程式的主執行緒分派事件
可以使用
Context.getMainExecutor()。
否則,請提供會調度至適當執行緒的 Executor。 |
callback |
SdkSandboxManager.SdkSandboxProcessDeathCallback:接收 SDK 沙箱的 SdkSandboxProcessDeathCallback
生命週期事件。
此值不能為 null。 |
addSyncedSharedPreferencesKeys
public void addSyncedSharedPreferencesKeys (Set<String> keys)
將金鑰新增至從應用程式預設 SharedPreferences 同步處理的一組金鑰至 SDK
沙箱。
SDK 可以使用 SdkSandboxController.getClientSharedPreferences() API 讀取已同步的資料。
如要停止同步處理已使用這個 API 新增的任何金鑰,請使用 removeSyncedSharedPreferencesKeys(java.util.Set)。
如果應用程式重新啟動,同步處理作業就會中斷,使用者必須再次呼叫這個 API 才能重建集區 一組同步金鑰。
注意:這個類別不支援跨多個程序使用。
| 參數 | |
|---|---|
keys |
Set:要同步到沙箱的一組金鑰。
此值不能為 null。 |
getAppOwnedSdkSandboxInterfaces
public List<AppOwnedSdkSandboxInterface> getAppOwnedSdkSandboxInterfaces ()
擷取應用程式已註冊的 AppOwnedSdkSandboxInterface 清單
| 傳回 | |
|---|---|
List<AppOwnedSdkSandboxInterface> |
如果地圖中沒有 callInfo,則會空白清單,否則為 AppOwnedSdkSandboxInterface
此值不能為 null。 |
getSandboxedSdks
public List<SandboxedSdk> getSandboxedSdks ()
擷取沙箱中載入的 SDK 相關資訊。
| 傳回 | |
|---|---|
List<SandboxedSdk> |
SandboxedSdk 清單,內含所有目前載入的 SDK。
此值不能為 null。 |
getSdkSandboxState
public static int getSdkSandboxState ()
傳回 SDK 沙箱功能的目前可用性狀態。
| 傳回 | |
|---|---|
int |
這個值可以是 SDK_SANDBOX_STATE_DISABLED 或 SDK_SANDBOX_STATE_ENABLED_PROCESS_ISOLATION |
getSyncedSharedPreferencesKeys
public Set<String> getSyncedSharedPreferencesKeys ()
傳回要從應用程式預設 SharedPreferences 同步到的組合鍵
SDK 沙箱
| 傳回 | |
|---|---|
Set<String> |
此值不能為 null。 |
loadSdk
public void loadSdk (String sdkName, Bundle params, Executor executor, OutcomeReceiver<SandboxedSdk, LoadSdkException> receiver)
在 SDK 沙箱 Java 程序中載入 SDK。
使用 sdkName 以非同步方式將 SDK 程式庫載入 SDK 沙箱程序。
來電者將透過 receiver 收到通知。
呼叫端應該已經使用 <uses-sdk-library> 標記在資訊清單中宣告了仰賴的 SDKs。呼叫端只能將其仰賴的 SDKs 載入 SDK
沙箱。
當用戶端應用程式載入第一個 SDK 時,新的 SDK 沙箱程序將會是 已建立。如果已為用戶端應用程式建立沙箱,則會提供額外的 SDK 全部載入同一個沙箱中
只有在呼叫端在前景執行時,才能呼叫這個 API。來自
背景會在 receiver 中傳回 LoadSdkException。
| 參數 | |
|---|---|
sdkName |
String:要載入的 SDK 的名稱。
此值不能為 null。 |
params |
Bundle:要傳遞至 SDK 的其他參數,格式為 Bundle
用戶端和 SDK 之間協議的異動
此值不能為 null。 |
executor |
Executor:叫用接收器的 Executor。
此值不能為 null。
回呼和事件監聽器事件會透過這個
Executor,可讓您輕鬆控制
如何透過應用程式的主執行緒分派事件
可以使用
Context.getMainExecutor()。
否則,請提供會調度至適當執行緒的 Executor。 |
receiver |
OutcomeReceiver:在成功執行時收到 SandboxedSdk,或 LoadSdkException。
此值不能為 null。 |
RegisterAppOwnedSdkSandboxInterface
public void registerAppOwnedSdkSandboxInterface (AppOwnedSdkSandboxInterface appOwnedSdkSandboxInterface)
針對應用程式程序註冊 AppOwnedSdkSandboxInterface。
註冊與先前同名的 AppOwnedSdkSandboxInterface
註冊的介面將產生 IllegalStateException。
AppOwnedSdkSandboxInterface#getName() 是指介面名稱。
| 參數 | |
|---|---|
appOwnedSdkSandboxInterface |
AppOwnedSdkSandboxInterface:要註冊的 AppOwnedSdkSandboxInterface
此值不能為 null。 |
removeSdkSandboxProcessDeathCallback
public void removeSdkSandboxProcessDeathCallback (SdkSandboxManager.SdkSandboxProcessDeathCallback callback)
移除先前使用 addSdkSandboxProcessDeathCallback(java.util.concurrent.Executor, android.app.sdksandbox.SdkSandboxManager.SdkSandboxProcessDeathCallback) 新增的 SdkSandboxProcessDeathCallback
| 參數 | |
|---|---|
callback |
SdkSandboxManager.SdkSandboxProcessDeathCallback:之前使用 SdkSandboxProcessDeathCallback 新增的
SdkSandboxManager#addSdkSandboxProcessDeathCallback(Executor,
SdkSandboxProcessDeathCallback)
此值不能為 null。 |
removeSyncedSharedPreferencesKeys
public void removeSyncedSharedPreferencesKeys (Set<String> keys)
從已使用 addSyncedSharedPreferencesKeys(java.util.Set) 新增的金鑰組合中移除金鑰
如果金鑰已經過同步,就會從 SDK 沙箱中清除。
| 參數 | |
|---|---|
keys |
Set:不再同步到沙箱的一組鍵名。
此值不能為 null。 |
requestSurfacePackage
public void requestSurfacePackage (String sdkName, Bundle params, Executor callbackExecutor, OutcomeReceiver<Bundle, RequestSurfacePackageException> receiver)
將針對表面套件的要求傳送至 SDK。
在用戶端應用程式收到 SDK 載入成功的信號後,
新增了 SurfaceView 至檢視區塊階層,但能以非同步方式要求
用於算繪來自 SDK 檢視畫面的 SurfacePackage。
SurfacePackage 準備就緒時,OutcomeReceiver#onResult 回呼的
系統就會叫用傳遞的 receiver這個回呼會包含 Bundle
物件,其中含有 SdkSandboxManager#EXTRA_SURFACE_PACKAGE 索引鍵,該物件
相關聯的值是要求的 SurfacePackage。
傳遞的 params 必須包含下列鍵:EXTRA_WIDTH_IN_PIXELS、SdkSandboxManager#EXTRA_HEIGHT_IN_PIXELS、
SdkSandboxManager#EXTRA_DISPLAY_ID和SdkSandboxManager#EXTRA_HOST_TOKEN。如果
任何這些索引鍵遺失或無效,系統將擲回 IllegalArgumentException。
只有在呼叫端在前景執行時,才能呼叫這個 API。來自
背景會在 receiver 中傳回 RequestSurfacePackageException。
| 參數 | |
|---|---|
sdkName |
String:載入 SDK 沙箱的 SDK 名稱。
此值不能為 null。 |
params |
Bundle:用戶端應用程式傳遞至 SDK 的參數。
此值不能為 null。 |
callbackExecutor |
Executor:叫用回呼的 Executor
此值不能為 null。
回呼和事件監聽器事件會透過這個
Executor,可讓您輕鬆控制
如何透過應用程式的主執行緒分派事件
可以使用
Context.getMainExecutor()。
否則,請提供會調度至適當執行緒的 Executor。 |
receiver |
OutcomeReceiver:這個方法會在成功時傳回 Bundle,其中包含索引鍵
具有 SurfacePackage 值的 SdkSandboxManager#EXTRA_SURFACE_PACKAGE,或
失敗時為 RequestSurfacePackageException。
此值不能為 null。 |
| 擲回 | |
|---|---|
IllegalArgumentException |
表示 params 未包含所有必要的金鑰。 |
startSdkSandboxActivity
public void startSdkSandboxActivity (Activity fromActivity, IBinder sdkActivityToken)
在 SDK 沙箱中啟動 Activity。
此函式會在已傳遞的 fromActivity 的同一工作中啟動新的 Activity,並傳遞至共用所傳遞 sdkActivityToken 的 SDK
會識別來自該 SDK 的要求,以便統計這個 Activity。
下列情況不會啟動 Activity:
- 呼叫此 API 的應用程式會在背景執行。
- 傳遞的
sdkActivityToken不會對應至Activity的要求 構成與呼叫端應用程式共用的 SDK。 - 共用所傳遞
sdkActivityToken的 SDK 已移除其針對此請求Activity。 - 已建立沙箱
Activity。
| 參數 | |
|---|---|
fromActivity |
Activity:Activity 會藉由對其呼叫 Activity#startActivity(Intent) 來啟動新的沙箱 Activity。
此值不能為 null。 |
sdkActivityToken |
IBinder:要求 Activity 的 SDK 所共用的 ID。
此值不能為 null。 |
卸載 Sdk
public void unloadSdk (String sdkName)
卸載呼叫端先前載入的 SDK。
系統不保證可為這個 SDK 分配的記憶體立即釋出。所有語言
後續呼叫 requestSurfacePackage(java.lang.String, android.os.Bundle, java.util.concurrent.Executor, android.os.OutcomeReceiver)
指定的 sdkName 將失敗
只有在呼叫端在前景執行時,才能呼叫這個 API。來自
背景會導致系統擲回 SecurityException。
| 參數 | |
|---|---|
sdkName |
String:要卸載的 SDK 的名稱。
此值不能為 null。 |
取消註冊 AppOwnedSdkSandboxInterface
public void unregisterAppOwnedSdkSandboxInterface (String name)
取消註冊 ERROR(/AppOwnedSdkSandboxInterfaces) 的應用程式程序。
| 參數 | |
|---|---|
name |
String:註冊 AppOwnedSdkSandboxInterface 的名稱。
此值不能為 null。 |