博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android 混淆 ProGuard
阅读量:7170 次
发布时间:2019-06-29

本文共 2634 字,大约阅读时间需要 8 分钟。

hot3.png

配置文件build.gradle android {

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 位于 
/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 文档

android混淆出现的问题与思考?

ProGuard 手册

安卓集成发布详解(二)

AndroidStudio 混淆打包

Android程序保护与破解浅析

ProGuard基础语法和打包配置

转载于:https://my.oschina.net/u/2501904/blog/698520

你可能感兴趣的文章
补充属性及标签
查看>>
涅槃蜕变180°转身计划 2013.5.14--2013.12.31
查看>>
ZJUT OJ 1004
查看>>
Android 蓝牙的常用操作
查看>>
HDU 4780 Candy Factory
查看>>
java volatile的一个验证反例(转)
查看>>
网络名词解释
查看>>
JSch
查看>>
POJ 3254 Corn Fields(状态压缩DP)
查看>>
SAP OLE中常用的一些方法和属性
查看>>
C#正则表达式匹配“换行\回车”等问题
查看>>
批量SQL
查看>>
给TextView 加上圆角和边框
查看>>
Android项目导入Eclipse出现错误解决办法
查看>>
chromium开发准备——重定向webui资源
查看>>
Centos版Linux 一些常用操作命令
查看>>
开源数据访问组件Smark.Data 1.8
查看>>
K&R《C语言程序设计》代码慢录一
查看>>
jQuery去掉字符串起始和结尾的空格
查看>>
poj1572
查看>>