Android 混淆 ProGuard

配置文件build.gradle android {html

signingConfigs {
		release {
			keyAlias 'XXX'
			keyPassword 'XXX'
			storeFile file('../key/XXX.jks') // 位置:xxApplication/key/XXX.jks'
			storePassword 'XXX'
		}
	}
	compileSdkVersion 23
	buildToolsVersion "23.0.2"

	defaultConfig {
		applicationId "com.XXX.XXX"
		minSdkVersion 15
		targetSdkVersion 22
		versionCode 1
		versionName "1.0"
	}

	buildTypes {
		release {
			//日誌
			buildConfigField "boolean", "LOG_DEBUG", "true"
			//混淆
			minifyEnabled true
			//Zipalign優化
			zipAlignEnabled true
			//移除無用的resource文件
			shrinkResources true
			//簽名
			signingConfig signingConfigs.release
			//的混淆文件
			proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
		}
		debug {
			buildConfigField "boolean", "LOG_DEBUG", "true"
			versionNameSuffix "-debug"
			zipAlignEnabled false
			shrinkResources false
			minifyEnabled false
			signingConfig signingConfigs.release
			proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
		}
	}
}

混淆文件proguard-rules.projava

#保護註解
-keepattributes *Annotation*

#避免混淆泛型
-keepattributes Signature
-keepattributes EnclosingMethod

#刪除日誌
-assumenosideeffects class android.util.Log{
	public static boolean isLoggable(java.lang.String, int);
	public static int v(...);
	public static int d(...);
	public static int i(...);
	public static int w(...);
	public static int e(...);
}	

# 保持哪些類不被混淆(第三方)
-keep class com.amap.api.** {*;}
-dontwarn com.amap.api.**

#實體類不被混淆
-keep public class com.xxx.xxx.xxx.entity.** {
  public void set*(***);
  public *** get*();
}

#### 此處用 *; 替代,由於Gson解析內部類會實例化不了
-keep public class com.xxx.xxx.xxx.entity.** {
   *;
}

#jackson
-keepnames class com.fasterxml.jackson.** { *; }
-dontwarn com.fasterxml.jackson.databind.**
-keep class org.codehaus.** { *; }
-keepclassmembers public final enum org.codehaus.jackson.annotate.JsonAutoDetect$Visibility {
 public static final org.codehaus.jackson.annotate.JsonAutoDetect$Visibility *; }

#gson
-keep class com.google.gson.** { *; }
-keep class com.google.gson.stream.** { *; }

#butterknife
-keep class butterknife.** { *; }

混淆生成的文件linux

1.dump.txt apk包內全部class的內部結構android

2.mapping.txt 混淆先後的映射git

3.seeds.txt 未混淆的類和成員github

4.usage.txt 列出從apk中刪除的代碼api

還原混淆後的代碼app

GUI 工具:proguardgui 位於 <android-sdk>/tools/proguard/bin/ 目錄
1) 運行 proguardgui.bat
2) 從左邊的菜單選擇 「ReTrace」
3) 在上面的 mapping 文件中選擇你的 mapping 文件 ,在下面輸入框輸入要還原的代碼
4) 點擊 「ReTrace!」 按鈕

命令行工具:retrace.bat,
1)把 mapping 文件和要還原的堆棧信息保存在 stacktrace 文件中
2)把這兩個文件複製到 retrace.bat 目錄下,運行以下命令便可。
3)retrace.bat -verbose mapping.txt stacktrace.txt > out.txt

參考ide

google android 文檔 https://developer.android.com/studio/build/shrink-code.html工具

android混淆出現的問題與思考? https://www.zhihu.com/question/33184477

ProGuard 手冊 http://stuff.mit.edu/afs/sipb/project/android/sdk/android-sdk-linux/tools/proguard/docs/index.html#manual/introduction.html

安卓集成發佈詳解(二) http://frank-zhu.github.io/android/2015/06/15/android-release_app_build_gradle/

AndroidStudio 混淆打包 http://www.cnblogs.com/permanent2012moira/p/5126276.html

Android程序保護與破解淺析 http://www.cnblogs.com/waylife/p/3675684.html

ProGuard基礎語法和打包配置 http://blog.csdn.net/weizaishouex2010/article/details/49865523

相關文章
相關標籤/搜索