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
83 lines
2.8 KiB
Kotlin
83 lines
2.8 KiB
Kotlin
import java.util.Properties
|
||
import java.io.FileInputStream
|
||
|
||
plugins {
|
||
id("com.android.application")
|
||
// The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins.
|
||
id("dev.flutter.flutter-gradle-plugin")
|
||
}
|
||
|
||
// Release-Signing: android/key.properties (nie committen, siehe .gitignore).
|
||
// Fehlt die Datei (z.B. frischer Checkout ohne Keystore), fällt der Release-
|
||
// Build auf den Debug-Key zurück statt zu scheitern – nur auf dem
|
||
// Build-Rechner (236) ist der echte Release-Keystore hinterlegt.
|
||
val keystorePropertiesFile = rootProject.file("key.properties")
|
||
val keystoreProperties = Properties()
|
||
val hasReleaseKeystore = keystorePropertiesFile.exists()
|
||
if (hasReleaseKeystore) {
|
||
keystoreProperties.load(FileInputStream(keystorePropertiesFile))
|
||
}
|
||
|
||
android {
|
||
namespace = "de.timemaster.timemaster_kiosk"
|
||
compileSdk = 36
|
||
ndkVersion = flutter.ndkVersion
|
||
|
||
compileOptions {
|
||
sourceCompatibility = JavaVersion.VERSION_17
|
||
targetCompatibility = JavaVersion.VERSION_17
|
||
}
|
||
|
||
defaultConfig {
|
||
applicationId = "de.timemaster.timemaster_kiosk"
|
||
minSdk = flutter.minSdkVersion
|
||
targetSdk = flutter.targetSdkVersion
|
||
versionCode = flutter.versionCode
|
||
versionName = flutter.versionName
|
||
}
|
||
|
||
signingConfigs {
|
||
if (hasReleaseKeystore) {
|
||
create("release") {
|
||
keyAlias = keystoreProperties["keyAlias"] as String
|
||
keyPassword = keystoreProperties["keyPassword"] as String
|
||
storeFile = rootProject.file(keystoreProperties["storeFile"] as String)
|
||
storePassword = keystoreProperties["storePassword"] as String
|
||
}
|
||
}
|
||
}
|
||
|
||
buildTypes {
|
||
release {
|
||
signingConfig = if (hasReleaseKeystore) {
|
||
signingConfigs.getByName("release")
|
||
} 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"
|
||
)
|
||
}
|
||
}
|
||
}
|
||
|
||
kotlin {
|
||
compilerOptions {
|
||
jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17
|
||
}
|
||
}
|
||
|
||
flutter {
|
||
source = "../.."
|
||
}
|