APP打包混淆apk代码.pdf
APP项目开发完成之后,当测试人员测试了,没有Bug了,一般情况下,公司会有一些
技术人员负责发布、推广APP产品。这是一般正规的大公司会有专门的市场推广部门,技术
维护部门,对APP进行加密混淆打包,如:使用Ant加密,还有使用第三方的加密方式如爱
加密等。想必APP产品为什么需要加密混淆,做为开发人员、老板都明白其中的隐含之处。
然而,还有一种方式可以打包混淆APP,那就是android通过eclipse混淆代码打包+
proguard方式。具体的步骤如下:
一、android应用程序的混淆打包
1.在工程文件perties中加入下
proguard.config=proguard.cfg,如下所示:
target=android-8
proguard.config=proguard.cfg
Eclipse会通过此配置在工程目录生成proguard.cfg文件
2.生成keystore(如已有可直接利用)
按照下面的命令行在D:\ProgramFiles\Java\jdk1.6.0_07\bin目录下,
输入keytool-genkey-aliasandroid.keystore-keyalgRSA-validity100000-keystore
android.keystore
参数意义:-validity主要是证书的有效期,写100000天;空格,退格键都
算密码。
命令执行后会在D:\ProgramFiles\Java\jdk1.6.0_07\bin目录下生成
android.keystore文件。
3.在Eclipce的操作
File-Export-ExportAndroidApplication-Selectproject-Using
theexistingkeystore,andinputpassword-selectthedestinationAPKfile
经过混淆后的源代码,原先的类名和方法名会被类似a,b,c。。。的字符所替
换,混淆的原理其实也就是类名和方法名的映射。
proguard自己考一个就行
二、proguard原理
Java代码编译成二进制class文件,这个class文件也可以反编译成源代码,除了注释
外,原来的code基
本都可以看到。为了防止重要code被泄露,我们往往需要混淆(Obfuscationcode,也
就是把方法,字段,包和
类这些java元素的名称改成无意义的名称,这样代码结构没有变化,还可以运行,但是想
弄懂代码的架构却很难。
proguard就是这样的混淆工具,它可以分析一组class的结构,根据用户的配置,然后
把这些class文件的可以混
淆java元素名混淆掉。在分析class的同时,他还有其他两个功能,删除无效代码
(Shrinking收缩),和代码进
行优化(OptimizationOptions)。
缺省情况下,proguard会混淆所有代码,但是下面几种情况是不能改变java元素的名称,
否则就会这样就
会导致程序出错。
一,我们用到反射的地方。
二,我们代码依赖于系统的接口,比如被系统代码调用的回调方法,这种情况最复杂。
三,是我们的java元素名称是在配置文件中配置好的。
所以使用proguard时,我们需要有个配置文件告诉proguard那些java元素是不能混淆的。
三、proguard配置
1、最常用的配置选项
-dontwarn缺省proguard会检查每一个引用是否正确,但是第三方库里面往往有些不会用
到的类,没有正确引用。如果不配置的话,系统就会报错。
-keep指定的类和类成员被保留作为入口。
-keepclassmembers指定的类成员被保留。
-keepclasseswithmembers指定的类和类成员被保留,假如指定的类成员存在的话。
2、proguard问题和风险
代码混淆后虽然有混淆优化的好处,但是它往往也会带来如下的几点问题
1,混淆错误,用到第三方库的时候,必须告诉proguard不要检查,否则proguard会报
错。
2,运行错误,当code不能混淆的时候,我们必须要正