最近作了2个项目,所有要混淆,刚接触,本身在网上找了还多资料,感受各有千秋,本身总结了一下, 第一次发帖,不喜勿喷。求各类指导!!!
android
应用程序的混淆打包规范
1.在工程文件
project.properties
中加入下
proguard.config=proguard.cfg
, 以下所示:
target=android-8
proguard.config=proguard.cfg
Eclipse
会经过此配置在工程目录生成
proguard.cfg
文件,可是这只能混淆不含第三方包的工程。
而咱们的项目中大量使用了第三方包,在用自动生成的混淆文件会致使打包不成功,或者打包成功不能运行的状况,因此必须在基本代码的基础加上其余的属性将第三方库隔离开来不被混淆。
2.
含有第三方库的工程混淆,首先去看引用库的官方文档,通常会给出混淆方案,由于有时第三方库中也许不仅有一个
jar
包,第三方库自己可能也会用到其余的
jar
包,一个个找出来去单独混淆会很浪费时间。
3.
常见第三方库混淆流程:
1.首先加入-dontwarn//
不用输出警告,增大混淆的成功率
2.将对应的第三方库的包名采用一样的方法解除警告
-dontwarn com.slidingmenu.lib.app.**
-dontwarn com.actionbarsherlock.app.**
-dontwarn android.support.v4.**
-dontwarn com.slidingmenu.lib.**
-dontwarn cn.sharesdk.**
3.指明
lib
包的在工程中的路径,-libraryjars
后面跟要编译
in.jar 的其它类包,若是是多个,用多行列出
-libraryjars libs/gson-2.2.2.jar
4.
引入后,对项目使用到的入口类进行指定,-keep
后跟项目的 入口类
-keep class universal-image-loader-1.8.4-with-sources.** { *; }
-keep interface universal-image-loader-1.8.4-with-sources.** { *; }
-keep class lockSDK_3.3.** { *; }
-keep interface lockSDK_3.3.** { *; }
-keep class MobileProbe.jar.** { *; }
-keep interface MobileProbe.jar.** { *; }
-keep class android.net.http.SslError
-keep class android.webkit.**{*;}
-keep class cn.sharesdk.**{*;}
-keep class com.sina.**{*;}
keep
就是 告诉
proguard
不用混淆这个包里面的类
5.
有一些特殊包须要注意
若是加了
android.support
包的话,那么要加上
-libraryjars libs/android-support-v4.jar
-dontwarn android.support.v4.**
-keep class android.support.v4.** { ; }
若是加了
gson
包的话,那么要加上
-libraryjars libs/gson-2.2.2.jar
-keep class sun.misc.Unsafe { *; }
-keep class com.google.gson.stream.* { ; }
-keep class com.google.gson.examples.android.model.* { ; }
-keep class com.google.gson.* { *;}
若是项目中含有引用接口的实体的话,那么要加上
-keep public class * implements java.io.Serializable{
public protected private *;
}
若是项目中含有设值注入的实体的话,可能会在打包运行不报错, 可是运行报错,好比空指针异常,或者是反射的时候报错是不 是实体类被混淆了。致使找不到实体类 没法
get
或者
set
,那么 要加上
-keep public class mypackage.MyBean { public void setMyProperty(int); public int getMyProperty();}
4.最后,咱们看一看混淆的过程
-libraryjars libs/android-support-v4.jar
-dontwarn android.support.v4.**
-keep class android.support.v4.** { ; }
解释:
-libraryjars指明
lib
包的在工程中的路径,而-dontwarn android.support.v4.**和-keep class android.support.v4.** { ; },这两个参数用来保持第三方库中的类而不乱,将
-dontwarn
和
-keep
结合使用,意思是保持android.support.v4.** { ; },这个包里面的全部类和全部方法而不混淆,接着还叫
ProGuard
不要警告找不到android.support.v4.** { ; }这个包里面的类的相关引用,防止可接受警告的出现影响到程序的运行。
注:混淆基本流程就是这样,不一样的第三方库大同小异,均可以采用这种方法去处理!!!
|