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 {
|
} else {
|
||||||
signingConfigs.getByName("debug")
|
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,
|
/// Manuell mit pubspec.yaml synchron halten (siehe timemaster-mobile,
|
||||||
/// gleiche Konvention – kein package_info_plus während aktiver Feldtests).
|
/// 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
|
name: timemaster_kiosk
|
||||||
description: TimeMaster Kiosk – Stempeluhr für Android-Tablets hinter VPN
|
description: TimeMaster Kiosk – Stempeluhr für Android-Tablets hinter VPN
|
||||||
publish_to: 'none'
|
publish_to: 'none'
|
||||||
version: 0.1.8+9
|
version: 0.1.10+11
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
sdk: '>=3.3.0 <4.0.0'
|
sdk: '>=3.3.0 <4.0.0'
|
||||||
|
|||||||
Reference in new issue
Block a user