# 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 版权协议,转载请附上原文出处链接和本声明。