Proguard 混淆 基本使用

這兩天打包發(fā)現(xiàn)用到反射的地方拋出異常,折騰半天才搞出來,記錄一下,以便查看。
用到design包,不設置發(fā)現(xiàn)design包的屬性已經(jīng)發(fā)生混淆,導致反射獲取不到指定屬性 ==!簡單粗暴,直接keep design包

  -keep public class android.support.design.** {*;}     # 保持哪些類不被混淆

Proguard關鍵字


  關鍵字                      描述
  -keep                        保留類和類中的成員,防止被混淆或移除
  -keepnames                   保留類和類中的成員,防止被混淆,成員沒有被引用會被移除
  -keepclassmembers            只保留類中的成員,防止被混淆或移除
  -keepclassmembernames        只保留類中的成員,防止被混淆,成員沒有引用會被移除
  -keepclasseswithmembers      保留類和類中的成員,防止被混淆或移除,保留指明的成員
  -keepclasseswithmembernames  保留類和類中的成員,防止被混淆,保留指明的成員,成員沒有引用會被移除
  -keepattributes  保留某些屬性不被混淆,可選(*Annotation*,InnerClasses,Signature,SourceFile,LineNumberTable)
  -keep

Proguard通配符

  通配符      描述
  <field>     匹配類中的所有字段
  <method>    匹配類中所有的方法
  <init>      匹配類中所有的構造函數(shù)
  *           匹配任意長度字符,不包含包名分隔符(.)
  **          匹配任意長度字符,包含包名分隔符(.)
  ***         匹配任意參數(shù)類型

·
#---------------------------------基本指令區(qū)----------------------------------
-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontskipnonpubliclibraryclassmembers
-dontpreverify
-verbose
-printmapping proguardMapping.txt
-optimizations !code/simplification/cast,!field/,!class/merging/
-keepattributes Annotation,InnerClasses
-keepattributes Signature
-keepattributes SourceFile,LineNumberTable
#----------------------------------------------------------------------------

自定義混淆注解

  • 創(chuàng)建注解對象
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
* NotProguard, Means not proguard something, like class,     method, field<br/>
*/
@Retention(RetentionPolicy.CLASS)
@Target({ElementType.TYPE, ElementType.METHOD, ElementType.CONSTRUCTOR, ElementType.FIELD})
public @interface NotProguard {
}
  • 注解修飾類,成員或者屬性

     @NotProguard 
     public class Main {
     
       @NotProguard 
       public int id;
       @NotProguard 
       public void method (){
       }
     }
    
  • 在混淆文件設置被注解修飾的方法,類或者成員不被混淆

     # keep annotated by NotProguard
     -keep @com.mobi.zw.common.annotation.NotProguard class * {*;}
     -keep class * {
     @com.mobi.zw.common.annotation.NotProguard <fields>;
     }
      -keepclassmembers class * {
     @com.mobi.zw.common.annotation.NotProguard <methods>;
     }
    
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容