文档章节

Android 混淆 ProGuard

CrazyManDF
 CrazyManDF
发布于 2016/06/21 15:43
字数 526
阅读 74
收藏 2
点赞 0
评论 0

配置文件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 位于 <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

参考

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

© 著作权归作者所有

共有 人打赏支持
CrazyManDF
粉丝 3
博文 73
码字总数 25546
作品 0
程序员
bulid.gradle 解析

外层的bulid.gradle文件 两处的repositories的闭包中都声明了jcenter() 这行配置。 jcenter是一个代码托管仓库,很多Androdi开源项目都会选择将代码托管到jcenter上,声明了这个配置之后,可...

Jerry_0221 ⋅ 06/12 ⋅ 0

安卓应用安全指南 4.8 输出到 LogCat

4.8 输出到 LogCat 原书:Android Application Secure Design/Secure Coding Guidebook 译者:飞龙 协议:CC BY-NC-SA 4.0 在 Android 中有一种名为 LogCat 的日志机制,不仅系统日志信息,还...

apachecn_飞龙 ⋅ 03/24 ⋅ 0

Android代码混淆,资源混淆,SO混淆

> 代码混淆 通过ProGuard或者DexGuard来保护我们的代码,从而实现相对的代码安全。靠Android资源管理框架来完成的,而Android资源管理框架实际是由AssetManager和Resources两个类来实现的。其...

shareus ⋅ 05/04 ⋅ 0

Flutter Plugin开发流程

这篇文章主要介绍了Flutter Plugin开发流程,包括如何利用Android Studio开发以及发布等。 今天这篇文章,给大家介绍如何开发Flutter Plugin中Android的部分。有关Flutter以及Flutter Plugi...

Q吹个大气球Q ⋅ 05/12 ⋅ 0

一文了解安卓APP逆向分析与保护机制

本文由 网易云 发布 “知物由学”是网易云易盾打造的一个品牌栏目,词语出自汉·王充《论衡·实知》。人,能力有高下之分,学习才知道事物的道理,而后才有智慧,不去求问就不会知道。“知物...

wangyiyungw ⋅ 05/15 ⋅ 0

Android Studio 3.2 Canary 15 发布,问题修复版

Android Studio 3.2 Canary 15 已发布,主要更新内容如下: 改进 R8 解析 ProGuard 规则 改进有关 ProGuard 配置的错误 修复:Kotlin 测试案例的代码覆盖率报告为 0% 修复:名称以下划线()...

达尔文 ⋅ 05/18 ⋅ 0

Android App安全防范措施的小结

本文只是对最近工作的一些小结,方便以后的查询。 关闭日志的打印 关闭打印的日志,防止日志中的调试信息被看到。如果在网络框架中使用了日志,那就更加需要关闭了。 代码混淆 代码混淆是最基...

fengzhizi715 ⋅ 05/23 ⋅ 0

集成开发工具 Android Studio 3.2 Canary 13 发布

Android Studio 3.2 Canary 13 已经发布在 Canary 和 Dev 频道。 Android Studio 是一个 Android 集成开发工具,基于 IntelliJ IDEA,类似 Eclipse ADT,Android Studio 提供了集成的 Androi...

雨田桑 ⋅ 05/01 ⋅ 0

ARetrofit组建化最佳路由

Android组件化超级路由,为简单而生。 Github 源码: ARetrofit 原文 demo demo apk 下载 一 介绍 从命名来看,做Android开发的小伙伴们感觉是不是似曾相识…是的,Retrofit,一款优秀的网络框...

CharlesZhu ⋅ 06/05 ⋅ 0

JBoot项目中如何配置proguard进行代码混淆

貌似配置了下proguard,打包出来的jar没法运行成功,不知道大佬们有配置成功的proguard的配置示例没?

bluesky4485 ⋅ 05/12 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

知乎Java数据结构

作者:匿名用户 链接:https://www.zhihu.com/question/35947829/answer/66113038 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 感觉知乎上嘲讽题主简...

颖伙虫 ⋅ 今天 ⋅ 0

Confluence 6 恢复一个站点有关使用站点导出为备份的说明

推荐使用生产备份策略。我们推荐你针对你的生产环境中使用的 Confluence 参考 Production Backup Strategy 页面中的内容进行备份和恢复(这个需要你备份你的数据库和 home 目录)。XML 导出备...

honeymose ⋅ 今天 ⋅ 0

JavaScript零基础入门——(九)JavaScript的函数

JavaScript零基础入门——(九)JavaScript的函数 欢迎回到我们的JavaScript零基础入门,上一节课我们了解了有关JS中数组的相关知识点,不知道大家有没有自己去敲一敲,消化一下?这一节课,...

JandenMa ⋅ 今天 ⋅ 0

火狐浏览器各版本下载及插件httprequest

各版本下载地址:http://ftp.mozilla.org/pub/mozilla.org//firefox/releases/ httprequest插件截至57版本可用

xiaoge2016 ⋅ 今天 ⋅ 0

Docker系列教程28-实战:使用Docker Compose运行ELK

原文:http://www.itmuch.com/docker/28-docker-compose-in-action-elk/,转载请说明出处。 ElasticSearch【存储】 Logtash【日志聚合器】 Kibana【界面】 答案: version: '2'services: ...

周立_ITMuch ⋅ 今天 ⋅ 0

使用快嘉sdkg极速搭建接口模拟系统

在具体项目研发过程中,一旦前后端双方约定好接口,前端和app同事就会希望后台同事可以尽快提供可供对接的接口方便调试,而对后台同事来说定好接口还仅是个开始、设计流程,实现业务逻辑,编...

fastjrun ⋅ 今天 ⋅ 0

PXE/KickStart 无人值守安装

导言 作为中小公司的运维,经常会遇到一些机械式的重复工作,例如:有时公司同时上线几十甚至上百台服务器,而且需要我们在短时间内完成系统安装。 常规的办法有什么? 光盘安装系统 ===> 一...

kangvcar ⋅ 昨天 ⋅ 0

使用Puppeteer撸一个爬虫

Puppeteer是什么 puppeteer是谷歌chrome团队官方开发的一个无界面(Headless)chrome工具。Chrome Headless将成为web应用自动化测试的行业标杆。所以我们很有必要来了解一下它。所谓的无头浏...

小草先森 ⋅ 昨天 ⋅ 0

Java Done Right

* 表示难度较大或理论性较强。 ** 表示难度更大或理论性更强。 【Java语言本身】 基础语法,面向对象,顺序编程,并发编程,网络编程,泛型,注解,lambda(Java8),module(Java9),var(...

风华神使 ⋅ 昨天 ⋅ 0

Linux系统日志

linux 系统日志 /var/log/messages /etc/logrotate.conf 日志切割配置文件 https://my.oschina.net/u/2000675/blog/908189 logrotate 使用详解 dmesg 命令 /var/log/dmesg 日志 last命令,调......

Linux学习笔记 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部