侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

Android 混淆 ProGuard

2024-05-13 星期一 / 0 评论 / 0 点赞 / 96 阅读 / 4037 字

配置文件build.gradleandroid {signingConfigs {release {keyAlias 'XXX'keyPassword 'XXX'storeFile file('../

配置文件build.gradleandroid {

	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.pro

#保护注解-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.** { *; }

混淆生成的文件

1.dump.txt apk包内所有class的内部结构

2.mapping.txt 混淆前后的映射

3.seeds.txt 未混淆的类和成员

4.usage.txt 列出从apk中删除的代码

还原混淆后的代码

GUI 工具:proguardgui 位于 <android-sdk>/tools/proguard/bin/ 目录1) 运行 proguardgui.bat2) 从左边的菜单选择 “ReTrace”3) 在上面的 mapping 文件中选择你的 mapping 文件 ,在下面输入框输入要还原的代码4) 点击 “ReTrace!” 按钮命令行工具:retrace.bat,1)把 mapping 文件和要还原的堆栈信息保存在 stacktrace 文件中2)把这两个文件复制到 retrace.bat 目录下,运行如下命令即可。3)retrace.bat -verbose mapping.txt stacktrace.txt > out.txt

参考

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

广告 广告

评论区