Приведенная ниже функция работает нормально, но при обновлении приложения возникают проблемы. В частности, если у меня уже установлена неразделенная версия APK, а затем я пытаюсь выполнить обновление до последней версии, устройство проверяет свой ABI и загружает соответствующий APK. Однако во время установки я получаю сообщение об ошибке «Приложение не установлено» из-за несовместимости форматов APK. Например, эта ошибка возникает при наличии полного APK-файла и последующей загрузке разделенного APK. Эта проблема затрагивает все сценарии APK/ABI, что делает эту функцию непрактичной.
Вот мой код:
Код: Выделить всё
/**
* Checks for updates of the app and shows a dialog to update if a new version is available.
*
*
*
* Example:
* ```dart
* checkForUpdates(context);
* ```
*/
Future checkForUpdates(BuildContext context) async {
// Get the current app version
String currentAppVersion = await getCurrentAppVersion();
print("the current package version: $currentAppVersion");
// Get the list of supported ABIs (Application Binary Interfaces) of the device
List supportedAbis = await getDeviceABIs();
// Create an instance of the FeatureService
final FeatureService featureService = FeatureService();
// Fetch the app update content from the server
List appUpdateContent = await featureService.fetchAppUpdate(context);
// Initialize variables to store the latest version and APK URL
String apkUrl = '';
String latestVersion = '';
// Iterate through the app update content
for (AppUpdate appUpdateInfo in appUpdateContent) {
print("the latest package version: ${appUpdateInfo.appVersion}");
// Check if the app update is the latest version and is newer than the current version
if (appUpdateInfo.isLatest && appUpdateInfo.appVersion.compareTo(currentAppVersion) > 0) {
// Update the latest version and APK URL based on the device's ABI
latestVersion = appUpdateInfo.appVersion;
if (supportedAbis.contains("arm64-v8a")) {
// Use the arm64-v8a APK URL
apkUrl = appUpdateInfo.arm64_v8a;
} else if (supportedAbis.contains("armeabi-v7a")) {
// Use the armeabi-v7a APK URL
apkUrl = appUpdateInfo.armeabi_v7a;
} else if (supportedAbis.contains("x86_64")) {
// Use the x86_64 APK URL
apkUrl = appUpdateInfo.x86_64;
} else {
// Use the release APK URL as a fallback
apkUrl = appUpdateInfo.release;
return; // Exit the function early
}
}
}
// Check if a new version is available
if (latestVersion.compareTo(currentAppVersion) > 0) {
// Show the update dialog and handle the download process
showUpdateDialog(apkUrl, latestVersion);
}
}
Подробнее здесь: https://stackoverflow.com/questions/786 ... -arm64-v8a