天天看點

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模式(平常調試)照常列印,不用修改一點代碼大贊吧,嘿嘿*_^

繼續閱讀