增強APP的安全性(二)

增強APP的安全性(二) –通過混淆

ProGuard的常用語法

  # 指定代碼的壓縮級別
  -optimizationpasses 5  
  # 是否使用大小寫混合 混淆時不會產生形形色色的類名             
  -dontusemixedcaseclassnames 
  # 是否混淆第三方jar        
  -dontskipnonpubliclibraryclasses 
  # 混淆時是否做預校驗   
  -dontpreverify    
  # 混淆時是否記錄日誌                  
  -verbose   
  # 不優化輸入的類文件                         
  -dontoptimize     
  #不提示警告
 -dontwarn [class_filter]     
               
  #應用的依賴包,如android-support-v4
 -libraryjars class <path> 
 #不混淆某些類
 -keep [,modifier,...] class <specification> 
 #不混淆類的成員
 -keepclassmembers [,modifier,...] class <specification> 
 #不混淆類及其成員
 -keepclasseswithmembers [,modifier,...] class <specification> 
 #不混淆類及其成員名
 -keepnames class <specification> 
 #不混淆類的成員名
 -keepclassmembernames class <specification> 
 #不混淆類及其成員名
 -keepclasseswithmembernames class <specification> 
 #假設調用不產生任何影響,在proguard代碼優化時會將該調用remove掉。如system.out.println和Log.v等等
 -assumenosideeffects class <specification> 

通配符

類名、成員函數名、和成員變量名可以試用一下通配符:
1) % :匹配任何原始類型,如 boolean 、 int 等,但不包括 void ;

2) ? :匹配一個任意字符,不包括句號;

3) * :匹配任意個任意字符,不包括句號;

4) ** :匹配任意個任意字符,包括句號;

5) * :匹配任意類型,包括原始類型和非原始類型,數組類型和非數組類型;

6) … :匹配任何數目個任何類型的參數。

關鍵字

  1. 在類名前、類中成員變量和成員函數名前,可以加上訪問限定符(如 public 、 private 、 protected 等,修飾類、成員變量和成員函數的訪問限定符各不相同)。如果加上了訪問限定符後,就表示要匹配的類、成員變量或成員函數的定義中必須包含這些限定符。如果在限定符前面加上感嘆號“ ! ”,則剛好相反,定義中必須不包含這些限定符

  2. extends 和 implements 表示限定類一定要擴展自一個指定類或者實現了一個指定接口類,這時候通常類名部分是一個星號。

示例

1.不混淆某個實體類或者某個包名下所有的類

#不混淆class com.test.Person這個類
-keep class com.test.Person {*;}
#不混淆class com.test這個包名下的所有類
-keep class com.test.** { *; }

2.不混淆類的成員

-keepclassmembers class * extends android.app.Activity {
   public void *(android.view.View);
}

3不混淆類名及其成員

-keepclasseswithmembernames com.test.Person{
   public boolean *(java.lang.String,android.view.View);
}

# 保持該類名和native 方法不被混淆
-keepclasseswithmembernames class * {     
    native ;
}

在Android Studio中配置混淆文件


    buildTypes {
        release {
             ...
            // 移除無用的resource文件
            shrinkResources true
            zipAlignEnabled true
            //混淆
            minifyEnabled true
            #proguard-rules.pro就是你項目裏的混淆配置文件
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            ...
        }
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章