這篇文章等是跟你們分享一在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
一切就緒後,就是打包了。框架