在Android Studio中进行代码混淆
生活随笔
收集整理的這篇文章主要介紹了
在Android Studio中进行代码混淆
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
此文章來源于http://blog.csdn.net/wenwen091100304/article/details/52802247點擊打開鏈接
在Android?APP開發(fā)完成后,為了防止APP被盜版、以及其他安全因素,大多數(shù)APP都會被要求做混淆編譯,因此作為一項必要技能,就必須得掌握了,下面簡單記錄一下真?zhèn)€實踐過程。?
- 編輯混淆規(guī)則文件?
?
如圖所示,可以從Android Studio的工程目錄上看出對應每個模塊的混淆規(guī)則文件,每個模塊使用不同的混淆規(guī)則,根據(jù)實際情況,進行相關的編輯。?
這里舉個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ī)則說明?
(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這些類的子類 # 因為這些子類有可能被外部調用 # 比如第一行就保證了所有Activity的子類不要被混淆 -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的方法, # 從而我們在layout里面編寫onClick就不會影響 -keepclassmembers class * extends android.app.Activity {public void * (android.view.View); }# 枚舉類不能被混淆 -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序列化的類不能被混淆 -keep class * implements android.os.Parcelable{public static final android.os.Parcelable$Creator *; }# 保留Serializable 序列化的類不被混淆 -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(); }# 對R文件下的所有類及其方法,都不能被混淆 -keepclassmembers class **.R$* {*; }# 對于帶有回調函數(shù)onXXEvent的,不能混淆 -keepclassmembers class * {void *(**On*Event); }#保持實體類所在的包 -keep class com.wasu.wasulkl.data.**{*;}#如果項目中用到了WebView的復雜操作,請加入以下代碼: -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包的解決方案 #這個要取決第三方jar包的混淆策略了。一般在其官方文檔上面都有混淆說明。比如支付寶相應的混淆規(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
- 打開混淆編譯開關?
接下來要做的就是打開混淆開關,這個很簡單,在build.gradle文件中,代碼如下,:?
總結
以上是生活随笔為你收集整理的在Android Studio中进行代码混淆的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android中selector的使用
- 下一篇: Android Studio中Butte