天天看点

Proguard语法及常用proguard.cfg代码段

1、proguard的常用语法

-libraryjars class_path 应用的依赖包,如android-support-v4

-keep [,modifier,...] class_specification 不混淆某些类

-keepclassmembers [,modifier,...] class_specification 不混淆类的成员

-keepclasseswithmembers [,modifier,...] class_specification 不混淆类及其成员

-keepnames class_specification 不混淆类及其成员名

-keepclassmembernames class_specification 不混淆类的成员名

-keepclasseswithmembernames class_specification 不混淆类及其成员名

-assumenosideeffects class_specification 假设调用不产生任何影响,在proguard代码优化时会将该调用remove掉。如system.out.println和log.v等等

-dontwarn [class_filter] 不提示warnning

2、标准proguard.cfg文件内容

参考android标准,修改如下:

标准proguard.cfg文件内容

3、常用proguard.cfg代码段

不混淆某类的构造方法,需指定构造函数的参数类型,如jsonobject

java

1

2

3

-keepclassmembers class cn.trinea.android.common.service.impl.imagecache {

public <init>(int);

}

不混淆某个包所有类或某个类class、某个接口interface, 不混淆指定类则把**换成类名

-keep class cn.trinea.android.common.** { *; }

不混淆指某个方法,*可换成指定的方法或类名

public boolean get(java.lang.string, android.view.view);

不混淆parcelable的子类,防止android.os.badparcelableexception

-keep class * implements android.os.parcelable {

public static final android.os.parcelable$creator *;

添加android-support-v4.jar依赖包

4

-libraryjars libs/android-support-v4.jar

-dontwarn android.support.v4.**

-keep class android.support.v4.** { *; }

-keep interface android.support.v4.app.** { *; }

4、proguard与log level结合解决debug模式log问题

常见的android debug日志的打法是定义一个静态变量debug_status,如果为true,则打印log,否则不打印。对于release模式该变量为false,debug模式变量为true。这里介绍一个更好的方法,不用担心正式发布时一不小心错改了该变量。

proguard的作用就是在release模式压缩、优化、混淆代码,其中的压缩和优化就包括去除不必要的代码,我们可以利用这一特性解决debug日志的问题,在proguard.cfg中添加

-assumenosideeffects class android.util.log {

public static *** d(...);

public static *** v(...);

表示log.d和log.v代码无副作用,在proguard时会被从源码中remove掉,这样release模式(正式发布)就不会打印日志了,而debug模式(平常调试)照常打印,不用修改一点代码大赞吧,嘿嘿*_^

继续阅读