Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> Android 混淆代碼詳解及實例

Android 混淆代碼詳解及實例

編輯:關於android開發

Android 混淆代碼詳解及實例


   Android 混淆代碼詳解及實例

        為了防止自己的勞動成果被別人竊取,混淆代碼能有效防止被反編譯,下面來總結以下混淆代碼的步驟:

  1. 大家也許都注意到新建一個工程會看到項目下邊有這樣proguard-project.txt一個文件,這個對混淆代碼很重要,如果你不小心刪掉了,沒關系,從其他地方拷貝一個過來

  2. 最重要的就是在proguard-project.txt添加混淆的申明了:

  a. 把所有你的jar包都申明進來,例如:

  -libraryjars libs/apns_1.0.6.jar

  -libraryjars libs/armeabi/libBaiduMapSDK_v2_3_1.so

  -libraryjars libs/armeabi/liblocSDK4.so

  -libraryjars libs/baidumapapi_v2_3_1.jar

  -libraryjars libs/core.jar

  -libraryjars libs/gesture-imageview.jar

  -libraryjars libs/gson-2.0.jar

  -libraryjars libs/infogracesound.jar

  -libraryjars libs/locSDK_4.0.jar

  -libraryjars libs/ormlite-android-4.48.jar

  -libraryjars libs/ormlite-core-4.48.jar

  -libraryjars libs/universal-image-loader-1.9.0.jar

  b. 將你不需要混淆的部分申明進來,因為有些類經過混淆會導致程序編譯不通過,如下:

  -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 * extends android.support.v4.**

  -keep public class com.android.vending.licensing.ILicensingService

  --以上都是API裡邊的類,最好都要避免混淆

  有些很特殊的,例如百度地圖,你需要添加以下申明:

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

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

  根據我的經驗,一般model最好避免混淆(model無關緊要,不混淆也沒多大關系)如:

  -keep class com.bank.pingan.model.** { *; }

  下面在貼上關於Umeng分享統計的避免混淆的申明

  -dontwarn android.support.v4.**

  -dontwarn org.apache.commons.net.**

  -dontwarn com.tencent.**

  -keepclasseswithmembernames class * {

  native ;

  }

  -keepclasseswithmembernames class * {

  public (android.content.Context, android.util.AttributeSet);

  }

  -keepclasseswithmembernames class * {

  public (android.content.Context, android.util.AttributeSet, int);

  }

  -keepclassmembers enum * {

  public static **[] values();

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

  }

  -keep class * implements android.os.Parcelable {

  public static final android.os.Parcelable$Creator *;

  }

  -keepclasseswithmembers class * {

  public (android.content.Context);

  }

  -dontshrink

  -dontoptimize

  -dontwarn com.google.android.maps.**

  -dontwarn android.webkit.WebView

  -dontwarn com.umeng.**

  -dontwarn com.tencent.weibo.sdk.**

  -dontwarn com.facebook.**

  -keep enum com.facebook.**

  -keepattributes Exceptions,InnerClasses,Signature

  -keepattributes *Annotation*

  -keepattributes SourceFile,LineNumberTable

  -keep public interface com.facebook.**

  -keep public interface com.tencent.**

  -keep public interface com.umeng.socialize.**

  -keep public interface com.umeng.socialize.sensor.**

  -keep public interface com.umeng.scrshot.**

  -keep public class com.umeng.socialize.* {*;}

  -keep public class javax.**

  -keep public class android.webkit.**

  -keep class com.facebook.**

  -keep class com.umeng.scrshot.**

  -keep public class com.tencent.** {*;}

  -keep class com.umeng.socialize.sensor.**

  -keep class com.tencent.mm.sdk.openapi.WXMediaMessage {*;}

  -keep class com.tencent.mm.sdk.openapi.** implements com.tencent.mm.sdk.openapi.WXMediaMessage$IMediaObject {*;}

  -keep class im.yixin.sdk.api.YXMessage {*;}

  -keep class im.yixin.sdk.api.** implements im.yixin.sdk.api.YXMessage$YXMessageData{*;}

  -keep public class [your_pkg].R$*{

  public static final int *;

  }

  3.以上工作完成,混淆工作就完成了一大半了,最後需要做的就是在project.properties文件中加上你的混淆文件申明了,如下:

  proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt

  4. OK, 最後一步,打簽名包測試,如果有問題,仔細看下Log也許有得類不能混淆,那麼你得加入到proguard-project.txt文件中

  -------以上就是混淆代碼的全過程了

  最後貼上proguard-project.txt的全部代碼:

  ?

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

# To enable ProGuard in your project, edit project.properties

# to define the proguard.config property as described in that file.

#

# Add project specific ProGuard rules here.

# By default, the flags in this file are appended to flags specified

# in ${sdk.dir}/tools/proguard/proguard-android.txt

# You can edit the include path and order by changing the ProGuard

# include property in project.properties.

#

# For more details, see

# http://developer.android.com/guide/developing/tools/proguard.html

 

# Add any project specific keep options here:

 

# If your project uses WebView with JS, uncomment the following

# and specify the fully qualified class name to the JavaScript interface

# class:

#-keepclassmembers class fqcn.of.javascript.interface.for.webview {

# public *;

#}

-optimizationpasses 5

-dontusemixedcaseclassnames

-dontskipnonpubliclibraryclasses

-dontpreverify

-verbose

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

 

-keepattributes *Annotation*

-keepattributes Signature

 

-libraryjars libs/apns_1.0.6.jar

-libraryjars libs/armeabi/libBaiduMapSDK_v2_3_1.so

-libraryjars libs/armeabi/liblocSDK4.so

-libraryjars libs/baidumapapi_v2_3_1.jar

-libraryjars libs/core.jar

-libraryjars libs/gesture-imageview.jar

-libraryjars libs/gson-2.0.jar

-libraryjars libs/infogracesound.jar

-libraryjars libs/locSDK_4.0.jar

-libraryjars libs/ormlite-android-4.48.jar

-libraryjars libs/ormlite-core-4.48.jar

-libraryjars libs/universal-image-loader-1.9.0.jar

 

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

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

 

-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 * extends android.support.v4.**

-keep public class com.android.vending.licensing.ILicensingService

 

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

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

-keep class com.uuhelper.Application.** { *; }

-keep class net.sourceforge.zbar.** { *; }

-keep class com.google.android.gms.** { *; }

 

-keep class com.bank.pingan.model.** { *; }

 

-keep public class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper

-keep public class * extends com.j256.ormlite.android.apptools.OpenHelperManager

 

-keep class com.android.vending.licensing.ILicensingService

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

-keep class org.apache.commons.net.** { *; }

-keep class com.tencent.** { *; }

 

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

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

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

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

 

-keep class com.j256.ormlite.** { *; }

-keep class com.j256.ormlite.android.** { *; }

-keep class com.j256.ormlite.field.** { *; }

-keep class com.j256.ormlite.stmt.** { *; }

 

-dontwarn android.support.v4.**

-dontwarn org.apache.commons.net.**

-dontwarn com.tencent.**

 

-keepclasseswithmembernames class * {

native <methods>;

}

 

-keepclasseswithmembernames class * {

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

}

 

-keepclasseswithmembernames class * {

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

}

 

-keepclassmembers enum * {

public static **[] values();

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

}

 

-keep class * implements android.os.Parcelable {

public static final android.os.Parcelable$Creator *;

}

 

-keepclasseswithmembers class * {

public <init>(android.content.Context);

}

 

-dontshrink

-dontoptimize

-dontwarn com.google.android.maps.**

-dontwarn android.webkit.WebView

-dontwarn com.umeng.**

-dontwarn com.tencent.weibo.sdk.**

-dontwarn com.facebook.**

 

-keep enum com.facebook.**

-keepattributes Exceptions,InnerClasses,Signature

-keepattributes *Annotation*

-keepattributes SourceFile,LineNumberTable

 

-keep public interface com.facebook.**

-keep public interface com.tencent.**

-keep public interface com.umeng.socialize.**

-keep public interface com.umeng.socialize.sensor.**

-keep public interface com.umeng.scrshot.**

 

-keep public class com.umeng.socialize.* {*;}

-keep public class javax.**

-keep public class android.webkit.**

 

-keep class com.facebook.**

-keep class com.umeng.scrshot.**

-keep public class com.tencent.** {*;}

-keep class com.umeng.socialize.sensor.**

 

-keep class com.tencent.mm.sdk.openapi.WXMediaMessage {*;}

 

-keep class com.tencent.mm.sdk.openapi.** implements com.tencent.mm.sdk.openapi.WXMediaMessage$IMediaObject {*;}

 

-keep class im.yixin.sdk.api.YXMessage {*;}

-keep class im.yixin.sdk.api.** implements im.yixin.sdk.api.YXMessage$YXMessageData{*;}

 

-keep public class [your_pkg].R$*{

public static final int *;

}

  2015-05-25更新

  1. 依賴工程的jar 申明:

  以下是郵件發送的實例

  -libraryjars ../KlowerBase/libs/mail-activation.jar

  -libraryjars ../KlowerBase/libs/mail-additionnal.jar

  -libraryjars ../KlowerBase/libs/mail.jar

  2. 解決郵件發送時報的以異常

  ?

1

2

3

4

5

-keep class javax.mail.**{*;}

-keep class com.sun.mail.**{*;}

-keep class javax.activation.**{*;}

-keep class org.apache.harmony.**{*;}

-keep class java.security.**{*;} <br>

  ?

1

2

3

4

5

#解決:can't find referenced class java.beans.Beans

-dontwarn org.apache.commons.collections.BeanMap

-dontwarn java.beans.**

#解決:can't find referenced class javax.security.sasl.Sasl

-dontwarn com.sun.mail.imap.protocol.**

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved