关于Android使用proguard进行代码混淆

      自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即可。

 

      这是一般情况,即无第三方Jar包,如果存在第三方Jar包,那么打开proguard.cfg文件进行编辑,在其中加入以下代码:

 

-libraryjars %lib_jar_path%

 

     有几个Jar包,便添加几次,如在项目的libs目录下有a.jar,b.jar,c.jar三个Jar包:

 

-libraryjars libs/a.jar
-libraryjars libs/b.jar
-libraryjars libs/c.jar

      此外,还有些特殊情况,会令导出发生异常,视具体异常情况而定,修改proguard.cfg文件。

 

      比如出现了以下异常:

 

Warning: com.google.android.maps.MapView: can't find referenced class com.android.mkstubs.stubber.MethodStubber
Warning: com.google.android.maps.MapView$1: can't find referenced class com.android.mkstubs.stubber.MethodStubber

 

即:

 

Warning: %class_full_name%: can't find referenced class %class_full_name%

 

      这种异常情况,需要在proguard.cfg文件中,添加以下代码:

 

-dontwarn %class_full_name%

 

      即可,便以上面例子而言,应当如下:

 

-dontwarn com.google.android.maps.*

      等等,此类情况修改proguard.cfg文件即可,还有种特殊情况,需要对引入的Jar包进行修改,如下:

 

Warning: library class android.content.res.XmlResourceParser extends or implements program class org.xmlpull.v1.XmlPullParser
Warning: library class android.view.LayoutInflater depends on program class org.xmlpull.v1.XmlPullParser

       这是因为引用的Jar包中含有xmlpull类库,Android系统的类库中已经包含了xmlpull,这样混淆出现了冲突,解决办法是把它里面已存在的和系统库冲突的类去掉,就可以了,产生冲突的类可见控制台输出。

      另外对不想混淆的类/方法/变量,可以使用-keep指定,具体参考proguard.cfg文件写法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值