android项目混淆

Android混淆

为什么混淆?
因为使用Java语言开发的App很容易被逆向破解,目前市面上已有的Java程序反编译工具有很多中,这些工具可以将代码逆向破解。
混淆的作用
1、它是一种保存App的技术,可用于App不被破解和逆向分析。
2、使用混淆的可将绝大部分的Apk编译之后减少部分体积
如一个简单的构建项目,build apk(debug版本)时的体积为1624k,而未使用混淆的release体积为1310k,使用混淆的体积竟然只有850K!

混淆在项目中的使用

关键词介绍 Shrinking 压缩/Optimization 优化/Obfuscation 混淆  -keep保持
#-keep class xx.xx.xxx.** 和 -keep class.xx.xx.xxx.*的区别
#一颗星表示只保持该包下的类名被不被混淆,其他子类包下的还是被混淆,两颗星的意识都不被混淆。
#但是该方法下反编译还是会发小类型虽然未混淆,但是里面的具体方法和变量名还是变了
#-keep class xx.xx.xxx.*{*;} 这样设置就是类型和内容不被混淆。

#可以使用Java的基本规则来保护特定类不被混淆,使用extend implement避免一些继承某类不被混淆
# -keep public class * extends XXX(类名)

#使用$符号可以保证某个类中的内部类不被混淆。
#如 -keepclassmembers class xx.xx.xxx$yyInterface{public*;}

#如果喜欢所有内容都不被混淆,而只是希望保护特定的内容,可以使用以下
# <init>; 匹配所有构造器
# <fields>; 匹配所有域
# <methods>; 匹配所有方法
# 如 -keep class xx.xx.xxx{public <methods>;} 他表示xxx类下的所有public方法都不被混淆。
# 如 -keep class xx.xx.xxx{public <init>(yy.yy.yyy);} 标识xxx类下的yyy构造函数不被混淆。

# 如果想着类名不变,而要将类下的特定方法保持不被混淆,keep就不够用了。
# 保留                            防止被移除或者被重命名       防止被重命名
# 类和类成员                       -keep                      -keepnames
# 仅类成员                         -keepclassmembers          -keepclassmembernames
# 如拥有某成员,保留类和类成员       -keepclasseswithmembers    -keepclasseswithmembernames

#需注意事项
# 1、反射用到的类不能被混淆
# 2、清单文件中的类不能被混淆,默认不会被混淆。自定义View也不会被混淆。
# 3、与server交互时,使用的Gson、fastjson等框架不能被混淆
# 4、使用第三方库等如有要有不能被混淆的也需要加入混淆规则
# 5、使用Webview调用JS,jni方法不可被混淆,因他要和native方法保持一致
    -keepclasseswithmembernames class*{ native <methods>; }
# 6、Parcelable子类和Creator静态成员变量不混淆
# -keep class * implements Android.os.Parcelable{
#    public static final Anroid.os.Parcelable$Creator *;
#  }
# 7、枚举类型也要避免混淆
# -keepclassmembers enum * {
#     public static **[] values();  public static **     valueOf(java.lang.String); }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值