android混淆与反射

android混淆与反射:Android包4.0以后混淆更加简单

一、配置

1、在project.properties.txt将以下内容注释去掉

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

2、在proguard-project中加入取消混淆的声明:

需要混淆的jar包所依赖的jar包

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
-libraryjars 'F:\eclipse\adt-bundle-windows-x86-20130917\sdk\platforms\android-19\android.jar'
-optimizationpasses 5
# 混淆时不会产生形形色色的类名
-dontusemixedcaseclassnames
# 指定不去忽略非公共的库类
-dontskipnonpubliclibraryclasses
# 不预校验
-dontpreverify
-verbose
# 优化
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
# 保留了继承自Activity、Application、Service、BroadcastReceiver、ContentProvider、BackupAgentHelper、Preference和ILicensingService 的子类。因为这些子类,都是可能被外部调用的。
-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
-keep public class * extends android.support.v4.app.FragmentActivity
-keep public class * extends android.support.v4.app.Fragmen
# 保留了含有native方法的类
-keepclasseswithmembernames class * {
native <methods>;
}
# actionbarSherlock 这里要注意了
-keep class android.support.v4.app.** { *; }
-keep interface android.support.v4.app.** { *; }
-keep class com.actionbarsherlock.** { *; }
-keep interface com.actionbarsherlock.** { *; }
-keepattributes *Annotation*
# 保留构造函数从xml构造的类(一般为View的子类)
-keepclasseswithmembernames class * {
public <init>(android.content.Context, android.util.AttributeSet);
}
# 保留构造函数从xml构造的类(一般为View的子类)
-keepclasseswithmembernames class * {
public <init>(android.content.Context, android.util.AttributeSet, int);
}
# 保护指定类的成员,如果此类受到保护他们会保护的更好
-keepclassmembers class * extends android.app.Activity {
public void *(android.view.View);
}
# 保留枚举类型中的values和valueOf静态方法
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
# 保留继承Parcelable的跨进程数据类
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
# 保留反射中用到的类和方法,到时根据具体情况再改
# 反编译测试的时候有效,运行时也与未混淆情况一样
-keepclassmembers class 包名.** {
public *;
protected *;
private *;
}

3、工程中含有第三方jar包,或者.so文件 混淆处理。

-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

4、 其它反射调用的java类与方法

使用反射时一定要注意proguard可能会认为那些方法未被调用过, 会在代码优化过程中将它们改名或除去. 在使用反射的地方一定要在proguard-project.txt中配置, 不优化反射调用过的类和方法

下面开始打包(不打包你就算设置了其实也没有混淆,不信可以解混淆试试,能成功解混淆)

二、在jdk的bin目录下生成.keystore证书,输入相关资料,记住口令。

这里有图,看不到而已,到很久之前的博客可以看到。

三、右键—>Android Tools—>Export signed Application package

这里有图,看不到而已,到很久之前的博客可以看到。

Comments