如何从 Instant App 安装 onDemand 模块
How to install onDemand module from an Instant App
我有一个 android 应用程序,我想从免安装应用程序安装一个新模块。我正在使用 SplitInstallManager
来这样做。
请求安装后,我收到错误代码 = -100 的 SplitInstallSessionStatus.FAILED
。根据 android 文档,错误代码 -100 是一个内部错误。 (https://developer.android.com/reference/com/google/android/play/core/splitinstall/model/SplitInstallErrorCode)
这适用于模块化 android 应用程序。我有多个模块(大约十个),但只有一个启用即时应用程序的模块和一个启用 onDemand 的模块(我正在尝试安装的那个)
fun installAndLaunchPlayer(manager: SplitInstallManager, videoId: String) {
var mySessionId = 0
if (manager.installedModules.contains("player")) {
_onPlayerInstalledSuccessful.value = videoId
return
}
val request = SplitInstallRequest.newBuilder()
.addModule("player")
.build()
manager.registerListener(object : SplitInstallStateUpdatedListener {
override fun onStateUpdate(state: SplitInstallSessionState) {
if (state.status() == SplitInstallSessionStatus.FAILED && state.errorCode() == SplitInstallErrorCode.SERVICE_DIED) {
// Retry the request.
return
}
if (state.sessionId() == mySessionId) {
when (state.status()) {
SplitInstallSessionStatus.DOWNLOADING -> {
}
SplitInstallSessionStatus.INSTALLED -> {
_onPlayerInstalledSuccessful.value = videoId
}
SplitInstallSessionStatus.FAILED -> {
// HERE IS WHERE I GET THE ERROR CODE = -100
state.errorCode()
_onPlayerInstalledFailure.value = "failed to install module"
}
}
}
}
})
manager
.startInstall(request)
.addOnSuccessListener { mySessionId = it }
.addOnFailureListener {
_onPlayerInstalledFailure.value = it.message
}
}
除了在安装请求开始时得到的 SplitInstallSessionStatus.PENDING
之外,我再也没有得到任何其他 SplitInstallSessionStatus.FAILED
。
这是错误日志:
SplitInstallSessionState{sessionId=42, status=6, errorCode=-100, bytesDownloaded=0, totalBytesToDownload=0, moduleNamesNullable=[player], languagesNullable=null, resolutionIntent=null, splitFileIntents=null}
你能帮帮我吗?
Instant Apps 目前不支持 onDemand 模块。此功能仅适用于可安装应用程序。
作为Instant App,具有类似的效果,另一个启用instant-enabled的动态功能模块
<dist:module
dist:instant="true"
dist:onDemand="false">
<dist:fusing dist:include="false" />
</dist:module>
也可以通过应用链接支持按需下载。
您可以使用 SplitInstallManager
下载并安装动态功能模块,如 this sample app 所示。
为此,您正在下载的功能模块也必须标记为 instant="true"
。
这将使您能够使用 Play Core 库或 URL 下载模块。
我有一个 android 应用程序,我想从免安装应用程序安装一个新模块。我正在使用 SplitInstallManager
来这样做。
请求安装后,我收到错误代码 = -100 的 SplitInstallSessionStatus.FAILED
。根据 android 文档,错误代码 -100 是一个内部错误。 (https://developer.android.com/reference/com/google/android/play/core/splitinstall/model/SplitInstallErrorCode)
这适用于模块化 android 应用程序。我有多个模块(大约十个),但只有一个启用即时应用程序的模块和一个启用 onDemand 的模块(我正在尝试安装的那个)
fun installAndLaunchPlayer(manager: SplitInstallManager, videoId: String) {
var mySessionId = 0
if (manager.installedModules.contains("player")) {
_onPlayerInstalledSuccessful.value = videoId
return
}
val request = SplitInstallRequest.newBuilder()
.addModule("player")
.build()
manager.registerListener(object : SplitInstallStateUpdatedListener {
override fun onStateUpdate(state: SplitInstallSessionState) {
if (state.status() == SplitInstallSessionStatus.FAILED && state.errorCode() == SplitInstallErrorCode.SERVICE_DIED) {
// Retry the request.
return
}
if (state.sessionId() == mySessionId) {
when (state.status()) {
SplitInstallSessionStatus.DOWNLOADING -> {
}
SplitInstallSessionStatus.INSTALLED -> {
_onPlayerInstalledSuccessful.value = videoId
}
SplitInstallSessionStatus.FAILED -> {
// HERE IS WHERE I GET THE ERROR CODE = -100
state.errorCode()
_onPlayerInstalledFailure.value = "failed to install module"
}
}
}
}
})
manager
.startInstall(request)
.addOnSuccessListener { mySessionId = it }
.addOnFailureListener {
_onPlayerInstalledFailure.value = it.message
}
}
除了在安装请求开始时得到的 SplitInstallSessionStatus.PENDING
之外,我再也没有得到任何其他 SplitInstallSessionStatus.FAILED
。
这是错误日志:
SplitInstallSessionState{sessionId=42, status=6, errorCode=-100, bytesDownloaded=0, totalBytesToDownload=0, moduleNamesNullable=[player], languagesNullable=null, resolutionIntent=null, splitFileIntents=null}
你能帮帮我吗?
Instant Apps 目前不支持 onDemand 模块。此功能仅适用于可安装应用程序。
作为Instant App,具有类似的效果,另一个启用instant-enabled的动态功能模块
<dist:module
dist:instant="true"
dist:onDemand="false">
<dist:fusing dist:include="false" />
</dist:module>
也可以通过应用链接支持按需下载。
您可以使用 SplitInstallManager
下载并安装动态功能模块,如 this sample app 所示。
为此,您正在下载的功能模块也必须标记为 instant="true"
。
这将使您能够使用 Play Core 库或 URL 下载模块。