免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3798 | 回复: 1
打印 上一主题 下一主题

关于Android使用proguard进行代码混淆 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-02-19 13:32 |只看该作者 |倒序浏览
关于Android使用proguard进行代码混淆
androidproguard代码混淆xmlpull解决办法
      自Android 2.3 SDK发布后,Google便在Android SDK Tools里加入了proguard,proguard是一个可以对.java文件进行一定程度上的代码混淆,使用proguard是一件极方便工作,在你项目中没有其他外部Jar包的情况下,在“project.properties”文件里,添加一行:



Xml代码
  1. proguardproguard.config=proguard.cfg  

  2. proguard.config=proguard.cfg   
复制代码
代码即可,然后通过Android Tools(右击项目名)里导出APK即可,如果项目所使用的的SDK版本低于2.3,只需要进行%android_dir%/tools/lib目录,复制proguard.cfg文件到项目的根目录下导出APK即可。



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



Xml代码
  1. -libraryjars %lib_jar_path%  

  2. -libraryjars %lib_jar_path%
复制代码
有几个Jar包,便添加几次,如在项目的libs目录下有a.jar,b.jar,c.jar三个Jar包:



Xml代码
  1. -libraryjars libs/a.jar   
  2. -libraryjars libs/b.jar   
  3. -libraryjars libs/c.jar  

  4. -libraryjars libs/a.jar
  5. -libraryjars libs/b.jar
  6. -libraryjars libs/c.jar      此外,还有些特殊情况,会令导出发生异常,视具体异常情况而定,修改proguard.cfg文件。
复制代码
比如出现了以下异常:



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

  3. Warning: com.google.android.maps.MapView: can't find referenced class com.android.mkstubs.stubber.MethodStubber
  4. Warning: com.google.android.maps.MapView$1: can't find referenced class com.android.mkstubs.stubber.MethodStubber
复制代码
即:



Java代码
  1. Warning: %class_full_name%: can't find referenced class %class_full_name%  

  2. Warning: %class_full_name%: can't find referenced class %class_full_name%
复制代码
这种异常情况,需要在proguard.cfg文件中,添加以下代码:



Xml代码
  1. -dontwarn %class_full_name%  

  2. -dontwarn %class_full_name%
复制代码
即可,便以上面例子而言,应当如下:



Xml代码
  1. -dontwarn com.google.android.maps.*  

  2. -dontwarn com.google.android.maps.*      等等,此类情况修改proguard.cfg文件即可,还有种特殊情况,需要对引入的Jar包进行修改,如下:
复制代码
Txt代码
  1. Warning: library class android.content.res.XmlResourceParser extends or implements program class org.xmlpull.v1.XmlPullParser   
  2. Warning: library class android.view.LayoutInflater depends on program class org.xmlpull.v1.XmlPullParser  

  3. Warning: library class android.content.res.XmlResourceParser extends or implements program class org.xmlpull.v1.XmlPullParser
  4. Warning: library class android.view.LayoutInflater depends on program class org.xmlpull.v1.XmlPullParser      
复制代码
这是因为引用的Jar包中含有xmlpull类库,Android系统的类库中已经包含了xmlpull,这样混淆出现了冲突,解决办法是把它里面已存在的和系统库冲突的类去掉,就可以了,产生冲突的类可见控制台输出。

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

论坛徽章:
0
2 [报告]
发表于 2012-02-19 15:44 |只看该作者
谢谢分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP