fix(qr-scan): R8/ProGuard zerstörte ML-Kit-Komponenten-Registrierung
Root Cause endlich gefunden (via adb-Logcat auf echtem T10-Pro-Tablet): NICHT primär ein Hardware/CameraX-Problem, sondern R8-Minifizierung im Release-Build ohne Keep-Regeln für ML Kit (mobile_scanner nutzt Reflection- basierte Komponenten-Registrierung, ComponentDiscovery). Log zeigte "NoSuchMethodException: ...BarcodeRegistrar.<init> []" → in Folge NullPointerException beim eigentlichen Scan-Callback. Fix: android/app/build.gradle.kts explizit isMinifyEnabled=true + proguardFiles inkl. neuer android/app/proguard-rules.pro mit ML-Kit-Keep- Regeln. Damit war auch der vorherige Downgrade auf mobile_scanner 5.2.3 unnötig – zurück auf ^6.0.2, funktioniert jetzt mit den Keep-Regeln einwandfrei (auf echtem Gerät verifiziert). Die vorherige cameraResolution/formats-Einschränkung (v0.1.8) war ein Fehlschluss (Symptom sah nach Hardware-Inkompatibilität aus), bleibt aber als sinnvolle Optimierung bestehen (weniger Codec-Last). v0.1.10+11, deployed 137, release-signiert (gleicher Fingerprint). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Dzdm3EWeNdYFUuXFRJryA1
This commit is contained in:
1 parent
1e05f7b929
commit
5b8bfeb4b0
4 files changed
+26
-2
No files matched your search
@@ -54,6 +54,19 @@ android {
|
||||
} else {
|
||||
signingConfigs.getByName("debug")
|
||||
}
|
||||
// R8 lief bereits implizit (Standard-Verhalten des Flutter-
|
||||
// Gradle-Plugins für Release-Builds) und zerstörte ohne
|
||||
// proguard-rules.pro die Reflection-basierte Komponenten-
|
||||
// Registrierung von ML Kit (mobile_scanner) – führte zu
|
||||
// "NoSuchMethodException: ...Registrar.<init> []" und in Folge
|
||||
// zu NullPointerExceptions beim Scannen. Jetzt explizit mit
|
||||
// passenden Keep-Regeln statt implizit ohne.
|
||||
isMinifyEnabled = true
|
||||
isShrinkResources = true
|
||||
proguardFiles(
|
||||
getDefaultProguardFile("proguard-android-optimize.txt"),
|
||||
"proguard-rules.pro"
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Vendored
+11
@@ -0,0 +1,11 @@
|
||||
# ML Kit (mobile_scanner) registriert seine Komponenten zur Laufzeit per
|
||||
# Reflection (No-Arg-Konstruktor). R8 entfernt/obfuskiert diese ohne Keep-
|
||||
# Regeln, was zu "NoSuchMethodException: ...Registrar.<init> []" und in
|
||||
# Folge zu NullPointerExceptions beim eigentlichen Scan führt (siehe
|
||||
# Kiosk-App v0.1.8/0.1.9-Debugging, echtes Tablet – nicht nur Hardware-Bug).
|
||||
-keep class com.google.mlkit.** { *; }
|
||||
-keep interface com.google.mlkit.** { *; }
|
||||
-keep class com.google.android.gms.internal.mlkit_vision_barcode.** { *; }
|
||||
-keep class * extends com.google.mlkit.common.internal.MlKitComponentDiscoveryService {
|
||||
<init>();
|
||||
}
|
||||
@@ -1,3 +1,3 @@
|
||||
/// Manuell mit pubspec.yaml synchron halten (siehe timemaster-mobile,
|
||||
/// gleiche Konvention – kein package_info_plus während aktiver Feldtests).
|
||||
const String kAppVersion = '0.1.8+9';
|
||||
const String kAppVersion = '0.1.10+11';
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
name: timemaster_kiosk
|
||||
description: TimeMaster Kiosk – Stempeluhr für Android-Tablets hinter VPN
|
||||
publish_to: 'none'
|
||||
version: 0.1.8+9
|
||||
version: 0.1.10+11
|
||||
|
||||
environment:
|
||||
sdk: '>=3.3.0 <4.0.0'
|
||||
|
||||
Reference in new issue
Block a user