一、为什么要进行代码混淆
说白了,在没有知识产权保护的天朝,我们所要做的就是尽量的不要泄露自己的一些“劳动成果”,当然专门拿来开源的除外。也就是说,代码混淆之后,即使android程序再怎么容易被反编译,但是反编译之后的代码大多是一些符号,也会尽量阻挡一些恶意的人
二、那该怎么做?
- 项目结构应该是这样的
注意,多了一个proguard.cfg
- 在project.properties中加上这么一句
proguard.config=proguard.cfg
- 在Export的时候就会自动帮你进行混淆啦
三、你可能会遇到的一些问题
但是解决思路是:1:混淆时过滤掉已混淆第三方库、本地方法、枚举、序列化的类、setter和getter、注解等(使用keep关键字);2:看看是不是API版本低了,比如你引入的某个第三方库是在API19下面编译的,并且用到了API19才有的特性,而你却在API17下面编译,自然会有API19的新特性(新方法)找不到,所以方法1都试了还没办法,那把API版本升到最高说不定就解决了哟!(不避讳的说,我这次就遇到了这个问题)
- 混淆时报错
不要着急,其实我第一次做代码混淆的时候,也遇到这个错误,慢慢 看错误信息,会有解决办法的。这个只是一个error code,并没有具体的错误信息,而实际中的错误类型大致都有:1:找不到类、2:有多个映射、3:找不到方法等错误Proguard returned with error code 1
四、更多资料
proguard的相关语法
-libraryjars class_path #应用的依赖包(感觉没用,因为project中已经引入了啊,望指正) -keep [,modifier,...] class_specification #不混淆某些类 -keepclassmembers [,modifier,...] class_specification #不混淆类的成员 -keepclasseswithmembers [,modifier,...] class_specification #不混淆类及其成员 -keepnames class_specification #不混淆类及其成员名 -keepclassmembernames class_specification #不混淆类的成员名 -keepclasseswithmembernames class_specification #不混淆类及其成员名 -dontwarn [class_filter] #不提示warnning,即忽略错误或者警告
更多Proguard语法