Android从2.3的SDK开始,将ProGuard混淆代码的功能加入了进来。android
咱们能够从android sdk的tools目录下看到有一个proguard目录。说明具备了代码混淆的功能。git
至于如何进行代码的混淆。咱们须要作的很简单:github
一、在用eclipse生成的android工程中都有一个project.properties文件,咱们须要在该文件中增长下面一行代码:算法
proguard.config=proguard.cfg
如图所示:app
二、写混淆脚本proguard.cfgeclipse
我测试用的混淆脚本很是简单,只加了优化功能。如图所示:ide
对于proguard.cfg脚本的详细介绍参见:http://blog.csdn.net/laoyao_moyan/article/details/7353768工具
咱们能够看到混淆android代码很是容易,可是须要注意的是:在eclipse下经过Run执行来生成的bin目录下的apk文件并无被混淆,只有经过加入证书发布的apk才会混淆。测试
下面,咱们来看看如何打包签名apk。优化
一、生成keystore;
在生成签名apk前,咱们须要keystore,这个keystore能够用jdk下的keytool工具生成。
在cmd下,用命令行生成keystore如图所示:
按照上图中的命令,输入须要输入的内容。
其中,-alias android.keystore是生成的keystore别名;
-keyalg RSA是加密和数字签名的算法;
-validity 20000是有效天数
最后,会在jdk的bin目录下生成android.keystore文件。(这是由于keytool命令在jdk的bin目录下,固然,这个能够经过环境变量来设置)。
二、用keystore生成签名apk。
咱们有了keystore,就能够生成签名apk了。
Eclipse中,右键须要签名的工程->Android tools->export signed application package...
这时会出现如下对话框:
点击下一步:
键入密码,点击Next:
键入密码,再次点击Next:
最后,点击Finish便可。
这时会在jdk的bin目录下生成带签名的apk。
下面是将我在github上的androidexample工程混淆了,效果以下:
最后,咱们看运行混淆后的输出文件,在工程中会有生成的proguard文件夹,里面的文件具体内容是:
dump.txt
描述.apk包中全部class文件的内部结构。
mapping.txt
列出了源代码与混淆后的类,方法和属性名字之间的映射。这个文件对于在构建以后获得的bug报告是有用的,由于它把混淆的堆栈跟踪信息反翻译为源代码中的类,方法和成员名字。
seeds.txt
列出那些未混淆的类和成员。
usage.txt
列出从.apk中剥离的代码。
这些文件放在如下目录中:
l <project_root>/bin/proguard 当你使用Ant时
l <project_root>/proguard 当你使用Eclipse时