diff --git a/android/app/build.gradle b/android/app/build.gradle index 7e8883b..3dc0a04 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -53,9 +53,13 @@ android { buildTypes { release { + signingConfig signingConfigs.debug + minifyEnabled true + shrinkResources true + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), + 'proguard-rules.pro' // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig signingConfigs.debug } } } diff --git a/android/app/proguard-rules.pro b/android/app/proguard-rules.pro new file mode 100644 index 0000000..1cf3f18 --- /dev/null +++ b/android/app/proguard-rules.pro @@ -0,0 +1,77 @@ +# Keep Flutter embedding and plugin registrant (important) +-keep class io.flutter.embedding.** { *; } +-keep class io.flutter.plugins.** { *; } +-keep class io.flutter.plugin.** { *; } +-keep class io.flutter.app.** { *; } + +# Keep Application / Activity if you customized them (replace with your package name) +# -keep class com.yourcompany.yourapp.MainActivity { *; } +# -keep class com.yourcompany.yourapp.** { *; } + +# Keep classes referenced from AndroidManifest via reflection or lifecycle +-keepclassmembers class * { + @android.webkit.JavascriptInterface ; + public (android.content.Context, ...); +} + +# Keep native entry points (JNI) if any (example) +-keepclasseswithmembernames class * { + native ; +} + +# Keep classes that use reflection heavily (OKHttp/Retrofit/Gson) +# Retrofit/OkHttp +-keep class okhttp3.** { *; } +-keep interface okhttp3.** { *; } +-keep class retrofit2.** { *; } +-keep interface retrofit2.** { *; } + +# Gson (models accessed by reflection) +-keep class com.google.gson.** { *; } +-keepattributes Signature +-keepattributes *Annotation* + +# Keep Firebase (if you use it) +-keep class com.google.firebase.** { *; } +-keep class com.google.android.gms.** { *; } + +# WorkManager (if used) +-keep class androidx.work.impl.background.systemjob.SystemJobService { *; } +-keep class androidx.work.** { *; } + +# Room/DB entities - if you use Room, keep annotations and entity classes +-keepclassmembers class * { + @androidx.room.* ; +} +-keep class androidx.room.** { *; } + +# Keep classes loaded by reflection (e.g. through Class.forName) +-keepclassmembers,includedescriptorclasses class * { + public static ; + public (...); +} + +# Keep Kotlin metadata (for Kotlin reflection) +-keep class kotlin.Metadata { *; } + +# Keep names of classes annotated with @Keep +-keep @androidx.annotation.Keep class * { *; } +-keepclassmembers class * { + @androidx.annotation.Keep *; +} + +# If using Gson TypeAdapterFactory via reflection +-keepclassmembers class * { + static ** typeAdapterFactory*(...); +} + +# Don't remove debug/logging if you want (optional) +#-keep class android.util.Log { *; } + +# Keep any generated plugin registrant classes if present (older projects) +-keep class io.flutter.plugins.GeneratedPluginRegistrant { *; } + +# (Optional) Keep parcelable implementations if those are serialized dynamically +-keep class * implements android.os.Parcelable { + public static final android.os.Parcelable$Creator *; +} \ No newline at end of file