В настоящее время я работаю над решением, как обновлять и устанавливать APK-файл программно - очень похоже на эту проблему. Мое приложение не использует Сервисы Google.
В целях обновления APK-файлы с восходящими версиями хранятся на внутреннем сервере, а веб-служба C# возвращает последнюю версию APK-файла.
Я делаю это с Retrofit2:
@Streaming
@GET("/ws/webservice.svc/getUpdate")
fun getUpdate(
@Query("Programm") program: String,
@Query("version") version: String,
@Query("test") test: Boolean
): Single<String>
и LiveData:
override fun getUpdate() {
disposables += api.getUpdate(
program = context.getString(R.string.app_name),
version = context.getString(R.string.app_version),
test = isTest
)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribeBy(
onSuccess = {
liveData.value = GetUpdate(it)
},
onError = {
liveData.value = Error("Error getUpdate: " + it.message)
}
)
}
Проблема, с которой я сталкиваюсь, заключается в том, что ответ на этот вызов API ( Это означает, что - самый последний файл APK) имеет представление base64String , как показано на рисунке ниже - это, например, только часть ответа сервера, когда вызов API выполняется в браузере.
Возможно ли как-то сгенерировать "настоящий" APK-файл из этого представления String после его загрузки, поэтому после этого я, вероятно, смогу установить его на устройство? Я знаю, что это странно, но клиент хочет, чтобы я повторно использовал тот же веб-сервис для этих целей.
Я нашел похожую проблему здесь . Как это можно сделать в Kotlin? Заранее спасибо.