在Android Studio中进行代码混淆
生活随笔
收集整理的這篇文章主要介紹了
在Android Studio中进行代码混淆
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
此文章來(lái)源于http://blog.csdn.net/wenwen091100304/article/details/52802247點(diǎn)擊打開(kāi)鏈接
在Android?APP開(kāi)發(fā)完成后,為了防止APP被盜版、以及其他安全因素,大多數(shù)APP都會(huì)被要求做混淆編譯,因此作為一項(xiàng)必要技能,就必須得掌握了,下面簡(jiǎn)單記錄一下真?zhèn)€實(shí)踐過(guò)程。?
- 編輯混淆規(guī)則文件?
?
如圖所示,可以從Android Studio的工程目錄上看出對(duì)應(yīng)每個(gè)模塊的混淆規(guī)則文件,每個(gè)模塊使用不同的混淆規(guī)則,根據(jù)實(shí)際情況,進(jìn)行相關(guān)的編輯。?
這里舉個(gè)Volley的混淆規(guī)則文件看看:
- 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
- 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
- 混淆規(guī)則文件規(guī)則說(shuō)明?
(1)基本命令
- 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
- 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
(2)混淆代碼中要保留的的部分
# 保留所有的本地native方法不被混淆 -keepclasseswithmembernames class * {native <methods>; }# 保留了繼承自Activity、Application這些類(lèi)的子類(lèi) # 因?yàn)檫@些子類(lèi)有可能被外部調(diào)用 # 比如第一行就保證了所有Activity的子類(lèi)不要被混淆 -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 * extends android.view.View -keep public class com.android.vending.licensing.ILicensingService# 如果有引用android-support-v4.jar包,可以添加下面這行 -keep public class com.null.test.ui.fragment.** {*;}# 保留Activity中的方法參數(shù)是view的方法, # 從而我們?cè)趌ayout里面編寫(xiě)onClick就不會(huì)影響 -keepclassmembers class * extends android.app.Activity {public void * (android.view.View); }# 枚舉類(lèi)不能被混淆 -keepclassmembers enum * {public static **[] values();public static ** valueOf(java.lang.String); }# 保留自定義控件(繼承自View)不能被混淆 -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*(***);*** get* (); }# 保留Parcelable序列化的類(lèi)不能被混淆 -keep class * implements android.os.Parcelable{public static final android.os.Parcelable$Creator *; }# 保留Serializable 序列化的類(lèi)不被混淆 -keepclassmembers class * implements java.io.Serializable {static final long serialVersionUID;private static final java.io.ObjectStreamField[] serialPersistentFields;!static !transient <fields>;private void writeObject(java.io.ObjectOutputStream);private void readObject(java.io.ObjectInputStream);java.lang.Object writeReplace();java.lang.Object readResolve(); }# 對(duì)R文件下的所有類(lèi)及其方法,都不能被混淆 -keepclassmembers class **.R$* {*; }# 對(duì)于帶有回調(diào)函數(shù)onXXEvent的,不能混淆 -keepclassmembers class * {void *(**On*Event); }#保持實(shí)體類(lèi)所在的包 -keep class com.wasu.wasulkl.data.**{*;}#如果項(xiàng)目中用到了WebView的復(fù)雜操作,請(qǐng)加入以下代碼: -keepclassmembers class * extends android.webkit.WebViewClient {public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap);public boolean *(android.webkit.WebView, java.lang.String); } -keepclassmembers class * extends android.webkit.WebViewClient {public void *(android.webkit.WebView, java.lang.String); }#JavaScript接口處理舉例 -keepclassmembers class com.null.test.MainActivity$JSInterfacel {<methods>; } #其他第三方的jar包的解決方案 #這個(gè)要取決第三方j(luò)ar包的混淆策略了。一般在其官方文檔上面都有混淆說(shuō)明。比如支付寶相應(yīng)的混淆規(guī)則就是 -libraryjars ./libs/alipaysdk.jar -dontwarn com.alipay.android.app.** -keep public class com.alipay.** {*;}- 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
- 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
- 打開(kāi)混淆編譯開(kāi)關(guān)?
接下來(lái)要做的就是打開(kāi)混淆開(kāi)關(guān),這個(gè)很簡(jiǎn)單,在build.gradle文件中,代碼如下,:?
總結(jié)
以上是生活随笔為你收集整理的在Android Studio中进行代码混淆的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Android中selector的使用
- 下一篇: Android Studio中Butte