当前位置: 移动技术网 > IT编程>移动开发>Android > Android打包混淆Copy解决方案

Android打包混淆Copy解决方案

2018年11月01日  | 移动技术网IT编程  | 我要评论

电取暖器哪种好,邂逅筝心txt新浪,轮回tinadannis

android打包混淆copy解决方案。

1. 概念

将android项目进行打包之时,将项目里的包名、类名、变量名进行更改,使得代码不容易泄露,类似于对其apk中的文件

2.作用

生成apk包体积变小,减少反编译后泄漏代码的可能性


配置

moudle的build.gradle文件中

这里写图片描述

minifyenabled true 开启混淆 ,默认false
proguard-rules.pro 一般在moudle目录最下面,里面存放一些代码混淆规则

规则

如今混淆指令已经很完善了,基本上都没有什么变动,在新开发项目中,复制以下代码即可

基本的混淆模版

############################################
#
# 对于一些基本指令的添加
#
#############################################
# 代码混淆压缩比,在0~7之间,默认为5,一般不做修改
-optimizationpasses 5

# 混合时不使用大小写混合,混合后的类名为小写
-dontusemixedcaseclassnames

# 指定不去忽略非公共库的类
-dontskipnonpubliclibraryclasses

# 这句话能够使我们的项目混淆后产生映射文件
# 包含有类名->混淆后类名的映射关系
-verbose

# 指定不去忽略非公共库的类成员
-dontskipnonpubliclibraryclassmembers

# 不做预校验,preverify是proguard的四个步骤之一,android不需要preverify,去掉这一步能够加快混淆速度。
-dontpreverify

# 保留annotation不混淆
-keepattributes *annotation*,innerclasses

# 避免混淆泛型
-keepattributes signature

# 抛出异常时保留代码行号
-keepattributes sourcefile,linenumbertable

# 指定混淆是采用的算法,后面的参数是一个过滤器
# 这个过滤器是谷歌推荐的算法,一般不做更改
-optimizations !code/simplification/cast,!field/*,!class/merging/*


#############################################
#
# android开发中一些需要保留的公共部分
#
#############################################

# 保留我们使用的四大组件,自定义的application等等这些类不被混淆
# 因为这些子类都有可能被外部调用
-keep public class * extends android.app.activity
-keep public class * extends android.app.appliction
-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 com.android.vending.licensing.ilicensingservice


# 保留support下的所有类及其内部类
-keep class android.support.** {*;}

# 保留继承的
-keep public class * extends android.support.v4.**
-keep public class * extends android.support.v7.**
-keep public class * extends android.support.annotation.**

# 保留r下面的资源
-keep class **.r$* {*;}

# 保留本地native方法不被混淆
-keepclasseswithmembernames class * {
    native ;
}

# 保留在activity中的方法参数是view的方法,
# 这样以来我们在layout中写的onclick就不会被影响
-keepclassmembers class * extends android.app.activity{
    public void *(android.view.view);
}

# 保留枚举类不被混淆
-keepclassmembers enum * {
    public static **[] values();
    public static ** valueof(java.lang.string);
}

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

# 保留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;
    !static !transient ;
    !private ;
    !private ;
    private void writeobject(java.io.objectoutputstream);
    private void readobject(java.io.objectinputstream);
    java.lang.object writereplace();
    java.lang.object readresolve();
}

# 对于带有回调函数的onxxevent、**on*listener的,不能被混淆
-keepclassmembers class * {
    void *(**on*event);
    void *(**on*listener);
}

# webview处理,项目中没有使用到webview忽略即可
-keepclassmembers class fqcn.of.javascript.interface.for.webview {
    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);
}

第三方库模版

根据官方github文档注释进行混淆

实体类混淆

-keep class 你的实体类所在的包.** { *; }

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网