文档章节

Android 混淆 ProGuard

CrazyManDF
 CrazyManDF
发布于 2016/06/21 15:43
字数 526
阅读 76
收藏 2

配置文件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
博文 77
码字总数 30000
作品 0
程序员
使用proguard混淆android代码

当前是有些工具比如apktool,dextojar等是可以对我们android安装包进行反编译,获得源码的。为了减少被别人破解,导致源码泄露,程序被别人盗取代码,等等。我们需要对代码进行混淆,android...

码农明明
2014/05/31
0
4
Android Apk包的签名出库、自动编译与混淆

1.签名与打正式包 右键工程,android tools export signed application 可以帮你生成签名(如果没有的话)以及打签名正式包 这时目录内会自动生成几个需要的文件,并且打一个不混淆的正式包 ...

hawkyoung
2013/11/04
0
0
Jean同学的Proguard私房物语

由于项目中自主研发的一个Android平台工具库需要提供给外部人员使用,我们决定使用android sdk自带的proguard tool混淆源码。在动用了google之后得到的大量资源文中,拨云见雾、去糟存精,融...

jeanwoo
2012/08/10
0
0
利用Eclipse打包混淆时报:Conversion to Dalvik format fai...

我是一个Android菜鸟,自己学习android,有时候遇到问题总是云里雾里,看吧!今天又遇到了让人喊冤的问题。直至解决了问题仍不知道原因,反正就这么着了。。。 想用proguard混淆代码,却没料...

凌黃松
2012/04/13
0
0
[Android]混淆代码后生成带签名的apk

Android从2.3的SDK开始,将ProGuard混淆代码的功能加入了进来。 我们可以从android sdk的tools目录下看到有一个proguard目录。说明具有了代码混淆的功能。 至于如何进行代码的混淆。我们需要...

亭子happy
2012/10/11
0
4

没有更多内容

加载失败,请刷新页面

加载更多

linux使用ntfs-3g操作ntfs格式硬盘

Linux内核目前只支持对微软NTFS文件系统的读取。 NTFS-3G 是微软 NTFS 文件系统的一个开源实现,同时支持读和写。NTFS-3G 开发者使用 FUSE 文件系统来辅助开发,同时对可移植性有益。 安装 ...

linuxprobe16
今天
1
0
kubeadm部署kubernetes集群

一、环境要求 这里使用RHEL7.5 master、etcd:192.168.10.101,主机名:master node1:192.168.10.103,主机名:node1 node2:192.168.10.104,主机名:node2 所有机子能基于主机名通信,编辑...

人在艹木中
今天
7
0
Shell特殊符号总结以及cut,sort,wc,uniq,tee,tr,split命令

特殊符号总结一 * 任意个任意字符 ? 任意一个字符 # 注释字符 \ 脱义字符 | 管道符 # #号后的备注被忽略[root@centos01 ~]# ls a.txt # 备注 a.txt[root@centos01 ~]# a=1[root@centos01...

野雪球
今天
2
0
OSChina 周二乱弹 —— 程序员圣衣

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @达尔文:分享Skeeter Davis的单曲《The End of the World》 《The End of the World》- Skeeter Davis 手机党少年们想听歌,请使劲儿戳(这里...

小小编辑
今天
18
0
[ python import module ] 导入模块

import moudle_name ----> import module_name.py ---> import module_name.py文件路径 -----> sys.path (这里进行查找文件) # from app.web import Personimport app.web.Person as Pe......

_______-
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部