android studio 混淆

這篇文章等是跟你們分享一在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

  //混淆,新版本是ninifyEnabled再也不是runproguard
    minifyEnabled true  
 //加載默認混淆配置文件及自定義混淆 配置
   proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard.cfg'
 
咱們設置minifyEnabled true,就會在打包的時候進行代碼混淆處理. 其中proguard-android.txt不用管,在sdk目錄裏面,咱們主要是配置了proguard.cfg文件。可能你們直接在android studio建立項目不會有這個文件,而是 proguard-rules.pro文件,其實同樣的,我這裏是由於項目是從eclipse遷移過來的,以前在eclipse上混淆是 proguard.cfg文件.

 

一切就緒後,就是打包了。框架

相關文章
相關標籤/搜索