android程序的ProGuard混淆及签名发布

转载于:http://www.higis.org/2012/05/15/android-proguard-sign/

写的android应用想提交审核,提交前就得开始准备发布了,要不然不签名别人可装不上,另也需考虑proguard进行混淆,减小文件大小。Eclipse上默认android sdk已提供关于签名的工具,在项目上右键,android tools->Export Signed Application Package….,后续的就是建立密匙并导出了,签名过程还是挺简单的,一路按照操作下去就可以,这里主要记录下关于ProGuard混淆的几个注意问题。

需要进行ProGuard混淆需要进行几个步骤:

(1)project.properties中添加:

proguard.config=proguard.cfg

(2) 在proguard.cfg中进行设置(默认已经生成该文件,有需要的时候需要进行添加相关规则设置)

(3)通过android tools进行签名导出

碰到几个问题,记录下:

1、关于第三方jar包不混淆

(1)添加-libraryjars 标签,代表为第三方jar包。如:-libraryjars lib/wmqtt.jar

(2)添加-keep标签,将第三方包里面的类设置为不混淆,如:-keep class com.ibm.**{*;}

(3) 当在导出时,发现很多could not reference class之类的warning问题,如果确认实际系统运行和那些引用没有什么问题的话,可以添加-dontwarn 标签,就将不再提示后续包的warning.如:-dontwarn org.apache.**

(4)尽量不要写全部忽视所有warn的那个标签,这样可以自己根据console输出的信息再调整。

2、关于webview中注册JavaScriptInterface调用java类中方法时需要不混淆

在混淆后,放到机器中跑,发现webview中的方法一直无法调用,通过反编译,发现java类中的方法已经被混淆。如调用方法如下:


 
String load= "javascript:window.JSMethod.getPin('<head>'+document.getElementsByTagName('html')[0].innerHTML+'</head>')" ;

实际上getPin方法已经被混淆成a,或之类的了。所以需要将该方法进行设置-keep.另如果写成这样:


 
-keep class yourpack.JavaScriptInterface

这样也是不行的,里面的方法还是会被混淆掉, 需要详细指定对应的方法名称及参数,需注意是全路径名称


 
-keep class yourpack.JavaScriptInterface{
        public void getPin(java.lang.String);
}

这样再签名导出后,通过反编译,我们可以看到该类中的这个方法就没有被混淆掉,而里面其它的变量之类的就已经被混淆了。

更加详细的proguard文档可以去官网查看。http://proguard.sourceforge.net/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值