Android混淆

     一直以来 ,不知道为什么对于android开发中的的混淆都有一种恐惧感,jar包不能混啊,自定义控件不能混啊等等。工作以来,前面几个项目都没有做过就传到市场。但这可不是长久的办法,混淆有时候也是很重要的。

    今天终于把现在的项目混了一下 ,反编译后效果不错。特此记录一下。

   我用的是android studio  首先在build.gradle文件中:

 buildTypes {
        release {
            minifyEnabled true//把false改成true   就打开了混淆的开关
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.release
        }
        debug {
            signingConfig signingConfigs.release
        }
    }
然后  在proguard-rules.pro文件中添加混淆代码 ,通过各种百度以后,以下下是我项目中的混淆代码

-optimizationpasses 5          # 指定代码的压缩级别
-dontusemixedcaseclassnames   # 是否使用大小写混合
-dontpreverify           # 混淆时是否做预校验
-verbose                # 混淆时是否记录日志

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

-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 com.android.vending.licensing.ILicensingService    # 保持哪些类不被混淆

-keepclasseswithmembernames class * {  # 保持 native 方法不被混淆
    native <methods>;
}
-keepclasseswithmembers class * {   # 保持自定义控件类不被混淆
    public <init>(android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembers class * {# 保持自定义控件类不被混淆
    public <init>(android.content.Context, android.util.AttributeSet, int);
}
-keepclassmembers class * extends android.app.Activity { # 保持自定义控件类不被混淆
    public void *(android.view.View);
}
-keepclassmembers enum * {     # 保持枚举 enum 类不被混淆
    public static **[] values();
    public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable { # 保持 Parcelable 不被混淆
    public static final android.os.Parcelable$Creator *;
}
-keep public class * extends android.app.Fragment
-keep public class * extends android.support.v4.app.Fragment
#忽略警告
-ignorewarning
#友盟
-keep class com.umeng.**{*;}
-keepclassmembers class * {
   public <init>(org.json.JSONObject);
}
-keep public class com.hsm.bxt.R$*{
public static final int *;
}
-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}
#个推
-dontwarn com.igexin.**
-keep class com.igexin.**{*;}
#小米
-keepclasseswithmembernames class com.xiaomi.**{*;}
-keep public class * extends com.xiaomi.mipush.sdk.PushMessageReceiver
 -dontwarn com.xiaomi.push.service.a.a
 #融云
 -keepclassmembers class fqcn.of.javascript.interface.for.webview {
  public *;
 }

 -keepattributes Exceptions,InnerClasses

 -keep class io.rong.** {*;}

 -keep class * implements io.rong.imlib.model.MessageContent{*;}

 -keepattributes Signature

 -keepattributes *Annotation*

 -keep class sun.misc.Unsafe { *; }

 -keep class com.google.gson.examples.android.model.** { *; }

 -keepclassmembers class * extends com.sea_monster.dao.AbstractDao {
  public static java.lang.String TABLENAME;
 }
 -keep class **$Properties
 -dontwarn org.eclipse.jdt.annotation.**

 -keep class com.ultrapower.** {*;}


 -keep public class * implements java.io.Serializable {*;}
 ##---------------Begin: proguard configuration for Gson  ----------
 # Gson uses generic type information stored in a class file when working with fields. Proguard
 # removes such information by default, so configure it to keep all of it.
 -keepattributes Signature

 # For using GSON @Expose annotation
 -keepattributes *Annotation*

 # 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.hsm.bxt.entity.** { *; }
 -keep class com.hsm.bxt.bean.** { *; }

 ##---------------End: proguard configuration for Gson  ----------
-dontwarn com.alibaba.fastjson.**
-dontskipnonpubliclibraryclassmembers
-dontskipnonpubliclibraryclasses
-keep class com.alibaba.fastjson.** { *; }
-keepclassmembers class * {
public <methods>;
}
-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();
    public <fields>;
}
-keepattributes Signture
#-libraryjars libs/BaiduLBS_Android.jar
-keep class com.baidu.** { *; }
-keep class vi.com.gdi.bgl.android.**{*;}

项目中用到百度地图 本来加了这句
#-libraryjars libs/BaiduLBS_Android.jar 结果报错
后来去掉 只用<pre name="code" class="html">-keep class com.baidu.** { *; }
-keep class vi.com.gdi.bgl.android.**{*;}  就ok了

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值