写好的混淆规则proguard-rules.pro

  • Post author:
  • Post category:其他


# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
#   http://developer.android.com/guide/developing/tools/proguard.html

# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
#   public *;
#}

# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable

# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile

#指定压缩级别
-optimizationpasses 5

#不跳过非公共的库的类成员
-dontskipnonpubliclibraryclassmembers

#混淆时采用的算法
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

#把混淆类中的方法名也混淆了
-useuniqueclassmembernames

#优化时允许访问并修改有修饰符的类和类的成员
-allowaccessmodification

#将文件来源重命名为“SourceFile”字符串
-renamesourcefileattribute SourceFile
#保留行号
-keepattributes SourceFile,LineNumberTable

-keepattributes *Annotation*,InnerClasses #保留注解不混淆
-keepattributes Signature # 避免混淆泛型
-keepattributes SourceFile,LineNumberTable# 抛出异常时保留代码行号


#混淆时不使用大小写混合类名
-dontusemixedcaseclassnames

#不跳过library中的非public的类
-dontskipnonpubliclibraryclasses

#打印混淆的详细信息
-verbose


#保留native方法的类名和方法名

-keepclasseswithmembernames class * {
    native <methods>;
}


#--------------------------------------------- 公共配置 End ----------------------------------------#


#保持所有实现 Serializable 接口的类成员
-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();
}

#所有实体类都保持住
-keep public class com.xxx.models.** {*;}

#Fragment不需要在AndroidManifest.xml中注册,需要额外保护下
-keep public class * extends android.support.v4.app.Fragment
-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.support.multidex.MultiDexApplication
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-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
-keep public class * extends com.plan_solve.farmlandassistant.activitys.CheckPermissionsActivity
-keep class android.support.** {*;}## 保留support下的所有类及其内部类

# 保留我们自定义控件(继承自View)不被混淆
-keep public class * extends android.view.View{
    *** get*();
    void set*(***);
    public <init>(android.content.Context);
    public <init>(android.content.Context, android.util.AttributeSet);
    public <init>(android.content.Context, android.util.AttributeSet, int);
}

#webView需要进行特殊处理
-keepclassmembers class com.plan_solve.farmlandassistant.activitys.indent.MyWebViewActivity {
    public *;
}
-keepclassmembers class * extends android.webkit.WebViewClient {
    public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap);
    public boolean *(android.webkit.WebView, java.lang.String);
}
-keepclassmembers class * extends android.webkit.WebViewClient {
    public void *(android.webkit.WebView, jav.lang.String);
}
#在app中与HTML5的JavaScript的交互进行特殊处理 #我们需要确保这些js要调用的原生方法不能够被混淆,于是我们需要做如下处理:
#-keepclassmembers class com.ljd.example.JSInterface {
#<methods>;
#}


-keep public class [com.plan_solve.farmlandassistant].R$*{
    public static final int *;
}
-keepclassmembers class * {
   public <init> (org.json.JSONObject);
}
-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}
#--------------------------2.第三方包-------------------------------

################pickerview###############
#https://github.com/zaaach/CityPicker
-keep class com.zaaach.citypicker.**{
   *;
}
#https://github.com/crazyandcoder/citypicker
-keep class com.lljjcoder.**{
   *;
}
-dontwarn demo.**
-keep class demo.**{*;}
-dontwarn net.sourceforge.pinyin4j.**
-keep class net.sourceforge.pinyin4j.**{*;}
-keep class net.sourceforge.pinyin4j.format.**{*;}
-keep class net.sourceforge.pinyin4j.format.exception.**{*;}

#fastJson
-dontwarn com.plan_solve.farmlandassistant.okhttp.**
-keep class com.plan_solve.farmlandassistant.okhttp.** { *; }

#Gson
-keepattributes Signature
-keepattributes *Annotation*
-keep class sun.misc.Unsafe { *; }
-keep class com.google.gson.stream.** { *; }
-keep class com.google.gson.examples.android.model.** { *; }
-keep class com.google.gson.* { *;}
-dontwarn com.google.gson.**

# 3D 地图 V5.0.0之前:
-keep   class com.amap.api.maps.**{*;}
-keep   class com.autonavi.amap.mapcore.*{*;}
-keep   class com.amap.api.trace.**{*;}

# 3D 地图 V5.0.0之后:
-keep   class com.amap.api.maps.**{*;}
-keep   class com.autonavi.**{*;}
-keep   class com.amap.api.trace.**{*;}

# 定位
-keep class com.amap.api.location.**{*;}
-keep class com.amap.api.fence.**{*;}
-keep class com.autonavi.aps.amapapi.model.**{*;}

# 搜索
-keep   class com.amap.api.services.**{*;}

# 2D地图
-keep class com.amap.api.maps2d.**{*;}
-keep class com.amap.api.mapcore2d.**{*;}

# 导航
-keep class com.amap.api.navi.**{*;}
-keep class com.autonavi.**{*;}

# 保持测试相关的代码
-dontnote junit.framework.**
-dontnote junit.runner.**
-dontwarn android.test.**
-dontwarn android.support.test.**
-dontwarn org.junit.**

# ============忽略警告,否则打包可能会不成功=============
-ignorewarnings

##记录生成的日志数据,gradle build时在本项目根目录输出##
#apk 包内所有 class 的内部结构
-dump proguard/class_files.txt
#未混淆的类和成员
-printseeds proguard/seeds.txt
#列出从 apk 中删除的代码
-printusage proguard/unused.txt
#混淆前后的映射
-printmapping proguard/mapping.txt
########记录生成的日志数据,gradle build时 在本项目根目录输出-end######

以下为第二个参考文件:

# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in /Users/jerry/dev/sdk/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the proguardFiles
# directive in build.gradle.
#
# For more details, see
#   http://developer.android.com/guide/developing/tools/proguard.html

# Add any project specific keep options here:

# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
#   public *;
#}

# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable

# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile

# 表示不要提示警告
-dontwarn
-dontoptimize
# 代码循环优化次数,0-7,默认为5
-optimizationpasses 5
# 包名不使用大小写混合 aA Aa
-dontusemixedcaseclassnames
# 不混淆第三方引用的库
-dontskipnonpubliclibraryclasses
# 不做预校验
-dontpreverify
#忽略警告
-ignorewarnings
#混淆时所采用的优化规则
#-optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/*,!class/unboxing/enum

# 混淆后生产映射文件 map 类名->转化后类名的映射
# 存放在app\build\outputs\mapping\release中
-verbose
# 混淆前后的映射
-printmapping mapping.txt
# apk 包内所有 class 的内部结构
-dump class_files.txt
# 未混淆的类和成员
-printseeds seeds.txt
# 列出从 apk 中删除的代码
-printusage unused.txt

# 抛出异常时保留代码行号
# 这个最后release的时候关闭掉
-keepattributes SourceFile,LineNumberTable

# 保护注解
-keepattributes *Annotation*
-keep class * extends java.lang.annotation.Annotation {*;}

# 泛型与反射
-keepattributes Signature
-keepattributes EnclosingMethod

# 不混淆内部类
-keepattributes InnerClasses

# 不混淆异常类
-keepattributes Exceptions
-keepclassmembers enum * {
    public static ** values();
    public static ** valueOf(java.lang.String);
}
#基本组件白名单
-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.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class * extends android.os.RemoteCallbackList
-keep class cn.com.arise.activity.live.bean.**{ *;}
-keep class cn.com.arise.bean.**{ *;}
-keep class cn.com.arise.http.**{ *;}
-keep class cn.com.arise.dao.**{ *;}
-keep class org.**{ *;}
-keep class okhttp3.**{ *;}
-keep class okio.**{ *;}
-keep class com.qq.mta.**{ *;}
-keep class com.tencent.stat.**{ *;}
-keep class com.squareup.haha.**{ *;}
-keep class http.**{ *;}
-keep class internal.**{ *;}
#GlxssLiveSDK
-keep class com.llvision.glxsslivesdk.**{ *;}
-keep class com.llvision.logger.**{*;}
-keep class io.agora.**{*;}
-keep class rongcloudrtc.**{*;}
-keep class io.rong.**{*;}
-keep class com.colors.ocs.**{*;}
-keep class cn.rongcloud.rtc.**{*;}

#人脸微服务
-keep class com.llvision.glass3.microservice.**{*;}
-keep class com.llvision.glass3.**{*;}
#个推
-keep class com.huawei.**{ *;}
-keep class com.igexin.**{ *;}
-keep class com.meizu.cloud.**{ *;}
-keep class com.getui.jcenter_sdk.**{ *;}
-keep class com.xiaomi.**{ *;}
-keep class com.llvision.**{ *;}

#语音包
-keep class com.iflytek.**{ *;}
-keepattributes Signature
-keep class com.litesuits.**{ *;}
-keep class com.jcraft.jsch.**{ *;}
-keep class com.bumptech.glide.**{ *;}

#snips

-keep class ai.snips.**{ *;}
-keep class com.sun.jna.**{ *;}

-keep class com.tencent.**{*;}
## 如果有引用v4包可以添加下面这行
-keep  class  android.support.**
## 如果引用了v4或者v7包
-dontwarn android.support.**

# 指定不混淆所有的JNI方法
-keepclasseswithmembernames class * {
    native <methods>;
}

-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet);
}

-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet, int);
}

# 所有View的子类及其子类的get、set方法都不进行混淆
-keepclassmembers public class * extends android.view.View {
   void set*(***);
   *** get*();
}

#不混淆Activity中参数类型为View的所有方法
-keepclassmembers class * extends android.app.Activity {
   public void *(android.view.View);
}

#不混淆Enum类型的指定方法
-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}

#不混淆Parcelable和它的子类,还有Creator成员变量
-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;
    private void writeObject(java.io.ObjectOutputStream);
    private void readObject(java.io.ObjectInputStream);
    java.lang.Object writeReplace();
    java.lang.Object readResolve();
}

#不混淆R类里及其所有内部static类中的所有static变量字段
-keepclassmembers class **.R$* {
    public static <fields>;
}

# bugly
-dontwarn com.tencent.bugly.**
-keep public class com.tencent.bugly.**{*;}

-keep class net.sqlcipher.**{*;}
#greendao 3
-keepclassmembers class * extends org.greenrobot.greendao.AbstractDao {
    public static java.lang.String TABLENAME;
}
-keep class **$Properties

-keep class com.litesuits.orm.**{ *;}
-keep class com.jcraft.jsch.**{ *;}
-keep class com.sun.**{ *;}

-keep class com.baidu.** {*;}
-keep class mapsdkvi.com.** {*;}
-dontwarn com.baidu.**

-keep class com.didi.virtualapk.internal.VAInstrumentation { *; }
-keep class com.didi.virtualapk.internal.PluginContentResolver { *; }
-dontwarn com.didi.virtualapk.**
-dontwarn android.content.pm.**
-keep class android.** { *; }
-keep class com.llvision.im.imservice.**{*;}
-keep class com.llvision.android.**{*;}
-keep class com.didi.**{*;}

#imService
-keep class com.llvision.im.imservice.dao.**{*;}
-keep class com.llvision.im.imservice.model.**{*;}
-keep class com.llvision.im.imservice.**{*;}
# minio
-dontwarn io.minio.**
-keep class io.minio.** {*;}
#远哲推流#
-dontwarn com.example.ndkdemo.**
-keep class com.example.ndkdemo.**{*;}
#utilcode#
-dontwarn com.blankj.utilcode.**
-keep class com.blankj.utilcode.constant.**{*;}
-keep class com.blankj.utilcode.util.**{*;}
-keep class com.etop.plate.**{*;}

-keep class com.llvision.android.**{*;}
-keep class com.alibaba.sdk.android.**{*;}
-dontwarn com.qihoo360.**
-keep class com.qihoo360.**{*;}
-dontwarn com.guide.guidecore.**
-keep class com.guide.guidecore.** {*;}
#删除Log打印
#-assumenosideeffects class android.util.Log {
#    public static *** d(...);
#    public static *** v(...);
#    public static *** i(...);
#    public static *** w(...);
#}
# SDK model
-keep class com.herewhite.** { *; }
-keepattributes  *JavascriptInterface*
-keepattributes Signature
# Gson specific classes
-keep class sun.misc.Unsafe { *; }
-keep class com.google.gson.stream.** { *; }
# Application classes that will be serialized/deserialized over Gson
-keep class com.google.gson.examples.android.model.** { *; }
-keep class com.google.gson.** { *;}
-keep class proto.**{*;}
-keep class com.bytedance.**{*;}
-keep class com.google.protobuf.**{*;}
-keep class google.protobuf.**{*;}
-keep class com.didichuxing.**{*;}
-keepattributes *Annotation*
-keepclassmembers class * {
    @org.greenrobot.eventbus.Subscribe <methods>;
}
-keep enum org.greenrobot.eventbus.ThreadMode { *; }
-keep class cn.com.arise.activity.login.vcode.**{*;}
# Only required if you use AsyncExecutor
-keepclassmembers class * extends org.greenrobot.eventbus.util.ThrowableFailureEvent {
    <init>(java.lang.Throwable);

}
#kotlin混淆
-keep class kotlinx.coroutines.android.AndroidDispatcherFactory {*;}
-keep class kotlinx.**{*;}
-keep class kotlin.**{*;}



版权声明:本文为csdnwr原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。