Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android 實現代碼混淆

android 實現代碼混淆

編輯:關於Android編程

對於使用簽名的apk,常用的反編譯之後還是能查看class文件的代碼實現,對於反編譯可查看個人的博客點擊打開鏈接

使用代碼混淆就能是這種常規反編譯失效

1,在build.grandle添加,其中規則寫在proguard-rules.pro中,也可以自定義一個文件,將其代替,比如eclipse常用的 proguard-project.txt

 

buildTypes {
    release {
        signingConfig signingConfigs.release
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}

2,在proguard-rules.pro中加入以下代碼,基本可以涵蓋所有

 

 

-optimizationpasses 5          # 指定代碼的壓縮級別
-dontusemixedcaseclassnames   # 是否使用大小寫混合
-dontpreverify           # 混淆時是否做預校驗
-verbose                # 混淆時是否記錄日志
-dontwarn com.umeng.**                                                          
#保持com.umeng.**這個包裡面的所有類和所有方法不被混淆。(沒有友盟的集成時刪除此句)
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*  # 混淆時所采用的算法

-keep public class * extends android.app.Activity      # 保持哪些類不被混淆
-keep public class * extends android.app.Application   # 保持哪些類不被混淆
-keep public class * extends android.app.Service       # 保持哪些類不被混淆
-keep public class * extends android.content.BroadcastReceiver  # 保持哪些類不被混淆
-keep public class * extends android.content.ContentProvider    # 保持哪些類不被混淆
-keep public class * extends android.app.backup.BackupAgentHelper # 保持哪些類不被混淆
-keep public class * extends android.preference.Preference        # 保持哪些類不被混淆
-keep public class com.android.vending.licensing.ILicensingService    # 保持哪些類不被混淆

-keepclasseswithmembernames class * {  # 保持 native 方法不被混淆
    native ;
}
-keepclasseswithmembers class * {   # 保持自定義控件類不被混淆
    public (android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembers class * {
# 保持自定義控件類不被混淆
    public (android.content.Context, android.util.AttributeSet, int);
}-keepclassmembers class * extends android.app.Activity { # 保持自定義控件類不被混淆 public void *(android.view.View);}-keepclassmembers enum * { # 保持枚舉 enum 類不被混淆 public static **[] values(); public static ** valueOf(java.lang.String);}-keep class * implements android.os.Parcelable { # 保持 Parcelable 不被混淆 public static final android.os.Parcelable$Creator *;}
3,通過Android Studio進行混淆代碼時,默認已經將 lib目錄中的 jar 都已經添加到打包腳本中,所以不需要再次手動添加,否則會出現“ java.io.IOException: The same input jar is specified twice” 錯誤。

 

4,打出帶簽名的apk進行反編譯,查看代碼,混淆後與混淆前圖如下

hspace=50\

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved