Самообновление приложения Android с собственного сервера не работает на Android 10. Почему?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Самообновление приложения Android с собственного сервера не работает на Android 10. Почему?

Сообщение Anonymous »

У меня есть этот код для самостоятельного обновления моего приложения для Android. Этот код работает на Android 14, но не на Android 10:
Измените, чтобы получить дополнительную информацию:
Сначала я вижу сообщение Загрузка завершена, затем появляется всплывающее окно с сообщением об ошибке:

При синтаксическом анализе пакета возникла проблема.
Скриншот эмулятора (Android 10):
Изображение

Я попробовал изменить application/vnd.android.package-archive на application/octet-stream, ошибка не появилась, но установка не началась. Только сообщение «Загрузить полностью» на обеих версиях Android (10 и 14)
Код:

Код: Выделить всё

private void startDownload() {
// Start downloading the APK
String destination = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).toString();
String fileName = "newversion.apk";
File dir = new File(destination);

Fuel.INSTANCE.download("https://xxxxxxx/apps/PV-latest.apk", Method.GET, null)
.fileDestination((request, response) -> {
// Return the file where the APK should be saved
return new File(dir, fileName); // Save the file in the specified directory
})
.response((request, response, result) -> {

runOnUiThread(() -> {
Toast.makeText(this, "Download complete", Toast.LENGTH_SHORT).show();
// Start the installation process
installAPK(new File(dir, fileName));
});

return null;
});
}

private void installAPK(File file) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
// For Android Nougat and above, use FileProvider
intent.setDataAndType(FileProvider.getUriForFile(this, getApplicationContext().getPackageName() + ".provider", file), "application/vnd.android.package-archive");
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(intent);
}
Протестировано в эмуляторе и на реальных устройствах с Android 14 (Samsung) и Android 10 (Xiaomi). Обычная установка работает на обоих устройствах.
Разрешения из AndroidManifest.xml: Вот Build.gradle.kts Блок Android:

Код: Выделить всё

android {
namespace = "com.example.xxxx"
compileSdk = 34

defaultConfig {
applicationId = "com.example.xxxx"
minSdk = 27
targetSdk = 34
versionCode = 1
versionName = "1.1.1"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}

buildTypes {
release {
isMinifyEnabled = false
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
signingConfig = signingConfigs.getByName("debug")
}
}

compileOptions {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}

buildFeatures {
viewBinding = true
}
}

Подробнее здесь: https://stackoverflow.com/questions/790 ... oid-10-why
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»