android防反编译技术初体验——混淆 (2)

v. 为了防止在布局中设置onClick事件失效,所以保留在Activity中方法参数是view的方法:

-keepclassmembers class * extends android.app.Activity {
   public void *(android.view.View);
}

 

vi. ParcelableSerializable都是为了进行序列化,前者是android所特有的,比后者更高效可以intent传递数据,也可进程间通信(IPC),保持 ParcelableSerializable 不被混淆

-keep class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator *;
}
-keepnames class * implements java.io.Serializable

-keepclassmembers class * implements java.io.Serializable {
    static final long serialVersionUID;
    private static final java.io.ObjectStreamField[]

serialPersistentFields;

!static !transient <fields>;
    !private <fields>;
    !private <methods>;
    private void writeObject(java.io.ObjectOutputStream);
    private void readObject(java.io.ObjectInputStream);
    java.lang.Object writeReplace();
    java.lang.Object readResolve();
}

 

vii. 资源类不混淆

-keepclassmembers class **.R$* {
    public static <fields>;
}

 

viii. 记录生成的日志数据,gradle build时在本项目根目录输出

#apk 包内所有 class 的内部结构
-dump proguard/class_files.txt
#未混淆的类和成员
-printseeds proguard/seeds.txt
#列出从 apk 中删除的代码
-printusage proguard/unused.txt
#混淆前后的映射
-printmapping proguard/mapping.txt

 

 

ix. 移除Log类打印各个等级日志的代码,除了这种禁止log打印的方法还有一种是通过BuildConfig.DEBUG的变量来控制

-assumenosideeffects class android.util.Log {
    public static *** v(...);
    public static *** i(...);
    public static *** d(...);
    public static *** w(...);
    public static *** e(...);
}

 

x. 引入第三方json解析包不混淆(一般第三方jar包都已混淆过)

-keep class com.google.gson.** { *; }
-keep class com.google.gson.stream.** { *; }

 

xi. proguard会检查每一引用是否正确,但第三方库里常常会有不会用到的类,没有正确引用,如果不配置,会报错

-dontwarn android.support.**

 

xii. 枚举enum不被混淆:暂无

xiii. native方法不被混淆:暂无

xiv. Jni不被混淆:暂无

xv. 对含有反射类的处理:暂无

xvi. 某些功能所涉及到的类及子类不被混淆,如下拉刷新:暂无

xvii. ......(根据项目功能代码,可再补充混淆)

4.加壳:混淆之后,利用乐固(腾讯推出)进行加固,生成最终的apk文件。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgjwzf.html