Android代码混淆
2015-01-26 16:39
267 查看
记录下自己在代码混淆过程中遇到的问题:
这两个文件是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的介绍里面也提醒了要注意这个问题,只是自己没有留意:
所以,还要保留这个类里面的方法:
到这里,代码混淆算是成功了!
这两个文件是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的介绍里面也提醒了要注意这个问题,只是自己没有留意:
所以,还要保留这个类里面的方法:
到这里,代码混淆算是成功了!
相关文章推荐
- Android2.3支持混淆Android代码
- android 代码混淆proguard
- android中使用代码混淆出现Conversion to Dalvik format failed with error 1错误的解决办法
- Eclipse+ADT对android apk 进行代码混淆(proguard)
- android apk 为程序增加代码混淆
- Android代码混淆处理方法
- Android杂谈--代码混淆及proguard一些错误处理
- Android代码混淆一定要Export Android Application,否则不起效
- Android 2.3 代码混淆proguard技术介绍
- 在android中使用proguard混淆代码出现“Conversion to Dalvik format failed with error 1”错误的解决方法
- [对android程序作代码混淆]
- Android 混淆代码问题总结
- Android项目代码混淆
- 如何混淆Android项目代码(ProGuard),防止反编译
- Android 2.3 代码混淆proguard技术介绍
- Android 2.3 代码混淆proguard技术介绍
- android 代码 混淆- 原来如此简单
- 在android中使用proguard混淆代码出现“Conversion to Dalvik format failed with error 1”错误的解决方法
- android中使用代码混淆出现Conversion to Dalvik format failed with error 1错误的解决办法
- 代码混淆—android被反编译的两种解决方案