Android中的代碼混淆

混淆規(guī)則

因?yàn)锳ndroid是使用Java開(kāi)發(fā)的,所以開(kāi)發(fā)者可以使用ProGuard對(duì)代碼進(jìn)行混淆。SDK已經(jīng)集成了ProGuard工具,開(kāi)發(fā)者可以從SDK目錄下的\tools\proguard目錄中進(jìn)行查看。

    ProGuard是一個(gè)免費(fèi)的**Java****類(lèi)文件收縮,優(yōu)化,混淆和預(yù)校驗(yàn)器。它可以檢測(cè)并刪除未使用的類(lèi),字段,方法和屬性。它可以優(yōu)化字節(jié)碼,并刪除未使用的指令。它可以將類(lèi)、字段和方法使用短無(wú)意義的名稱(chēng)進(jìn)行重命名**。最后,預(yù)校驗(yàn)的Java6或針對(duì)Java MicroEdition的所述處理后的碼。

下面就和大家分享一下對(duì)使用了第三方庫(kù)的項(xiàng)目進(jìn)行混淆的經(jīng)驗(yàn)。

ProGuard默認(rèn)會(huì)對(duì)第三方庫(kù)也進(jìn)行混淆的,而第三方庫(kù)有的已經(jīng)混淆過(guò)了,有的使用了Java反射技術(shù),所以我們?cè)谶M(jìn)行代碼混淆的時(shí)候要排除這些第三方庫(kù)。排除對(duì)第三方庫(kù)的混淆需要在混淆規(guī)則文件(通常是:proguard-project.txt或proguard.cfg或proguard-rules.pro或proguard-rules.txt也可以是其它的文件名只要在配置文件中將含有混淆規(guī)則的文件名配置進(jìn)去就行了)中添加如下規(guī)則:

1.如果使用了Gson之類(lèi)的工具要使JavaBean類(lèi)即實(shí)體類(lèi)不被混淆。

2.如果使用了自定義控件那么要保證它們不參與混淆。

3.如果使用了枚舉要保證枚舉不被混淆。

4.對(duì)第三方庫(kù)中的類(lèi)不進(jìn)行混淆

a.混淆時(shí)保護(hù)引用的第三方j(luò)ar包

如:-libraryjars libs/baidumapapi_v3_2_0.jar #保護(hù)引用的第三方j(luò)ar包不被混淆

注意:在使用Eclipse+ADT時(shí)需要加入-libraryjars libs/...,如果你是使用Android Studio開(kāi)發(fā)的項(xiàng)目則不需要加入libs包中的jar包,這是因?yàn)椋ㄟ^(guò)Android Studio進(jìn)行混淆代碼時(shí),默認(rèn)已經(jīng)將 lib目錄中的 jar 都已經(jīng)添加到打包腳本中,所以不需要再次手動(dòng)添加,否則會(huì)出現(xiàn)“ java.io.IOException: The same input jar is specified twice” 錯(cuò)誤。

b.混淆時(shí)保護(hù)第三方j(luò)ar包中的類(lèi)不被混淆

如:-keep class com.baidu.** { ; } #讓ProGuard不要警告找不到com.baidu.*這個(gè)包里面的類(lèi)的相關(guān)引用

-dontwarn com.baidu.** #保持com.baidu.**這個(gè)包里面的所有類(lèi)和所有方法不被混淆。

附:小編開(kāi)發(fā)中用到的一些混淆規(guī)則,大家可以根據(jù)需要復(fù)制到自己的項(xiàng)目中的混淆規(guī)則的文件中即可。

[plain] view plain copy [圖片上傳失敗...(image-96b93b-1530078982655)] [圖片上傳失敗...(image-e32e22-1530078982651)]

  1. ################common###############

  2. -keep class com.jph.android.entity.** { *; } #實(shí)體類(lèi)不參與混淆

  3. -keep class com.jph.android.view.** { *; } #自定義控件不參與混淆

  4. ################baidu map###############

  5. -libraryjars libs/baidumapapi_v3_2_0.jar

  6. -libraryjars libs/locSDK_5.0.jar

  7. -keep class com.baidu.** { *; }

  8. -keep class vi.com.gdi.bgl.android.*{;}

  9. -dontwarn com.baidu.**

  10. ################afinal##################

  11. -libraryjars libs/afinal_0.5_bin.jar

  12. -keep class net.tsz.afinal.** { *; }

  13. -keep public class * extends net.tsz.afinal.**

  14. -keep public interface net.tsz.afinal.** {*;}

  15. -dontwarn net.tsz.afinal.**

  16. ################xutils##################

  17. -libraryjars libs/xUtils-2.6.14.jar

  18. -keep class com.lidroid.xutils.** { *; }

  19. -keep public class * extends com.lidroid.xutils.**

  20. -keepattributes Signature

  21. -keepattributes Annotation

  22. -keep public interface com.lidroid.xutils.** {*;}

  23. -dontwarn com.lidroid.xutils.**

  24. -keepclasseswithmembers class com.jph.android.entity.** {

  25. <fields>;

  26. <methods>;

  27. }

  28. ################支付寶##################

  29. -libraryjars libs/alipaysecsdk.jar

  30. -libraryjars libs/alipayutdid.jar

  31. -libraryjars libs/alipaysdk.jar

  32. -keep class com.alipay.android.app.IAliPay{*;}

  33. -keep class com.alipay.android.app.IAlixPay{*;}

  34. -keep class com.alipay.android.app.IRemoteServiceCallback{*;}

  35. -keep class com.alipay.android.app.lib.ResourceMap{*;}

  36. ################gson##################

  37. -libraryjars libs/gson-2.2.4.jar

  38. -keep class com.google.gson.** {*;}

  39. -keep class com.google.*{;}

  40. -keep class sun.misc.Unsafe { *; }

  41. -keep class com.google.gson.stream.** { *; }

  42. -keep class com.google.gson.examples.android.model.** { *; }

  43. -keep class com.google.** {

  44. <fields>;

  45. <methods>;

  46. }

  47. -keepclassmembers class * implements java.io.Serializable {

  48. static final long serialVersionUID;

  49. private static final java.io.ObjectStreamField[] serialPersistentFields;

  50. private void writeObject(java.io.ObjectOutputStream);

  51. private void readObject(java.io.ObjectInputStream);

  52. java.lang.Object writeReplace();

  53. java.lang.Object readResolve();

  54. }

  55. -dontwarn com.google.gson.**

  56. ################httpmime/httpcore##########

  57. -libraryjars libs/httpcore-4.3.2.jar

  58. -libraryjars libs/httpmime-4.3.5.jar

  59. -keep class org.apache.http.** {*;}

  60. -dontwarn org.apache.http.**

  61. ####################jpush##################

  62. -libraryjars libs/jpush-sdk-release1.7.1.jar

  63. -keep class cn.jpush.** { *; }

  64. -keep public class com.umeng.fb.ui.ThreadView { } #雙向反饋功能代碼不混淆

  65. -dontwarn cn.jpush.**

  66. -keepclassmembers class * {

  67. public <init>(org.json.JSONObject);

  68. }

  69. 不混淆R類(lèi)

  70. -keep public class com.jph.android.R$*{

  71. public static final int *;

  72. }

  73. -keepclassmembers enum * {

  74. public static **[] values();

  75. public static ** valueOf(java.lang.String);

  76. }

  77. ####################umeng##################

  78. -libraryjars libs/umeng-analytics-v5.2.4.jar

  79. -keep class com.umeng.analytics.** {*;}

  80. -dontwarn com.umeng.analytics.**

  81. -keep public class * extends com.umeng.**

  82. -keep public class * extends com.umeng.analytics.**

  83. -keep public class * extends com.umeng.common.**

  84. -keep public class * extends com.umeng.newxp.**

  85. -keep class com.umeng.** { *; }

  86. -keep class com.umeng.analytics.** { *; }

  87. -keep class com.umeng.common.** { *; }

  88. -keep class com.umeng.newxp.** { *; }

  89. -keepclassmembers class * {

  90. public <init>(org.json.JSONObject);

  91. }

  92. -keep class com.umeng.**

  93. -keep public class com.idea.fifaalarmclock.app.R$*{

  94. public static final int *;

  95. }

  96. -keep public class com.umeng.fb.ui.ThreadView {

  97. }

  98. -dontwarn com.umeng.**

  99. -dontwarn org.apache.commons.**

  100. -keep public class * extends com.umeng.**

  101. -keep class com.umeng.** {*; }

  102. ####################universal-image-loader########

  103. -libraryjars libs/universal-image-loader-1.9.3.jar

  104. -keep class com.nostra13.universalimageloader.** {*;}

  105. -dontwarn com.nostra13.universalimageloader.**

  106. ####################zxing#####################

  107. -libraryjars libs/zxing.jar

  108. -libraryjars libs/zxing_apply.jar

  109. -keep class com.google.zxing.** {*;}

  110. -dontwarn com.google.zxing.**

  111. ####################BASE64Decoder##################

  112. -libraryjars libs/sun.misc.BASE64Decoder.jar

  113. ####################support.v4#####################

  114. -libraryjars libs/android-support-v4.jar

  115. -keep class android.support.v4.** { *; }

  116. -dontwarn android.support.v4.**

  117. ###################other####################

  118. slidingmenu 的混淆

  119. -dontwarn com.jeremyfeinstein.slidingmenu.lib.**

  120. -keep class com.jeremyfeinstein.slidingmenu.lib.** { *; }

  121. ActionBarSherlock混淆

  122. -dontwarn com.actionbarsherlock.**

  123. -keep class com.actionbarsherlock.** { *; }

  124. -keep interface com.actionbarsherlock.** { *; }

  125. -keep class * extends java.lang.annotation.Annotation { *; }

  126. -keepclasseswithmembernames class * {

  127. native <methods>;

  128. }

  129. -keep class com.jph.android.entity.** {

  130. <fields>;

  131. <methods>;

  132. }

  133. -dontwarn android.support.**

  134. -dontwarn com.slidingmenu.lib.app.SlidingMapActivity

  135. -keep class android.support.** { *; }

  136. -keep class com.actionbarsherlock.** { *; }

  137. -keep interface com.actionbarsherlock.** { *; }

  138. -keep class com.slidingmenu.** { *; }

  139. -keep interface com.slidingmenu.** { *; }

推薦閱讀:《Android****開(kāi)發(fā)之反編譯與防止反編譯

Android****代碼混淆指南

proguard.cfg配置文件

?

|

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

|

#``指定代碼的壓縮級(jí)別

-optimizationpasses 5

#``包明不混合大小寫(xiě)

-dontusemixedcaseclassnames

#``不去忽略非公共的庫(kù)類(lèi)

-dontskipnonpubliclibraryclasses

#``優(yōu)化 不優(yōu)化輸入的類(lèi)文件

-dontoptimize

#``預(yù)校驗(yàn)

-dontpreverify

#``混淆時(shí)是否記錄日志

-verbose

# 混淆時(shí)所采用的算法

-optimizations !code/simplification/arithmetic,!field/*,!**class**/merging/*

#``保護(hù)注解

-keepattributes *Annotation*

# 保持哪些類(lèi)不被混淆

-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

#####################``記錄生成的日志數(shù)據(jù),gradle build時(shí)在本項(xiàng)目根目錄輸出################

#apk 包內(nèi)所有 **class**``的內(nèi)部結(jié)構(gòu)

-dumpclass_files.txt

#``未混淆的類(lèi)和成員

-printseeds seeds.txt

#``列出從 apk 中刪除的代碼

-printusage unused.txt

#``混淆前后的映射

-printmapping mapping.txt

#####################``記錄生成的日志數(shù)據(jù),gradle build時(shí) 在本項(xiàng)目根目錄輸出-end################

################<span></span>``混淆保護(hù)自己項(xiàng)目的部分代碼以及引用的第三方j(luò)ar包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

#``三星應(yīng)用市場(chǎng)需要添加: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的形式引用了一個(gè)圖片加載框架,如果不想混淆 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.** {* ;}

#``自己項(xiàng)目特殊處理代碼

#``忽略警告

-dontwarn com.veidy.mobile.common.**

#``保留一個(gè)完整的包

-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>``混淆保護(hù)自己項(xiàng)目的部分代碼以及引用的第三方j(luò)ar包library-end##################

-keep **publicclass**``* **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**``voidset*(...);

}

#``保持 native 方法不被混淆

-keepclasseswithmembernames **class**``* {

native <methods>;

}

#``保持自定義控件類(lèi)不被混淆

-keepclasseswithmembers **class**``* {

**public**``<init>(android.content.Context, android.util.AttributeSet);

}

#``保持自定義控件類(lèi)不被混淆

-keepclasseswithmembers **class**``* {

**public**``<init>(android.content.Context, android.util.AttributeSet, int);

}

#``保持自定義控件類(lèi)不被混淆

-keepclassmembers **class**``* **extends**``android.app.Activity {

**public**``void*(android.view.View);

}

#``保持 Parcelable 不被混淆

-keep **class**``* **implements**``android.os.Parcelable {

**publicstatic**``final android.os.Parcelable$Creator *;

}

#``保持 Serializable 不被混淆

-keepnames **class**``* **implements**``java.io.Serializable

#``保持 Serializable 不被混淆并且enum 類(lèi)也不被混淆

-keepclassmembers **class**``* **implements**``java.io.Serializable {

**static**``final longserialVersionUID;

**privatestatic**``final java.io.ObjectStreamField[] serialPersistentFields;

!**static**!transient <fields>;

!**private**<fields><span></span>;

!**private**<methods>;

**private**``voidwriteObject(java.io.ObjectOutputStream);

**private**``voidreadObject(java.io.ObjectInputStream);

java.lang.Object writeReplace();

java.lang.Object readResolve();

}

#``保持枚舉 enum 類(lèi)不被混淆 如果混淆報(bào)錯(cuò),建議直接使用上面的 -keepclassmembers**class*** **implements**``java.io.Serializable``即可

#-keepclassmembers enum * {

# **publicstatic**``**[] values();

# **publicstatic**``** valueOf(java.lang.String);

#}

-keepclassmembers **class**``* {

**public**``void*ButtonClicked(android.view.View);

}

#``不混淆資源類(lèi)

-keepclassmembers **class**``**.R$* {

**publicstatic**``<fields>;

}

#``避免混淆泛型 如果混淆報(bào)錯(cuò)建議關(guān)掉

#–keepattributes Signature

#``移除log 測(cè)試了下沒(méi)有用還是建議自己定義一個(gè)開(kāi)關(guān)控制是否輸出日志

#-assumenosideeffects **class**``android.util.Log {

# **publicstatic**``booleanisLoggable(java.lang.String, int);

# **publicstatic**``intv(...);

# **publicstatic**``inti(...);

# **publicstatic**``intw(...);

# **publicstatic**``intd(...);

# **publicstatic**``inte(...);

#}

|

另外加上一段,如果用用到Gson解析包的,直接添加下面這幾行就能成功混淆,不然會(huì)報(bào)錯(cuò)。

?

|

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.** { *; }

|

如果你使用了webview

?

|

1

2

3

4

5

6

7

8

9

10

|

# webview + js

-keepattributes *JavascriptInterface*

# keep 使用 webview 的類(lèi)

-keepclassmembers **class** com.veidy.activity.WebViewActivity {

**public**``*;

}

# keep 使用 webview 的類(lèi)的所有的內(nèi)部類(lèi)

-keepclassmembers **class** com.veidy.activity.WebViewActivity$*{

*;

}

|

混淆后生成apk文件比混淆前生成的apk文件要小不少

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,406評(píng)論 6 538
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,034評(píng)論 3 423
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 177,413評(píng)論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 63,449評(píng)論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,165評(píng)論 6 410
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 55,559評(píng)論 1 325
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,606評(píng)論 3 444
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 42,781評(píng)論 0 289
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,327評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,084評(píng)論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,278評(píng)論 1 371
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,849評(píng)論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,495評(píng)論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 34,927評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 36,172評(píng)論 1 291
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,010評(píng)論 3 396
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,241評(píng)論 2 375

推薦閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)載自: http://blog.csdn.net/u012188405/article/details/5198...
    fjxmyzy閱讀 1,727評(píng)論 1 5
  • 在離職之際,也沒(méi)有啥事可以做,就自己搗騰下代碼混淆,言歸正傳。 為了防止自己的勞動(dòng)成果被別人竊取,混淆代碼能有效防...
    Orz013閱讀 1,037評(píng)論 0 0
  • 1.首先需要在app下的build.gradle下配置,true表示編譯時(shí)會(huì)混淆代碼\ 2.在proguard-r...
    Thomas_yy閱讀 6,685評(píng)論 0 6
  • 親愛(ài)的們,如若有緣,我們一定會(huì)再見(jiàn),后會(huì)也必定會(huì)有期;再聚首,同舉杯,共訴衷腸;等風(fēng)來(lái),等你歸,待到山花爛漫時(shí),我...
    魯西西sunflower閱讀 2,171評(píng)論 26 4
  • 我們每個(gè)人時(shí)刻都在不斷的修行,每個(gè)人做事的方式和方法不同,最后導(dǎo)致的結(jié)果也就不同。 我們的幸福不是因?yàn)槿?duì)了誰(shuí)或者...
    猴爸陪你讀書(shū)閱讀 1,219評(píng)論 0 3