android代码混淆

来源:互联网 发布:日本留学费用 知乎 编辑:程序博客网 时间:2024/05/19 20:22
proguard-rules.pro代码混淆文件配置规则如下:
# To enable ProGuard in your project, edit project.properties
# to define the proguard.config property as described in that file.
#
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in ${sdk.dir}/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the ProGuard
# include property in project.properties.
#
# 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 *;
#}


#代码混淆压缩比,在0-7之间,默认为5,一般不做修改
-optimizationpasses 5
#混合时不使用大小写混合,混合后的类名为小写
-dontusemixedcaseclassnames
#不忽略非公共库的类
-dontskipnonpubliclibraryclasses
-dontskipnonpubliclibraryclassmembers
#使项目混淆后产生映射文件,包含有类名->混淆后的类名的映射关系
-verbose
#不做预校验,Android不需要preverify,去掉这一步能够加快混淆速度
-dontpreverify
#保留Annotation不混淆
-keepattributes *Annotation*
#不混淆泛型
-keepattributes Signature
#抛出异常时保留代码行号
-keepattributes SourceFile,LineNumberTable
#指定混淆采用的算法,后面的参数是一个过滤器
#这个过滤器是谷歌推荐的算法,一般不做更改
#-optimizations !code/simplification/cast,!field/*,!class/merging/*


#-libraryjars libs/sun.misc.BASE64Decoder.jar
#-libraryjars libs/BaiduLBS_Android.jar
#-libraryjars libs/core.jar
#-libraryjars libs/eventbus.jar
#-libraryjars libs/GetuiExt-2.0.3.jar
#-libraryjars libs/GetuiSDK2.8.1.0.jar
#-libraryjars libs/gson-2.2.4.jar
#-libraryjars libs/libammsdk.jar
#-libraryjars libs/nineoldandroids-2.4.0.jar
#-libraryjars libs/open_sdk_r5509_lite.jar
#-libraryjars libs/tbs_sdk_thirdapp_v3.0.0.1038.jar
#-libraryjars libs/umeng-analytics-v6.1.1.jar
#-libraryjars libs/universal-image-loader-1.9.3.jar
#-libraryjars libs/utdid4all-1.0.4.jar
#-libraryjars libs/xUtils-2.6.14.jar
-keep public class * extends android.app.Fragemnt
-keep public class * extends android.app.FragmentActivity
-keep public class * extends android.support.v4.**


#-dontwarn android.webkit.**
#-keep class android.webkit.**{ *; }


-dontwarn android.support.v4.**
-dontwarn org.apache.commons.net.**


#一颗星表示只是保持该包下的类名,而子包下的类名还是会被混淆;两颗星表示把本包和所含子包下的类名都保持;
#-keep class com.demo.test.**
#-keep class com.demo.test.*
#既想保持类名,又想保持里面的内容不被混淆
#-keep class com.demo.test.** { *; }




#个推SDK混淆规则
-dontwarn com.igexin.**
-keep class com.igexin.** { *; }
-keep class org.json.** { *; }






-dontwarn com.umeng.**
-keep public interface com.tencent.**
-keep public interface com.umeng.socialize.**
-keep public interface com.umeng.socialize.sensor.**
-keep public interface com.umeng.scrshot.**
-keep public class com.umeng.socialize.* {*;}
-keep public class javax.**
-keep class com.umeng.scrshot.**
-keep class com.umeng.socialize.sensor.**
-keep class com.tencent.mm.sdk.openapi.WXMediaMessage {*;}
-keep class com.tencent.mm.sdk.openapi.** implements com.tencent.mm.sdk.openapi.WXMediaMessage$IMediaObject {*;}


#*****************Android平台自带的排除项******************
-keep public class * extends android.app.Activity{
 public <fields>;
 public <methods>;
}
-keep public class * extends android.app.Application{
 public <fields>;
 public <methods>;
}
-keep public class * extends android.app.Service
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.content.BroadcastReceiver
-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.** { *; }
#保留R下面的资源
-keep class **.R$* { *; }
-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}
-keepclasseswithmembernames class * {
    public <init>(android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembernames class * {
    public <init>(android.content.Context, android.util.AttributeSet, int);
}


#保留本地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;
     private void writeObject(java.io.ObjectOutputStream);
     private void readObject(java.io.ObjectInputStream);
     java.lang.Object writeReplace();
     java.lang.Object readResolve();
}
#不能混淆实体类,需要保留get和set方法
#-keep public class com.show.bean.**{
# public void set*(***);
# public *** get*();
# public *** is*();
#}
#如果使用GSON解析接口返回来的数据(一般为json字符串),实体类只保留get和set方法是不够的,还应该保留成员变量,
#因为成员变量的字段名必需与返回来的json字符串的字段名一致才能解析
-keep class com.show.bean.** { *; }
#-keep public class com.showsoft.data.**{
# public void set*(***);
# public *** get*();
# public *** is*();
#}
-keep class com.show.data.** { *; }


#字符串属于硬编码,不能混淆
#-keep class com.show.consts.** { *; }


#下面两句解决问题Warning:com.handmark.pulltorefresh.library.PullToRefreshWebView: can't find referenced method 'float floor(float)' in library class android.util.FloatMath
-dontwarn com.handmark.**
-keep class org.openudid.** { *;}


#EventBus混淆配置
-keepclassmembers class ***{
 public void onEvent*(**);
}
-keepclassmembers class * extends de.greenrobot.event.util.ThrowableFailureEvent{
 <init>(java.lang.Throwable);
}


#不混淆指定内部类
-keepnames class com.show.you.TradeRecordActivity$*{
 public <fields>;
 public <methods>;
}
-keepnames class com.show.you.MyLuckMoneyActivity$*{
 public <fields>;
 public <methods>;
}
-keepnames class com.show.you.MyInviteActivity$*{
 public <fields>;
 public <methods>;
}
-keepnames class com.show.you.RechargeActivity$*{
 <fields>;
 <methods>;
}
-keepnames class com.show.you.NoticeShowActivity$*{
  public <fields>;
  public <methods>;
}
-keepnames class com.show.you.BorrwInfoActivity$*{
  <fields>;
  <methods>;
}
#-keepnames class com.show.you.WebVerfiedActivity$*{
# public <fields>;
# public <methods>;
#}


# Addidional for x5.sdk classes for apps
#加dontwarn这句是为了解决打包出错Warning:com.tencent.smtt.export.external.DexLoader: can't find referenced class dalvik.system.VMStack
-dontwarn com.tencent.smtt.export.external.**
-keep class com.tencent.smtt.export.external.**{
    *;
}
-keep class com.tencent.tbs.video.interfaces.IUserStateChangedListener {
*;
}
-keep class com.tencent.smtt.sdk.CacheManager {
public *;
}
-keep class com.tencent.smtt.sdk.CookieManager {
public *;
}
-keep class com.tencent.smtt.sdk.WebHistoryItem {
public *;
}
-keep class com.tencent.smtt.sdk.WebViewDatabase {
public *;
}
-keep class com.tencent.smtt.sdk.WebBackForwardList {
public *;
}
-keep public class com.tencent.smtt.sdk.WebView {
public <fields>;
public <methods>;
}
-keep public class com.tencent.smtt.sdk.WebView$HitTestResult {
public static final <fields>;
public java.lang.String getExtra();
public int getType();
}
-keep public class com.tencent.smtt.sdk.WebView$WebViewTransport {
public <methods>;
}
-keep public class com.tencent.smtt.sdk.WebView$PictureListener {
public <fields>;
public <methods>;
}
-keepattributes InnerClasses


-keep public enum com.tencent.smtt.sdk.WebSettings$** {
    *;
}
-keep public enum com.tencent.smtt.sdk.QbSdk$** {
    *;
}
-keep public class com.tencent.smtt.sdk.WebSettings {
    public *;
}


-keep public class com.tencent.smtt.sdk.ValueCallback {
public <fields>;
public <methods>;
}
-keep public class com.tencent.smtt.sdk.WebViewClient {
public <fields>;
public <methods>;
}
-keep public class com.tencent.smtt.sdk.DownloadListener {
public <fields>;
public <methods>;
}
-keep public class com.tencent.smtt.sdk.WebChromeClient {
public <fields>;
public <methods>;
}
-keep public class com.tencent.smtt.sdk.WebChromeClient$FileChooserParams {
public <fields>;
public <methods>;
}
-keep class com.tencent.smtt.sdk.SystemWebChromeClient{
public *;
}
# 1. extension interfaces should be apparent
-keep public class com.tencent.smtt.export.external.extension.interfaces.* {
public protected *;
}


# 2. interfaces should be apparent
-keep public class com.tencent.smtt.export.external.interfaces.* {
public protected *;
}


-keep public class com.tencent.smtt.sdk.WebViewCallbackClient {
public protected *;
}


-keep public class com.tencent.smtt.sdk.WebStorage$QuotaUpdater {
public <fields>;
public <methods>;
}


-keep public class com.tencent.smtt.sdk.WebIconDatabase {
public <fields>;
public <methods>;
}


-keep public class com.tencent.smtt.sdk.WebStorage {
public <fields>;
public <methods>;
}


-keep public class com.tencent.smtt.sdk.DownloadListener {
public <fields>;
public <methods>;
}


-keep public class com.tencent.smtt.sdk.QbSdk {
public <fields>;
public <methods>;
}


-keep public class com.tencent.smtt.sdk.QbSdk$PreInitCallback {
public <fields>;
public <methods>;
}
-keep public class com.tencent.smtt.sdk.CookieSyncManager {
public <fields>;
public <methods>;
}


-keep public class com.tencent.smtt.sdk.Tbs* {
public <fields>;
public <methods>;
}


-keep public class com.tencent.smtt.utils.LogFileUtils {
public <fields>;
public <methods>;
}


-keep public class com.tencent.smtt.utils.TbsLog {
public <fields>;
public <methods>;
}


-keep public class com.tencent.smtt.utils.TbsLogClient {
public <fields>;
public <methods>;
}


-keep public class com.tencent.smtt.sdk.CookieSyncManager {
public <fields>;
public <methods>;
}


# Added for game demos
-keep public class com.tencent.smtt.sdk.TBSGamePlayer {
public <fields>;
public <methods>;
}


-keep public class com.tencent.smtt.sdk.TBSGamePlayerClient* {
public <fields>;
public <methods>;
}


-keep public class com.tencent.smtt.sdk.TBSGamePlayerClientExtension {
public <fields>;
public <methods>;
}


-keep public class com.tencent.smtt.sdk.TBSGamePlayerService* {
public <fields>;
public <methods>;
}


-keep public class com.tencent.smtt.utils.Apn {
public <fields>;
public <methods>;
}
-keep class com.tencent.smtt.** {
*;
}
# end
-keep public class com.tencent.smtt.export.external.extension.proxy.ProxyWebViewClientExtension {
public <fields>;
public <methods>;
}


-keep class MTT.ThirdAppInfoNew {
*;
}


-keep class com.tencent.mtt.MttTraceEvent {
*;
}


# Game related
-keep public class com.tencent.smtt.gamesdk.* {
public protected *;
}


-keep public class com.tencent.smtt.sdk.TBSGameBooter {
        public <fields>;
        public <methods>;
}


-keep public class com.tencent.smtt.sdk.TBSGameBaseActivity {
public protected *;
}


-keep public class com.tencent.smtt.sdk.TBSGameBaseActivityProxy {
public protected *;
}


-keep public class com.tencent.smtt.gamesdk.internal.TBSGameServiceClient {
public *;
}


# webView处理,项目中没有使用到webView忽略即可,webview与JS交互内部类不能混淆
-keepclassmembers class com.show.you.WebVerfiedActivity$MyHandler {
    public *;
}
-keepattributes *JavascriptInterface*
#-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, java.lang.String);
#    public void *(android.webkit.webView, android.webkit.SslErrorHandler, android.net.http.SslError);
#}
#-keepclassmembers class * extends android.webkit.WebChromeClient{
#   public void *(android.webkit.webView, java.lang.String);
#}
#-keep class com.show.you.WebVerfiedActivity{ *; }
#-keep class android.webkit.**{ *; }
原创粉丝点击