Android 4.0要用ProGuard比2.3更简单:在Eclipse中打开工程目录下的project.properties文件,该文件中有以下两行:
To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
根据这段说明,只要将proguard.config前面的#去掉,就可以利用ProGuard来混淆代码了!当然,默认的设置是不带优化功能的,可以用以下设置来加上代码优化功能(上图蓝色文字部分):
proguard.config=${sdk.dir}/tools/proguard/proguard-android-optimize.txt:proguard-project.txt
接下来就是生成Apk了。这里需要注意的是,如果你用Eclipse里的Run或Build Project/Build All来生成Apk,是不会混淆代码的!在Eclipse的Package Explorer里选中工程的根结点,在右键菜单里找到Android Tools,如下图所示,其下有两个子菜单项:“Export Signed Application Package...”和“Export Unsigned Application Package...”,一个是带RSA数字签名,一个是不带数字签名,根据需要选一个,然后按照向导操作即可,最终生成的Apk就是混淆过代码的了!查看效果可以用7z等压缩程序(Ubuntu中直接用归档管理器)打开,将其中的classes.dex解压,用dex2jar转成jar格式后,再用Java反编码工具打开,就会看到代码的混淆效果。
自己在测试的时候是使用了 没有签名的,选择的是Export Unsigned Application Package。
如果使用Export Signed Application Package 打包APK ,关于签名的学习,下面继续介绍......
注意:同时在进行混淆的同时可以自己写一些规则,在工程的 proguard-project.txt 文件中写例如:
1、
-libraryjars libs/android-support-v4.jar
-libraryjars libs
就是加载第三方Jar包
2、
-ignorewarnings
是去除代码中的警告
3、
-keep class com.alibaba.fastjson.**
-keep 保留不希望混淆的类
4、
-keep class com.msd.followme.Render{
public *;
}
此类的公共方法保留,不混淆。
签名的学习:
为什么要签名?
开发Android的人这么多,完全有可能大家都把类名,包名起成了一个同样的名字,这时候如何区分?签名这时候就是起区分作用的。
由于开发商可能通过使用相同的Package Name来混淆替换已经安装的程序,签名可以保证相当名字,但是签名不同的包不被替换。
APK如果使用一个key签名,发布时另一个key签名的文件将无法安装或覆盖老的版本,这样可以防止你已安装的应用被恶意的第三方覆盖或替换掉。
这样签名其实也是开发者的身份标识。交易中抵赖等事情发生时,签名可以防止抵赖的发生。
签名的注意事项
所有的Android应用都必须有数字签名,没有不存在数字签名的应用,包括模拟器上运行的。Android系统不会安装没有数字证书的应用。
签名的数字证书不需要权威机构来认证,是开发者自己产生的数字证书,即所谓的自签名。
模拟器开发环境,开发时通过ADB接口上传的程序会先自动被签有Debug权限,然后才传递到模拟器。如下图所示,Eclipse菜单的Window -> Preferences -> Android –> Build 下显示的是我们默认的调试用的签名数字证书。
正式发布一个Android应用时,必须使用一个合适的私钥生成的数字证书来给程序签名,不能使用ADT插件或者ANT工具生成的调试证书来发布。
数字证书都是有有效期的,Android只是在应用程序安装的时候才会检查证书的有效期。如果程序已经安装在系统中,即使证书过期也不会影响程序的正常功能。
签名后需使用zipalign优化程序。
Android将数字证书用来标识应用程序的作者和在应用程序之间建立信任关系,而不是用来决定最终用户可以安装哪些应用程序。
签名的方法
方法一、使用Eclipse工具
此方法适用于Android1.5及以上版本。
步骤一:打开Eclipse->选择你要签名的项目->右击->android tools->Export signed Application package
步骤二,在出现的窗口确认是不是这个项目要签名,然后选择下一步:
步骤三:在Export Android Application 这一步,如果我们之前已有有了 keystore, 选择我们之前已有的,否则我们新建一个。
如下,选择需要保存这个证书文件的目录,以及这个证书文件的一个密码。
步骤四,点击下一步后,我们需要填写keystore的基本信息,如,别名,密码,有效期,姓名,组织,组织名称,所在城市,所在省份,国家等,点击Next
步骤五、选择被签名后的APK保存位置。点击finish。注意是选择最终将产生的文件。
之后我们在刚才选择的目录下就可以看到生成的签名后的APK文件。
以上是一种比较简单的签名方式,一般情况下 使用这种签名方式就可以了....下面的链接还有一种方式是利用JDK自带的工具进行签名,链接如下:
http://www.cnblogs.com/ghj1976/archive/2011/07/18/2109381.html