这篇文章等是跟你们分享一在Android studio 进行代码混淆配置。以前你们在eclipse上也弄过代码混淆配置,其实同样,你们能够把以前在eclipse上的配置文件直接拿过来用。无论是.cfg文件仍是.txt文件都同样。java
先给你们贴一个混淆模板吧。注释很清楚。是我目前一个项目用的proguard.cfg配置文件android
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
|
#指定代码的压缩级别
-optimizationpasses
5
#包明不混合大小写
-dontusemixedcaseclassnames
#不去忽略非公共的库类
-dontskipnonpubliclibraryclasses
#优化 不优化输入的类文件
-dontoptimize
#预校验
-dontpreverify
#混淆时是否记录日志
-verbose
# 混淆时所采用的算法
-optimizations !code/simplification/arithmetic,!field/*,!
class
/merging/*
#保护注解
-keepattributes *Annotation*
# 保持哪些类不被混淆
-keep
public
class
*
extends
android.app.Fragment
-keep
public
class
*
extends
android.app.Activity
-keep
public
class
*
extends
android.app.Application
-keep
public
class
*
extends
android.app.Service
-keep
public
class
*
extends
android.content.BroadcastReceiver
-keep
public
class
*
extends
android.content.ContentProvider
-keep
public
class
*
extends
android.app.backup.BackupAgentHelper
-keep
public
class
*
extends
android.preference.Preference
-keep
public
class
com.android.vending.licensing.ILicensingService
#若是有引用v4包能够添加下面这行
-keep
public
class
*
extends
android.support.v4.app.Fragment
#忽略警告
-ignorewarning
#####################记录生成的日志数据,gradle build时在本项目根目录输出################
#apk 包内全部
class
的内部结构
-
dump
class_files.txt
#未混淆的类和成员
-printseeds seeds.txt
#列出从 apk 中删除的代码
-printusage unused.txt
#混淆先后的映射
-printmapping mapping.txt
#####################记录生成的日志数据,gradle build时 在本项目根目录输出-end################
################<span></span>混淆保护本身项目的部分代码以及引用的第三方jar包library#########################
#-libraryjars libs/umeng-analytics-v5.
2.4
.jar
#-libraryjars libs/alipaysd<span></span>k.jar
#<span></span>-libraryjars libs/alipaysecsdk.jar
#-libraryjars libs/alipayutdid.jar
#-libraryjars libs/wup-
1.0
.
0
-SNAPSHOT.jar
#-libraryjars libs/weibosdkcore.jar
#三星应用市场须要添加:sdk-v1.
0.0
.jar,look-v1.
0.1
.jar
#-libraryjars libs/sdk-v1.
0.0
.jar
#-libraryjars libs/look-v1.
0.1
.jar
#我是以libaray的形式引用了一个图片加载框架,若是不想混淆 keep 掉
-keep
class
com.nostra13.universalimageloader.** { *; }
#友盟
-keep
class
com.umeng.**{*;}
#支付宝
-keep
class
com.alipay.android.app.IAliPay{*;}
-keep
class
com.alipay.android.app.IAlixPay{*;}
-keep
class
com.alipay.android.app.IRemoteServiceCallback{*;}
-keep
class
com.alipay.android.app.lib.ResourceMap{*;}
#信鸽推送
-keep
class
com.tencent.android.tpush.** {* ;}
-keep
class
com.tencent.mid.** {* ;}
#本身项目特殊处理代码
#忽略警告
-dontwarn com.veidy.mobile.common.**
#保留一个完整的包
-keep
class
com.veidy.mobile.common.** {
*;
}
-keep
class
com.veidy.activity.login.WebLoginActivity{*;}
-keep
class
com.veidy.activity.UserInfoFragment{*;}
-keep
class
com.veidy.activity.HomeFragmentActivity{*;}
-keep
class
com.veidy.activity.CityActivity{*;}
-keep
class
com.veidy.activity.ClinikActivity{*;}
#若是引用了v4或者v7包
-dontwarn android.support.**
############<span></span>混淆保护本身项目的部分代码以及引用的第三方jar包library-end##################
-keep
public
class
*
extends
android.view.View {
public
<init>(android.content.Context);
public
<init>(android.content.Context, android.util.AttributeSet);
public
<init>(android.content.Context, android.util.AttributeSet,
int
);
public
void
set*(...);
}
#保持 native 方法不被混淆
-keepclasseswithmembernames
class
* {
native <methods>;
}
#保持自定义控件类不被混淆
-keepclasseswithmembers
class
* {
public
<init>(android.content.Context, android.util.AttributeSet);
}
#保持自定义控件类不被混淆
-keepclasseswithmembers
class
* {
public
<init>(android.content.Context, android.util.AttributeSet,
int
);
}
#保持自定义控件类不被混淆
-keepclassmembers
class
*
extends
android.app.Activity {
public
void
*(android.view.View);
}
#保持 Parcelable 不被混淆
-keep
class
*
implements
android.os.Parcelable {
public
static
final android.os.Parcelable$Creator *;
}
#保持 Serializable 不被混淆
-keepnames
class
*
implements
java.io.Serializable
#保持 Serializable 不被混淆而且enum 类也不被混淆
-keepclassmembers
class
*
implements
java.io.Serializable {
static
final
long
serialVersionUID;
private
static
final java.io.ObjectStreamField[] serialPersistentFields;
!
static
!transient <fields>;
!
private
<fields><span></span>;
!
private
<methods>;
private
void
writeObject(java.io.ObjectOutputStream);
private
void
readObject(java.io.ObjectInputStream);
java.lang.Object writeReplace();
java.lang.Object readResolve();
}
#保持枚举 enum 类不被混淆 若是混淆报错,建议直接使用上面的 -keepclassmembers
class
*
implements
java.io.Serializable便可
#-keepclassmembers enum * {
#
public
static
**[] values();
#
public
static
** valueOf(java.lang.String);
#}
-keepclassmembers
class
* {
public
void
*ButtonClicked(android.view.View);
}
#不混淆资源类
-keepclassmembers
class
**.R$* {
public
static
<fields>;
}
#避免混淆泛型 若是混淆报错建议关掉
#–keepattributes Signature
#移除log 测试了下没有用仍是建议本身定义一个开关控制是否输出日志
#-assumenosideeffects
class
android.util.Log {
#
public
static
boolean
isLoggable(java.lang.String,
int
);
#
public
static
int
v(...);
#
public
static
int
i(...);
#
public
static
int
w(...);
#
public
static
int
d(...);
#
public
static
int
e(...);
#}
|
另外加上一段,若是用用到Gson解析包的,直接添加下面这几行就能成功混淆,否则会报错。算法
1
2
3
4
5
6
7
|
#gson
#-libraryjars libs/gson-2.2.2.jar
-keepattributes Signature
# Gson specific classes
-keep class sun.misc.Unsafe { *; }
# Application classes that will be serialized/deserialized over Gson
-keep class com.google.gson.examples.android.model.** { *; }
|
了解一下打包过程。shell
而后你们看看打包的配置文件build.gradle里面的一段配置代码app
一切就绪后,就是打包了。框架