Android代码混淆

来源:互联网 发布:淘宝抓绒衣 编辑:程序博客网 时间:2024/05/29 13:59

记录下自己在代码混淆过程中遇到的问题:

这两个文件是ADT创建项目时自动生成混淆代码的文件,其中project.properties是控制是否混淆代码,proguard-project.txt是定义混淆规则的。自己瞎翻译了下:

project.properties:

proguard-project.txt:

当project.properties文件中混淆代码的注释被打开后,打包apk的时候,就会进行代码混淆,混淆过程中遇到了不少问题:

1、  找不到proguard-android.txt文件


在sdk目录/tools/下没有proguard文件夹,自己创建了这个文件夹,然后把proguard-android.txt复制过来,后来发现这样是不行的,会报Failed to export application这个错:

把整个proguard文件夹复制到sdk的tools目录下才行,我复制过来的proguard文件夹包含以下文件:


2、  继续打包,继续出现问题

这是没有声明第三方库导致的警告,可以在proguard-project.txt文件里面加上这句忽略这些警告。

 -ignorewarnings

忽略警告之后可以打包成功,但是在程序中调用第三方库的地方可能会出现问题,正常情况下应该只混淆自己写的代码就可以了,第三方库没有必要混淆。那么就要在proguard-project.txt文件中声明第三方jar包和指定不混淆第三方jar包以及忽略第三方包导致的警告。

第三方包可以在Android Private Libraries里面找到:

如果不是第三方jar包,而是外部库工程,声明的时候应该是这样:


忽略警告和不混淆跟上面的jar包一样,其中gesture-imageview是工程名。

一个小插曲:

已经忽略了第三方包com.amap.xx的警告,但是com.amap.api.xx的警告还是出来了,不知道为什么:

com.amap.api.mapcore2d.MapMessage类确实是不存在,但是这是第三方包内部的类,只能单独忽略com.amap.api.xx的警告,这样写就没问题了:


3、 继续打包,然后就爆内存了:

上网找解决方案,重新配置eclipse.ini文件,修改如下:

-Xms512m

-Xmx1024m

-XX:MaxPermSize=1024m

第一个是最小的初始化内存,第二个是最大占有内存,第三个是在编译文件时一直占有最大内存。

然后打包成功!反编译出来,代码确实是混淆了,但是测试的时候,发现一个问题,我自己写的一个方法,被混淆器删除了,混淆器混淆的时候,会精简代码,把注释和没有用到的代码删掉,问题是我的方法肯定是用到了的,但是却被删掉了,后来才发现,这个方法是webView里面的javascript调用的本地方法,其实在proguard-project.txt的介绍里面也提醒了要注意这个问题,只是自己没有留意:


所以,还要保留这个类里面的方法:


到这里,代码混淆算是成功了!


0 0