SdkSandboxManager
public
final
class
SdkSandboxManager
extends Object
java.lang.Object | |
↳ | android.app.sdksandbox.SdkSandboxManager |
SDK 샌드박스 프로세스에 SDKs
를 로드한 다음 이와 상호작용하는 API를 제공합니다.
SDK 샌드박스는 별도의 UID 범위에서 실행되는 자바 프로세스입니다. 각 앱에는 자체 SDK 샌드박스 프로세스가 있을 수 있습니다.
앱은 먼저 <uses-sdk-library>
태그를 사용하여 매니페스트에서 종속된 SDK를 선언해야 합니다. 앱은 종속된 SDK만 SDK 샌드박스에 로드할 수 있습니다.
요약
중첩된 클래스 | |
---|---|
interface |
SdkSandboxManager.SdkSandboxProcessDeathCallback
이벤트 SDK 샌드박스 종료를 추적하기 위한 콜백입니다. |
상속된 메서드 | |
---|---|
상수
EXTRA_DISPLAY_ID(추가_디스플레이_ID)
public static final String EXTRA_DISPLAY_ID
requestSurfacePackage(java.lang.String, android.os.Bundle, java.util.concurrent.Executor, android.os.OutcomeReceiver)
의 번들 필드에서 사용할 키의 이름입니다. 이 값은 SurfacePackage
를 표시할 논리 디스플레이의 정수 ID를 정의해야 합니다.
상수 값: "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
가 뷰 계층 구조에 추가되면 값이 SurfaceView.getHostToken()
에서 반환한 토큰을 표시해야 합니다. ANR 보고를 사용 설정하기 위해 null이 아닌 값만 허용됩니다.
상수 값: "android.app.sdksandbox.extra.HOST_TOKEN"
EXTRA_SURFACE_PACKAGE
public static final String EXTRA_SURFACE_PACKAGE
requestSurfacePackage(java.lang.String, android.os.Bundle, java.util.concurrent.Executor, android.os.OutcomeReceiver)
의 필드인 OutcomeReceiver
의 onResult
함수에 전달되는 번들의 키 이름으로, 값은 요청된 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)
를 호출하여 동일한 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.os.OutcomeReceiver)
을 호출하여 존재하지 않는 SDK를 로드하려고 했음을 나타냅니다.
상수 값: 100 (0x00000064)
LOAD_SDK_SDK_DEFINED_ERROR
public static final int LOAD_SDK_SDK_DEFINED_ERROR
로드 후 SDK 오류가 발생했습니다.
로드 후 초기화 중에 SDK에 오류가 발생했음을 나타냅니다. 자세한 내용은 SdkSandboxManager#loadSdk
에 전달된 OutcomeReceiver
를 통해 LoadSdkException
에서 반환된 번들에서 확인할 수 있습니다.
상수 값: 102 (0x00000066)
LOAD_SDK_SDK_SANDBOX_DISABLED
public static final int LOAD_SDK_SDK_SANDBOX_DISABLED
SDK 샌드박스가 사용 중지되었습니다.
SDK 샌드박스가 사용 중지되었음을 나타냅니다. 이후 이 부팅에서 SDK를 로드하려고 하면 실패합니다.
상수 값: 103 (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
이 클라이언트 애플리케이션에 속한 SDK와 상호작용하기 위한 SdkSandboxManager
를 검색하려면 Context#getSystemService(String)
와 함께 사용합니다.
상수 값: "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> |
현재 로드된 모든 SDK가 포함된 SandboxedSdk 목록입니다.
이 값은 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 샌드박스 자바 프로세스에서 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 일 수 없습니다. |
앱소유SdkSandboxInterface 등록
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 : 이전에 SdkSandboxManager#addSdkSandboxProcessDeathCallback(Executor,
SdkSandboxProcessDeathCallback) 를 사용하여 추가된 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
가 준비되면 전달된 receiver
의 OutcomeReceiver#onResult
콜백이 호출됩니다. 이 콜백은 연결된 값이 요청된 SurfacePackage
인 SdkSandboxManager#EXTRA_SURFACE_PACKAGE
키를 포함하는 Bundle
객체를 포함합니다.
전달된 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
를 시작하고, Activity
를 통계화하는 SDK의 요청을 식별하는 전달된 sdkActivityToken
를 공유하는 SDK에 전달합니다.
다음과 같은 경우 Activity
가 시작되지 않습니다.
- 이 API를 호출하는 앱이 백그라운드에 있습니다.
- 전달된
sdkActivityToken
는 호출자 앱과 공유한 SDK의Activity
요청에 매핑되지 않습니다. - 전달된
sdkActivityToken
을(를) 공유한 SDK가 이Activity
에 대한 요청을 삭제했습니다. - 샌드박스
Activity
은(는) 이미 생성되었습니다.
매개변수 | |
---|---|
fromActivity |
Activity : Activity 는 Activity#startActivity(Intent) 를 호출하여 새 샌드박스 Activity 를 시작하는 데 사용됩니다.
이 값은 null 일 수 없습니다. |
sdkActivityToken |
IBinder : Activity 를 요청하는 SDK가 공유하는 식별자입니다.
이 값은 null 일 수 없습니다. |
로드 취소
public void unloadSdk (String sdkName)
호출자가 이전에 로드한 SDK를 언로드합니다.
이 SDK에 할당된 메모리가 즉시 해제되지 않을 수도 있습니다. 지정된 sdkName
에 관한 이후의 모든 requestSurfacePackage(java.lang.String, android.os.Bundle, java.util.concurrent.Executor, android.os.OutcomeReceiver)
호출은 실패합니다.
이 API는 호출자가 포그라운드에서 실행 중일 때만 호출할 수 있습니다. 백그라운드에서 호출하면 SecurityException
이 발생합니다.
매개변수 | |
---|---|
sdkName |
String : 로드 취소할 SDK의 이름입니다.
이 값은 null 일 수 없습니다. |
등록 취소 앱 소유SdkSandboxInterface
public void unregisterAppOwnedSdkSandboxInterface (String name)
앱 프로세스의 ERROR(/AppOwnedSdkSandboxInterfaces)
등록을 취소합니다.
매개변수 | |
---|---|
name |
String : AppOwnedSdkSandboxInterface가 등록된 이름입니다.
이 값은 null 일 수 없습니다. |