瀏覽代碼

混淆配置

lhm 3 年之前
父節點
當前提交
c1b12dc56a
共有 2 個文件被更改,包括 138 次插入3 次删除
  1. 2 2
      app/build.gradle
  2. 136 1
      app/proguard-rules.pro

+ 2 - 2
app/build.gradle

@@ -33,13 +33,13 @@ android {
 
     buildTypes {
         release {
-            minifyEnabled false
+            minifyEnabled true
             proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
             buildConfigField "String", "EMQX_HOST", "\"tcp://8.135.102.238:1883\""
             buildConfigField "String", "ICSP_HOST", "\"http://icsp-api.ds-bay.com\""
         }
         debug {
-            minifyEnabled false
+            minifyEnabled true
             proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
             buildConfigField "String", "EMQX_HOST", "\"tcp://183.3.221.143:1883\""
             buildConfigField "String", "ICSP_HOST", "\"http://icsp-testend.ds-bay.com\""

+ 136 - 1
app/proguard-rules.pro

@@ -18,4 +18,139 @@
 
 # If you keep the line number information, uncomment this to
 # hide the original source file name.
-#-renamesourcefileattribute SourceFile
+#-renamesourcefileattribute SourceFile
+
+# 代码混淆压缩比,在0~7之间,默认为5,一般不下需要修改
+-optimizationpasses 5
+
+## 混淆时不使用大小写混合,混淆后的类名为小写
+## windows下的同学还是加入这个选项吧(windows大小写不敏感)
+-dontusemixedcaseclassnames
+#
+## 指定不去忽略非公共的库的类
+## 默认跳过,有些情况下编写的代码与类库中的类在同一个包下,并且持有包中内容的引用,此时就需要加入此条声明
+-dontskipnonpubliclibraryclasses
+#
+## 指定不去忽略非公共的库的类的成员
+-dontskipnonpubliclibraryclassmembers
+
+# 不做预检验,preverify是proguard的四个步骤之一
+# Android不需要preverify,去掉这一步可以加快混淆速度
+-dontpreverify
+
+# 有了verbose这句话,混淆后就会生成映射文件
+-verbose
+#apk 包内所有 class 的内部结构
+-dump class_files.txt
+#未混淆的类和成员
+-printseeds seeds.txt
+#列出从 apk 中删除的代码
+-printusage unused.txt
+#混淆前后的映射
+-printmapping mapping.txt
+
+# 指定混淆时采用的算法,后面的参数是一个过滤器
+# 这个过滤器是谷歌推荐的算法,一般不改变
+-optimizations !code/simplification/artithmetic,!field/*,!class/merging/*
+
+# 保护代码中的Annotation不被混淆
+# 这在JSON实体映射时非常重要,比如fastJson
+-keepattributes *Annotation*
+
+# 避免混淆泛型
+# 这在JSON实体映射时非常重要,比如fastJson
+-keepattributes Signature
+
+# 抛出异常时保留代码行号
+-keepattributes SourceFile,LineNumberTable
+
+# 实体类不混淆
+-keep class com.emato.ich.entity.** {*;}
+
+# 不需要混淆的安卓类
+-keep public class * extends android.app.Fragment
+-keep public class * extends android.app.Activity
+-keep public class * extends android.app.Application
+-keep public class * extends android.app.Service
+-keep public class * extends android.content.BroadcastReceiver
+-keep public class * extends android.preference.Preference
+-keep public class * extends android.content.ContentProvider
+-keep public class * extends android.app.backup.BackupAgentHelper
+-keep public class * extends android.preference.Preference
+-keep public class * extends android.view.View
+
+# support下所有类及其内部类
+-keep class android.support.** {*;}
+-dontwarn android.support.**
+-keep interface android.support.** { *; }
+
+# androidx
+-keep class androidx.** {*;}
+-keep interface androidx.** {*;}
+-keep public class * extends androidx.**
+-dontwarn androidx.**
+
+# support v4/7库
+-keep public class * extends android.support.v4.**
+-keep public class * extends android.support.v7.**
+-keep public class * extends android.support.annotation.**
+
+# support design库
+-dontwarn android.support.design.**
+-keep class android.support.design.** { *; }
+-keep interface android.support.design.** { *; }
+-keep public class android.support.design.R$* { *; }
+
+# androidx
+-keep class com.google.android.material.** {*;}
+-dontwarn com.google.android.material.**
+-dontnote com.google.android.material.**
+
+# 资源文件
+-keep class **.R$* {*;}
+
+# 避免layout中onClick方法混淆(android:onclick="onClick")
+-keepclassmembers class * extends android.app.Activity{
+    public void *(android.view.View);
+}
+
+# 避免回调函数 onXXEvent混淆
+-keepclassmembers class * {
+    void *(*Event);
+}
+
+# 避免枚举混淆
+-keepclassmembers enum * {
+    public static **[] values();
+    public static ** valueOf(java.lang.String);
+}
+
+# Native方法不混淆
+-keepclasseswithmembernames class * {
+    native <methods>;
+}
+
+# 避免Parcelable混淆
+-keep class * implements android.os.Parcelable {
+  public static final android.os.Parcelable$Creator *;
+}
+
+# 避免Serializable接口的子类中指定的某些成员变量和方法混淆
+-keepclassmembers class * implements java.io.Serializable {
+    static final long serialVersionUID;
+    private static final java.io.ObjectStreamField[] serialPersistentFields;
+    !static !transient <fields>;
+    private void writeObject(java.io.ObjectOutputStream);
+    private void readObject(java.io.ObjectInputStream);
+    java.lang.Object writeReplace();
+    java.lang.Object readResolve();
+}
+
+# 避免okhttp3混淆
+-dontwarn com.squareup.okhttp3.**
+-keep class com.squareup.okhttp3.** { *;}
+-dontwarn okio.**
+
+# 避免小铁sdk混淆
+-keep class com.cherry.sdk.** { *; }
+-keep class com.cherry.sdk.**