feat: ABI-aware auto-update — pick correct per-ABI APK from Gitea
- Android: expose getSupportedAbis/getPrimaryAbi via rulegel/device channel (Build.SUPPORTED_ABIS) - AppUpdateInfo: add apkArm64Url, apkArmv7Url, apkX86_64Url fields + apkUrlForAbi() selector - UpdateService: parse per-ABI APK assets by filename pattern, async assetUrlForCurrentPlatform - app.dart + settings_screen.dart: await new async URL resolver - Bump version to 2.3.8+48
This commit is contained in:
@@ -7,6 +7,9 @@ class AppUpdateInfo {
|
||||
required this.htmlUrl,
|
||||
required this.publishedAt,
|
||||
this.apkUrl,
|
||||
this.apkArm64Url,
|
||||
this.apkArmv7Url,
|
||||
this.apkX86_64Url,
|
||||
this.windowsInstallerUrl,
|
||||
this.portableZipUrl,
|
||||
this.linuxTarGzUrl,
|
||||
@@ -18,13 +21,36 @@ class AppUpdateInfo {
|
||||
final String body;
|
||||
final String htmlUrl;
|
||||
final DateTime? publishedAt;
|
||||
|
||||
/// Generic APK (fat / universal build). Used as a fallback.
|
||||
final String? apkUrl;
|
||||
|
||||
/// Per-ABI APKs produced by `flutter build apk --split-per-abi`.
|
||||
final String? apkArm64Url; // app-arm64-v8a-release.apk
|
||||
final String? apkArmv7Url; // app-armeabi-v7a-release.apk
|
||||
final String? apkX86_64Url; // app-x86_64-release.apk
|
||||
|
||||
final String? windowsInstallerUrl;
|
||||
final String? portableZipUrl;
|
||||
final String? linuxTarGzUrl;
|
||||
|
||||
/// Returns the best APK URL for [abi], falling back to the generic APK.
|
||||
String? apkUrlForAbi(String abi) {
|
||||
if (abi.contains('arm64') || abi == 'arm64-v8a') {
|
||||
return apkArm64Url ?? apkUrl;
|
||||
}
|
||||
if (abi.contains('x86_64')) {
|
||||
return apkX86_64Url ?? apkUrl;
|
||||
}
|
||||
// armeabi-v7a and everything else
|
||||
return apkArmv7Url ?? apkArm64Url ?? apkUrl;
|
||||
}
|
||||
|
||||
bool get hasAssets =>
|
||||
apkUrl != null ||
|
||||
apkArm64Url != null ||
|
||||
apkArmv7Url != null ||
|
||||
apkX86_64Url != null ||
|
||||
windowsInstallerUrl != null ||
|
||||
portableZipUrl != null ||
|
||||
linuxTarGzUrl != null;
|
||||
|
||||
Reference in New Issue
Block a user