代码混淆 在java 里面是一个重要的保护代码手段之一
之前用 ant 打包
今天试了用 proguard来打包
因为我的项目要用到
httpclient 包
开始导入时会出现一大堆警告 然后就不能输入程序
此时应在proguard.cfg文件中添加 -ignorewarnings 隐藏所有警告
当程序跑起来后 一遇到有调用 httpclient 时就会报错 说找不到 源码
我知道这是代码混淆后的问题 查了 proguard官网
原来 proguard 会优化你的代码 将不必要的代码删除
如果你要保留 则需要设置相应的 规则
如我上面引入了 三个包
所以要为每个包保留 不进行混淆操作
1 -keep public class org.apache.commons.logging.** { public protected *;} 2 -keep public class org.apache.commons.logging.impl.** { public protected *;} 3 4 -keep public class org.apache.commons.httpclient.** {public protected *;} 5 -keep public class org.apache.commons.httpclient.auth.** {public protected *;} 6 -keep public class org.apache.commons.httpclient.cookie.** {public protected *;} 7 -keep public class org.apache.commons.httpclient.methods.** {public protected *;} 8 -keep public class org.apache.commons.httpclient.params.** {public protected *;} 9 -keep public class org.apache.commons.httpclient.protocol.** {public protected *;} 10 -keep public class org.apache.commons.httpclient.util.** {public protected *;} 11 12 -keep public class org.apache.commons.codec.** {public protected *;} 13 -keep public class org.apache.commons.codec.binary.** {public protected *;} 14 -keep public class org.apache.commons.codec.digest.** {public protected *;} 15 -keep public class org.apache.commons.codec.language.** {public protected *;} 16 -keep public class org.apache.commons.codec.net.** {public protected *;}
后面二行可选的
1 -keep public class com.google.gdata.util.common.base.** { public protected *; } 2 3 4 -keep public class android.** { public protected private *; }
如此程序便可正常运行
另外 集成在 SDK 中的proguard太旧直接使用会有很多问题 只要你从官网下载最新版本便会解决问题 到目前为止最新版为 4.8
复盖 bin lib 文件夹就可以了
欢迎各位同学加入 android 技术群 155595043
个人微博: http://weibo.com/338226333
有问题可以微博商讨