android混淆配置说明

一、proguard 原理

 

Java代码编译成二进制class 文件,这个class 文件也可以反编译成源代码。除了注释外,

原来的code 基本都可以看到。为了防止重要code 被泄露,我们往往需要混淆(Obfuscation code ), 也就是把方法,字段,包和类这些java 元素的名称改成无意义的名称,这样代码结构没有变化,还可以运行,但是想弄懂代码的架构却很难。proguard 就是这样的混淆工具,它可以分析一组class 的结构,根据用户的配置,然后把这些class 文件的可以混淆java 元素名混淆掉。在分析class 的,同时他还有其他两个功能,删除无效代码(Shrinking 收缩),和代码进行优化(Optimization Options)。

缺省情况下,proguard 会混淆所有代码,但是下面几种情况是不能改变java 元素的名称,否则就会这样就会导致程序出错。 

一, 我们用到反射的地方  

二,我们代码依赖于系统的接口,比如被系统代码调用的回调方法,这种情况最复杂。

三,是我们的java 元素名称是在配置文件中配置好的。所以使用proguard时,我们需要有个配置文件告诉proguard 哪些java 元素是不能混淆的。

二、proguard 配置

Proguard.cfg文件是用来描述混淆配置的描述文件。自Android 2.3 SDK发布后,Google便在Android SDK Tools里加入了proguard,proguard是一个可以对.java文件进行一定程度上的代码混淆,使用proguard是一件极方便工作,在你项目中没有其他外部Jar包的情况下,在“project.properties”文件里,添加一行:proguard.config=proguard.cfg代码即可,然后通过Android Tools(右击项目名)里导出APK即可。如果项目所使用的的SDK版本低于2.3,只需要进行%android_dir%/tools/lib目录,复制proguard.cfg文件到项目的根目录下导出APK即可、 (2.3之前版本可以拷贝proguard.cfg文件到项目工程下) 这里我们重点看看proguard.cfg文件是如何配置的?Google默认的proguard.cfg

文件内容如下:

-optimizationpasses 5 

-dontusemixedcaseclassnames 

文档冲亿季,好礼乐相随

miniipad移动硬盘拍立得百度书包

-dontskipnonpubliclibraryclasses 

-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 com.android.vending.licensing.ILicensingService 

<!--

指定的类和类成员被保留

-> 

-keepclasseswithmembernames class * { 

native <methods>; 

-keepclasseswithmembernames class * {   

public <init>(android.content.Context, android.util.AttributeSet); 

-keepclasseswithmembernames class * {  

public <init>(android.content.Context, android.util.AttributeSet, int); 

<!--

指定的类成员被保留

--> 

-keepclassmembers enum * { 

public static **[] values();  

public static ** valueOf(java.lang.String); 

-keep class * implements android.os.Parcelable {  

public static final android.os.Parcelable$Creator *; 

混淆中保留了继承自Activity、Service、Application、BroadcastReceiver、ContentProvider等基本组件以及com.android.vending.licensing.ILicensingService, 并保留了所有的Native变量名及类名,所有类中部分以设定了固定参数格式的构造函数,枚举等等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值