Files
timemaster-kiosk/android/app/build.gradle.kts
T
patrickandClaude Sonnet 5 5b8bfeb4b0 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
2026-09-10 14:43:06 +02:00

83 lines
2.8 KiB
Kotlin
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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 = "../.."
}