手机
当前位置:查字典教程网 >编程开发 >安卓软件开发 >Android 混淆代码详解及实例
Android 混淆代码详解及实例
摘要:Android混淆代码详解及实例   为了防止自己的劳动成果被别人窃取,混淆代码能有效防止被反编译,下面来总结以下混淆代码的步骤:1.大家也...

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

根据我的经验,一般model最好避免混淆(model无关紧要,不混淆也没多大关系)如:

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

下面在贴上关于Umeng分享统计的避免混淆的申明

-dontwarn android.support.v4.**

-dontwarn .**

-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(ng.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

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

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

 

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

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

-keep class mon.** { *; }

-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 .**

-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(ng.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 *;

}

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

?

1

2

3

4

5

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

-dontwarn mons.collections.BeanMap

-dontwarn java.beans.**

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

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

【Android 混淆代码详解及实例】相关文章:

android 修改代码怎样编译

Android中使用pull解析器操作xml文件的解决办法

Android 初识 Helloworld 详解

安卓客户端获取手机号码代码实例

Android Mms之:对话与联系人关联的总结详解

Android编程设置全屏的方法实例

android 自定义Android菜单背景的代码

Android三种菜单实例分析

Android开发: fragment解析及案例

Android绑定添加了注解的控件,及其事件方法

精品推荐
分类导航