混淆总结

ProGuard简介

因为Java代码是非常容易反编码的,况且Android开发的应用程序是用Java代码写的,为了很好的保护Java源代码,我们需要对编译好后的class文件进行混淆。
ProGuard是一个混淆代码的开源项目,它的主要作用是混淆代码,殊不知ProGuard还包括以下4个功能。
* 压缩(Shrink):检测并移除代码中无用的类、字段、方法和特性(Attribute)。
* 优化(Optimize):对字节码进行优化,移除无用的指令。
* 混淆(Obfuscate):使用a,b,c,d这样简短而无意义的名称,对类、字段和方法进行重命名。
* 预检(Preveirfy):在Java平台上对处理后的代码进行预检,确保加载的class文件是可执行的。
总而言之,根据官网的翻译:Proguard是一个Java类文件压缩器、优化器、混淆器、预校验器。压缩环节会检测以及移除没有用到的类、字段、方法以及属性。优化环节会分析以及优化方法的字节码。混淆环节会用无意义的短变量去重命名类、变量、方法。这些步骤让代码更精简,更高效,也更难被逆向(破解)。

问题汇总

## Warning:library class android.test.AndroidTestCase extends or implements program class junit.framework.TestCase
-dontwarn org.mockito.**
-dontwarn sun.reflect.**
-dontwarn android.test.**

## deal for retrolambda 
-dontwarn java.lang.invoke.*

## Warning:org.junit.internal.runners.statements.FailOnTimeout: can't find referenced class java.lang.management.ManagementFactory

-dontwarn java.lang.management.**
-keep class java.lang.management.**  { *; }

#---------------------------------3.与js互相调用的类------------------------

## JavaScriptInterfaceBase 任何需要JS回调NATIVE接口的类请集成这个基类,混淆脚本不会对该类的子类进行混淆
-keep class * extends com.xx.JavaScriptInterfaceBase {

       <fields>;

       <methods>;

}
-keepattributes *Annotation*
-keepattributes *JavascriptInterface*
-keep class com.xx.ui.news.fragment.NewsDetailFragment { *; }

#-------------------------------------------------------------------------


#---------------------------------4.反射相关的类和方法-----------------------
-dontwarn com.xx.common.utils.**
-keep class com.xx.common.utils.** { *; }
-dontwarn com.xx.common.base.**
-keep class com.xx.common.base.** { *; }
-dontwarn com.xx.common.baserx.**
-keep class com.xx.common.baserx.** { *; }
-keep class com.xx.common.basebean.** { *; }
-keep class com.xx.cctv.base.**  { *; }

## Caused by: java.lang.ClassCastException: java.lang.Object cannot be cast to kstar.mycommon.base.b
mPresenter = TUtil.getT(this, 0);

#---------------------------------4.反射相关的类和方法-----------------------
## 对commonutils报下的代码不警告
-dontwarn com.xx.commonutils.**
-keep class com.xx.commonutils.** { *; }

#----------------------------------------------------------------------------

报错是强转两个对象之间的问题。根据这个思路 我将两个对象的代码都保护起来,BaseModel的子类要保护,不能混淆.

## BaseModel类所在的位置
-keep class com.xx.base.** { *; }

## BaseModel子类,我们业务类所在的位置
-keep class com.xx.ui.login.model.** { *; }
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值