Как установить модуль onDemand из приложения Instant - PullRequest
0 голосов
/ 26 сентября 2019

У меня есть приложение для Android, и я хочу установить новый модуль из приложения Instant.Я использую SplitInstallManager для этого.После запроса установки я получаю SplitInstallSessionStatus.FAILED с кодом ошибки = -100.Согласно документации андроида, код ошибки -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.FAILED кроме SplitInstallSessionStatus.PENDING, которые я получаю в начале запроса на установку. Вот журнал ошибки:

SplitInstallSessionState{sessionId=42, status=6, errorCode=-100, bytesDownloaded=0, totalBytesToDownload=0, moduleNamesNullable=[player], languagesNullable=null, resolutionIntent=null, splitFileIntents=null}

Можетпожалуйста, помогите мне?

Ответы [ 2 ]

1 голос
/ 27 сентября 2019

Вы можете использовать SplitInstallManager для загрузки и установки динамического функционального модуля, как показано в в этом примере приложения .

Для работы загружаемого функционального модуля необходимотакже помечены instant="true".

Это позволит вам загрузить модуль с использованием библиотеки Play Core или URL-адресов.

0 голосов
/ 26 сентября 2019

Instant Apps на данный момент не поддерживает модули onDemand.Эта функция доступна только для устанавливаемых приложений.

С таким же эффектом, как и для мгновенного приложения, другой динамический функциональный модуль с мгновенным включением

<dist:module
    dist:instant="true"
    dist:onDemand="false">
    <dist:fusing dist:include="false" />
</dist:module>

также может быть загружен по требованию через приложениеПоддержка ссылок.

...