ODY/app/proguard-rules.pro

94 lines
5.2 KiB
Prolog

# ODY Release Proguard Rules
# ─────────────────────────────────────────────────────────────────────────────
# ── Kotlin ────────────────────────────────────────────────────────────────────
-keep class kotlin.** { *; }
-keep class kotlin.Metadata { *; }
-dontwarn kotlin.**
-keepclassmembers class **$WhenMappings { <fields>; }
-keepclassmembers class kotlin.Lazy { *; }
# ── Kotlin Coroutines ─────────────────────────────────────────────────────────
-keepnames class kotlinx.coroutines.internal.MainDispatcherFactory {}
-keepnames class kotlinx.coroutines.CoroutineExceptionHandler {}
-keepclassmembernames class kotlinx.** {
volatile <fields>;
}
-dontwarn kotlinx.coroutines.**
# ── Jetpack Compose ───────────────────────────────────────────────────────────
-keep class androidx.compose.** { *; }
-keepclassmembers class androidx.compose.** { *; }
-dontwarn androidx.compose.**
# ── ODY Guards (müssen vollständig erhalten bleiben) ─────────────────────────
-keep class de.ody.guards.** { *; }
-keepclassmembers class de.ody.guards.** { *; }
# ── ODY Runtime Interface + Adapter ──────────────────────────────────────────
-keep interface de.ody.runtime.LocalModelRuntime { *; }
-keep class de.ody.runtime.** { *; }
-keepclassmembers class de.ody.runtime.** { *; }
# ── ODY Application + MainActivity ───────────────────────────────────────────
-keep class de.ody.ODYApplication { *; }
-keep class de.ody.app.ODYApplication { *; }
-keep class de.ody.app.MainActivity { *; }
# ── LlamaContext (librnllama.so JNI) Fix direct-mmap3 ─────────────────────
# LlamaContext darf NICHT durch R8/ProGuard umbenannt oder entfernt werden,
# da librnllama.so die Klasse per JNI-Name findet.
-keep class org.nehuatl.llamacpp.** { *; }
-keepclassmembers class org.nehuatl.llamacpp.** { *; }
-keepclassmembers class org.nehuatl.llamacpp.LlamaContext {
public <init>(int, java.util.Map);
public long getContext();
public void setTokenCallback(kotlin.jvm.functions.Function1);
public java.util.Map completion(java.util.Map);
public void stopCompletion();
public boolean isPredicting();
public void release();
native <methods>;
}
-dontwarn org.nehuatl.llamacpp.**
# ── LiteRT-LM (Google AI Edge) ────────────────────────────────────────────────
-keep class com.google.ai.edge.** { *; }
-dontwarn com.google.ai.edge.**
# ── Enum-Klassen vollständig erhalten ─────────────────────────────────────────
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
# ── Data-Klassen (Serialisierung, Reflection) ─────────────────────────────────
-keepclassmembers class * implements java.io.Serializable {
static final long serialVersionUID;
private static final java.io.ObjectStreamField[] serialPersistentFields;
private void writeObject(java.io.ObjectOutputStream);
private void readObject(java.io.ObjectInputStream);
java.lang.Object writeReplace();
java.lang.Object readResolve();
}
# ── Entferne Logging in Release ───────────────────────────────────────────────
-assumenosideeffects class android.util.Log {
public static boolean isLoggable(java.lang.String, int);
public static int v(...);
public static int d(...);
}
# ── Entferne Debug-Assertions ─────────────────────────────────────────────────
-assumenosideeffects class kotlin.jvm.internal.Intrinsics {
static void checkParameterIsNotNull(java.lang.Object, java.lang.String);
static void checkNotNullParameter(java.lang.Object, java.lang.String);
static void checkExpressionValueIsNotNull(java.lang.Object, java.lang.String);
static void checkNotNullExpressionValue(java.lang.Object, java.lang.String);
static void checkReturnedValueIsNotNull(java.lang.Object, java.lang.String, java.lang.String);
static void checkReturnedValueIsNotNull(java.lang.Object, java.lang.String);
static void throwUninitializedPropertyAccessException(java.lang.String);
static void throwNpe(java.lang.String);
static void throwJavaNpe();
static void throwIfNull(java.lang.Object, java.lang.String);
}