55# For more details, see
66# http://developer.android.com/guide/developing/tools/proguard.html
77
8+ # Aggressive optimization settings
9+ -optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/*,!code/allocation/variable
10+ -optimizationpasses 7
11+ -allowaccessmodification
12+ -dontusemixedcaseclassnames
13+ -dontskipnonpubliclibraryclasses
14+ -verbose
15+
816# If your project uses WebView with JS, uncomment the following
917# and specify the fully qualified class name to the JavaScript interface
1018# class:
2634-keep class com.fadcam.data.** { <fields>; }
2735-keep class com.fadcam.trash.** { <fields>; }
2836
29- # Keep menu resources and drawables
30- -keep class **.R$drawable
31- -keep class **.R$menu
32- -keep class **.R$layout
33- -keep class **.R$id
34- -keepclassmembers class **.R$* {
35- public static <fields>;
36- }
37-
38- # More specific rules for preserving resources referenced in XML
39- -keepclasseswithmembers class **.R$drawable {
40- public static final int ic_*;
41- }
42-
43- # Keep all drawable resources
44- -keep public class * extends android.graphics.drawable.Drawable
45- -keepclassmembers class * extends android.graphics.drawable.Drawable {
46- <init>(...);
37+ # Keep only necessary resources - this is critical for icons to display properly
38+ # Instead of keeping all resources, keep only what's needed
39+ -keep class **.R$drawable { *; }
40+ -keep class **.R$mipmap { *; }
41+ -keep class **.R$id { *; }
42+ -keep class **.R$menu { *; }
43+ -keep class **.R$layout { *; }
44+ -keep class **.R$string { *; }
45+ -keep class **.R$style { *; }
46+ -keep class **.R$styleable { *; }
47+ -keep class **.R$color { *; }
48+ -keep class **.R$dimen { *; }
49+ -keep class **.R$attr { *; }
50+ -keep class **.R$bool { *; }
51+ -keep class **.R$integer { *; }
52+ -keep class **.R$array { *; }
53+ -keep class **.R$raw { *; }
54+ -keep class **.R$xml { *; }
55+
56+ # FFmpeg specific rules - more aggressive
57+ -keep class com.arthenica.ffmpegkit.FFmpegKit { *; }
58+ -keep class com.arthenica.ffmpegkit.FFmpegKitConfig { *; }
59+ -keep class com.arthenica.ffmpegkit.FFprobeKit { *; }
60+ -keep class com.arthenica.ffmpegkit.MediaInformation { *; }
61+ -keep class com.arthenica.ffmpegkit.MediaInformationSession { *; }
62+ -keep class com.arthenica.ffmpegkit.ReturnCode { *; }
63+ -keep class com.arthenica.ffmpegkit.Session { *; }
64+ -keep class com.arthenica.ffmpegkit.SessionState { *; }
65+ -keep class com.arthenica.ffmpegkit.Statistics { *; }
66+ -keep class com.arthenica.smartexception.java.Exceptions { *; }
67+ -dontwarn com.arthenica.ffmpegkit.**
68+ -keep class com.fadcam.utils.FFmpegUtil { *; }
69+
70+ # Keep only essential drawable resources
71+ -keep public class * extends android.graphics.drawable.Drawable {
72+ public <init>(...);
4773}
4874
49- # Keep all menu-related resources and layouts
50- -keep public class * extends android.view.Menu
51- -keep public class * extends android.view.MenuItem
52- -keep public class * extends android.widget.PopupMenu
53- -keep public class * extends android.view.ContextMenu
54-
55- # Keep custom views
75+ # Keep only essential view methods
5676-keep public class * extends android.view.View {
5777 public <init>(android.content.Context);
5878 public <init>(android.content.Context, android.util.AttributeSet);
6585 native <methods>;
6686}
6787
68- # Keep all resources referenced from XML layouts
69- -keepclasseswithmembers class * {
70- public <init>(android.content.Context, android.util.AttributeSet);
71- }
72-
73- -keepclasseswithmembers class * {
74- public <init>(android.content.Context, android.util.AttributeSet, int);
88+ # Keep only essential AndroidX components
89+ -keep class androidx.appcompat.widget.** { *; }
90+ -keep class androidx.appcompat.app.** { *; }
91+ -keep class androidx.core.widget.** { *; }
92+ -keep class androidx.fragment.app.** { *; }
93+ -keep class androidx.recyclerview.widget.** { *; }
94+ -keep class androidx.viewpager2.widget.** { *; }
95+ -keep class androidx.constraintlayout.widget.** { *; }
96+ -keep class androidx.coordinatorlayout.widget.** { *; }
97+ -keep class androidx.swiperefreshlayout.widget.** { *; }
98+ -keep class androidx.camera.** { *; }
99+ -dontwarn androidx.**
100+
101+ # Keep Material components - only essential ones
102+ -keep class com.google.android.material.bottomsheet.** { *; }
103+ -keep class com.google.android.material.bottomnavigation.** { *; }
104+ -keep class com.google.android.material.navigation.** { *; }
105+ -keep class com.google.android.material.floatingactionbutton.** { *; }
106+ -keep class com.google.android.material.snackbar.** { *; }
107+ -keep class com.google.android.material.tabs.** { *; }
108+ -dontwarn com.google.android.material.**
109+
110+ # Preserve attributes for Android runtime - only essential ones
111+ -keepattributes SourceFile,LineNumberTable,*Annotation*,Signature,InnerClasses,EnclosingMethod
112+
113+ # Keep Lottie animations - only essential classes
114+ -keep class com.airbnb.lottie.LottieAnimationView { *; }
115+ -keep class com.airbnb.lottie.LottieDrawable { *; }
116+ -keep class com.airbnb.lottie.LottieComposition { *; }
117+ -keep class com.airbnb.lottie.LottieCompositionFactory { *; }
118+ -keep class com.airbnb.lottie.LottieResult { *; }
119+ -dontwarn com.airbnb.lottie.**
120+
121+ # Keep ExoPlayer - only essential classes
122+ -keep class com.google.android.exoplayer2.ExoPlayer { *; }
123+ -keep class com.google.android.exoplayer2.SimpleExoPlayer { *; }
124+ -keep class com.google.android.exoplayer2.ui.** { *; }
125+ -keep class com.google.android.exoplayer2.source.** { *; }
126+ -keep class com.google.android.exoplayer2.extractor.** { *; }
127+ -keep class com.google.android.exoplayer2.upstream.** { *; }
128+ -keep class com.google.android.exoplayer2.decoder.** { *; }
129+ -keep class com.google.android.exoplayer2.Format { *; }
130+ -keep class com.google.android.exoplayer2.MediaItem { *; }
131+ -dontwarn com.google.android.exoplayer2.**
132+
133+ # Keep OSMDroid - only essential classes
134+ -keep class org.osmdroid.views.** { *; }
135+ -keep class org.osmdroid.tileprovider.** { *; }
136+ -keep class org.osmdroid.util.** { *; }
137+ -dontwarn org.osmdroid.**
138+
139+ # Remove Android logging code
140+ -assumenosideeffects class android.util.Log {
141+ public static *** d(...);
142+ public static *** v(...);
143+ public static *** i(...);
144+ public static *** w(...);
145+ public static *** e(...);
75146}
76147
77- # Preserve the special static fields of all resource classes in the R class
78- -keepclassmembers class **.R$* {
79- public static <fields>;
80- }
81-
82- # Prevent stripping off any resources/attributes referenced in XML
83- -keep public class * extends android.content.res.Resources$Theme
84- -keepclassmembers class * extends android.content.res.Resources$Theme {
85- <methods>;
86- }
87-
88- # Preserve the special static methods that are called by the Android runtime
89- -keepclassmembers class * {
90- void <init>(android.content.Context);
91- }
92-
93- # Preserve attributes for Android runtime
94- -keepattributes SourceFile,LineNumberTable
95-
96- # If you keep the line number information, uncomment this to
97- # hide the original source file name.
98- #-renamesourcefileattribute SourceFile
99-
100- # Keep all model classes used with Gson
101- -keep class com.faded.fadcam.model.** { *; }
102-
103- # Keep Gson stuff
104- -keep class com.google.gson.** { *; }
105- -keep class com.google.gson.reflect.** { *; }
106- -keepattributes Signature
107- -keepattributes *Annotation*
108-
109- # Keep R classes - prevents resource stripping issues
110- -keep class **.R
111- -keep class **.R$* {
112- <fields>;
113- }
114-
115- # Keep drawables
116- -keep class **.R$drawable
117-
118- # Keep menus
119- -keep class **.R$menu
120-
121- # Keep layouts
122- -keep class **.R$layout
123-
124- # Keep AndroidX stuff
125- -keep class androidx.** { *; }
126- -keep interface androidx.** { *; }
127- -keep public class * extends androidx.**
128-
129- # Keep native methods
130- -keepclasseswithmembernames class * {
131- native <methods>;
132- }
133-
134- # Keep view stuff
135- -keep public class * extends android.view.View {
136- public <init>(android.content.Context);
137- public <init>(android.content.Context, android.util.AttributeSet);
138- public <init>(android.content.Context, android.util.AttributeSet, int);
139- public void set*(...);
148+ # Remove System.out/err
149+ -assumenosideeffects class java.io.PrintStream {
150+ public void println(...);
151+ public void print(...);
140152}
141153
142- # Only optimize the app minimally
143- -optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/*
144- -optimizationpasses 2
154+ # Aggressive optimization settings
155+ -repackageclasses ''
156+ -flattenpackagehierarchy ''
157+ -mergeinterfacesaggressively
0 commit comments