Skip to content

Commit acc077c

Browse files
AriesHoo@126.comAriesHoo@126.com
AriesHoo@126.com
authored and
AriesHoo@126.com
committed
1、初步增加lib混淆规则
1 parent 3355c69 commit acc077c

File tree

7 files changed

+288
-20
lines changed

7 files changed

+288
-20
lines changed

app/build.gradle

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ android {
1111
versionName ext.versionName
1212
multiDexEnabled true
1313
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
14+
buildConfigField "Boolean", "LOG_ENABALE", "true"
1415
buildConfigField "String", "BASE_URL", "\"https://api.douban.com/\""
1516
buildConfigField "String", "BASE__UPDATE_URL", "\"https://raw.githubusercontent.com/AriesHoo/FastLib/dev/apk/\""
1617
manifestPlaceholders = [
@@ -41,15 +42,17 @@ android {
4142
debug {
4243
//是否debug模式用于控制是否打印log等
4344
debuggable true
44-
minifyEnabled false
45+
zipAlignEnabled true //是否支持Zip Align
46+
shrinkResources true //是否清理无用资源
47+
minifyEnabled true //是否启动混淆
4548
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
4649
signingConfig signingConfigs.release
4750
}
4851
release {
49-
debuggable false
52+
debuggable true
5053
zipAlignEnabled true //是否支持Zip Align
51-
// shrinkResources true //是否清理无用资源
52-
minifyEnabled false
54+
shrinkResources true //是否清理无用资源
55+
minifyEnabled true //是否启动混淆
5356
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
5457
signingConfig signingConfigs.release
5558
}

app/proguard-rules.pro

Lines changed: 185 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,188 @@
1515
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
1616
# public *;
1717
#}
18+
19+
-keep class com.aries.library.fast.demo.base.**{*;}
20+
-keep class com.aries.library.fast.demo.entity.**{*;}
21+
##
22+
##-------------------------------------------基本不用动区域----------------------------------------------
23+
##
24+
##
25+
## -----------------------------基本 -----------------------------
26+
##
27+
#
28+
## 指定代码的压缩级别 0 - 7(指定代码进行迭代优化的次数,在Android里面默认是5,这条指令也只有在可以优化时起作用。)
29+
#-optimizationpasses 5
30+
## 混淆时不会产生形形色色的类名(混淆时不使用大小写混合类名)
31+
#-dontusemixedcaseclassnames
32+
## 指定不去忽略非公共的库类(不跳过library中的非public的类)
33+
#-dontskipnonpubliclibraryclasses
34+
## 指定不去忽略包可见的库类的成员
35+
#-dontskipnonpubliclibraryclassmembers
36+
##不进行优化,建议使用此选项,
37+
#-dontoptimize
38+
# # 不进行预校验,Android不需要,可加快混淆速度。
39+
#-dontpreverify
40+
## 屏蔽警告
41+
#-ignorewarnings
42+
## 指定混淆是采用的算法,后面的参数是一个过滤器
43+
## 这个过滤器是谷歌推荐的算法,一般不做更改
44+
#-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
45+
## 保护代码中的Annotation不被混淆
46+
#-keepattributes *Annotation*
47+
## 避免混淆泛型, 这在JSON实体映射时非常重要
48+
#-keepattributes Signature
49+
## 抛出异常时保留代码行号
50+
#-keepattributes SourceFile,LineNumberTable
51+
# #优化时允许访问并修改有修饰符的类和类的成员,这可以提高优化步骤的结果。
52+
## 比如,当内联一个公共的getter方法时,这也可能需要外地公共访问。
53+
## 虽然java二进制规范不需要这个,要不然有的虚拟机处理这些代码会有问题。当有优化和使用-repackageclasses时才适用。
54+
##指示语:不能用这个指令处理库中的代码,因为有的类和类成员没有设计成public ,而在api中可能变成public
55+
#-allowaccessmodification
56+
##当有优化和使用-repackageclasses时才适用。
57+
#-repackageclasses ''
58+
# # 混淆时记录日志(打印混淆的详细信息)
59+
# # 这句话能够使我们的项目混淆后产生映射文件
60+
# # 包含有类名->混淆后类名的映射关系
61+
#-verbose
62+
63+
#
64+
# ----------------------------- 默认保留 -----------------------------
65+
#
66+
#----------------------------------------------------
67+
# 保持哪些类不被混淆
68+
#继承activity,application,service,broadcastReceiver,contentprovider....不进行混淆
69+
#-keep public class * extends android.app.Activity
70+
#-keep public class * extends android.app.Application
71+
#-keep public class * extends android.support.multidex.MultiDexApplication
72+
#-keep public class * extends android.app.Service
73+
#-keep public class * extends android.content.BroadcastReceiver
74+
#-keep public class * extends android.content.ContentProvider
75+
#-keep public class * extends android.app.backup.BackupAgentHelper
76+
#-keep public class * extends android.preference.Preference
77+
#-keep public class * extends android.view.View
78+
#
79+
#-keep public class com.google.vending.licensing.ILicensingService
80+
#-keep public class com.android.vending.licensing.ILicensingService
81+
#表示不混淆上面声明的类,最后这两个类我们基本也用不上,是接入Google原生的一些服务时使用的。
82+
#----------------------------------------------------
83+
84+
#
85+
##表示不混淆任何包含native方法的类的类名以及native方法名,这个和我们刚才验证的结果是一致
86+
#-keepclasseswithmembernames class * {
87+
# native <methods>;
88+
#}
89+
#
90+
#
91+
##这个主要是在layout 中写的onclick方法android:onclick="onClick",不进行混淆
92+
##表示不混淆Activity中参数是View的方法,因为有这样一种用法,在XML中配置android:onClick=”buttonClick”属性,
93+
##当用户点击该按钮时就会调用Activity中的buttonClick(View view)方法,如果这个方法被混淆的话就找不到了
94+
#-keepclassmembers class * extends android.app.Activity{
95+
# public void *(android.view.View);
96+
#}
97+
#
98+
##表示不混淆枚举中的values()和valueOf()方法,枚举我用的非常少,这个就不评论了
99+
#-keepclassmembers enum * {
100+
# public static **[] values();
101+
# public static ** valueOf(java.lang.String);
102+
#}
103+
#
104+
##表示不混淆任何一个View中的setXxx()和getXxx()方法,
105+
##因为属性动画需要有相应的setter和getter的方法实现,混淆了就无法工作了。
106+
#-keep public class * extends android.view.View{
107+
# *** get*();
108+
# void set*(***);
109+
# public <init>(android.content.Context);
110+
# public <init>(android.content.Context, android.util.AttributeSet);
111+
# public <init>(android.content.Context, android.util.AttributeSet, int);
112+
#}
113+
#-keepclasseswithmembers class * {
114+
# public <init>(android.content.Context, android.util.AttributeSet);
115+
# public <init>(android.content.Context, android.util.AttributeSet, int);
116+
#}
117+
#
118+
##表示不混淆Parcelable实现类中的CREATOR字段,
119+
##毫无疑问,CREATOR字段是绝对不能改变的,包括大小写都不能变,不然整个Parcelable工作机制都会失败。
120+
#-keep class * implements android.os.Parcelable {
121+
# public static final android.os.Parcelable$Creator *;
122+
#}
123+
## 这指定了继承Serizalizable的类的如下成员不被移除混淆
124+
#-keepclassmembers class * implements java.io.Serializable {
125+
# static final long serialVersionUID;
126+
# private static final java.io.ObjectStreamField[] serialPersistentFields;
127+
# private void writeObject(java.io.ObjectOutputStream);
128+
# private void readObject(java.io.ObjectInputStream);
129+
# java.lang.Object writeReplace();
130+
# java.lang.Object readResolve();
131+
#}
132+
## 保留R下面的资源
133+
##-keep class **.R$* {
134+
## *;
135+
##}
136+
##不混淆资源类下static的
137+
#-keepclassmembers class **.R$* {
138+
# public static <fields>;
139+
#}
140+
#
141+
## 对于带有回调函数的onXXEvent、**On*Listener的,不能被混淆
142+
#-keepclassmembers class * {
143+
# void *(**On*Event);
144+
# void *(**On*Listener);
145+
#}
146+
#
147+
## 保留我们自定义控件(继承自View)不被混淆
148+
#-keep public class * extends android.view.View{
149+
# *** get*();
150+
# void set*(***);
151+
# public <init>(android.content.Context);
152+
# public <init>(android.content.Context, android.util.AttributeSet);
153+
# public <init>(android.content.Context, android.util.AttributeSet, int);
154+
#}
155+
#
156+
##
157+
##----------------------------- WebView(项目中没有可以忽略) -----------------------------
158+
##
159+
##webView需要进行特殊处理
160+
#-keepclassmembers class fqcn.of.javascript.interface.for.Webview {
161+
# public *;
162+
#}
163+
#-keepclassmembers class * extends android.webkit.WebViewClient {
164+
# public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap);
165+
# public boolean *(android.webkit.WebView, java.lang.String);
166+
#}
167+
#-keepclassmembers class * extends android.webkit.WebViewClient {
168+
# public void *(android.webkit.WebView, jav.lang.String);
169+
#}
170+
#
171+
##
172+
## ----------------------------- 其他的 -----------------------------
173+
##
174+
## 删除代码中Log相关的代码
175+
#-assumenosideeffects class android.util.Log {
176+
# public static boolean isLoggable(java.lang.String, int);
177+
# public static int v(...);
178+
# public static int i(...);
179+
# public static int w(...);
180+
# public static int d(...);
181+
# public static int e(...);
182+
#}
183+
#
184+
## 保持测试相关的代码
185+
#-dontnote junit.framework.**
186+
#-dontnote junit.runner.**
187+
#-dontwarn android.test.**
188+
#-dontwarn android.support.test.**
189+
#-dontwarn org.junit.**
190+
#
191+
#
192+
##
193+
## ----------------------------- 第三方 -----------------------------
194+
##
195+
#-dontwarn com.orhanobut.logger.**
196+
#-keep class com.orhanobut.logger.**{*;}
197+
#-keep interface com.orhanobut.logger.**{*;}
198+
#
199+
#-dontwarn com.google.gson.**
200+
#-keep class com.google.gson.**{*;}
201+
#-keep interface com.google.gson.**{*;}
202+
## 。。。。。。

app/src/main/java/com/aries/library/fast/demo/App.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
import android.text.TextUtils;
1111
import android.util.Log;
1212

13+
import androidx.multidex.MultiDexApplication;
14+
1315
import com.aries.library.fast.FastManager;
1416
import com.aries.library.fast.demo.constant.ApiConstant;
1517
import com.aries.library.fast.demo.constant.SPConstant;
@@ -38,8 +40,6 @@
3840
import java.util.Calendar;
3941
import java.util.List;
4042

41-
import androidx.multidex.MultiDexApplication;
42-
4343
/**
4444
* @Author: AriesHoo on 2018/7/31 10:43
4545
* @E-Mail: AriesHoo@126.com
@@ -57,7 +57,7 @@ public class App extends MultiDexApplication {
5757
public void onCreate() {
5858
super.onCreate();
5959
//初始化Logger日志打印
60-
LoggerManager.init(TAG, BuildConfig.DEBUG,
60+
LoggerManager.init(TAG, BuildConfig.LOG_ENABALE,
6161
PrettyFormatStrategy.newBuilder()
6262
.methodOffset(0)
6363
.showThreadInfo(true)
@@ -66,7 +66,7 @@ public void onCreate() {
6666
LoggerManager.i(TAG, "start:" + start + ";Application:" + FastUtil.getApplication());
6767
mContext = this;
6868
//最简单UI配置模式-必须进行初始化
69-
// FastManager.init(this);
69+
FastManager.init(this);
7070
//以下为更丰富自定义方法
7171
//全局UI配置参数-按需求设置
7272
AppImpl impl = new AppImpl(mContext);

app/src/main/java/com/aries/library/fast/demo/impl/HttpRequestControlImpl.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ public void httpRequestSuccess(IHttpRequestControl httpRequestControl, List<?> l
7575
return;
7676
}
7777
statusLayoutManager.showSuccessLayout();
78-
if (smartRefreshLayout.getState()== RefreshState.Refreshing || page == 0) {
78+
if (smartRefreshLayout.getState() == RefreshState.Refreshing || page == 0) {
7979
adapter.setNewData(new ArrayList());
8080
}
8181
adapter.addData(list);
@@ -92,6 +92,7 @@ public void httpRequestSuccess(IHttpRequestControl httpRequestControl, List<?> l
9292

9393
@Override
9494
public void httpRequestError(IHttpRequestControl httpRequestControl, Throwable e) {
95+
LoggerManager.e(TAG, "httpRequestError:" + e.getMessage());
9596
int reason = R.string.fast_exception_other_error;
9697
// int code = FastError.EXCEPTION_OTHER_ERROR;
9798
if (!NetworkUtil.isConnected(App.getContext())) {

app/src/main/res/values-zh/arrays.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@
122122
<item>https://github.com/trello/RxLifecycle</item>
123123
<item>https://github.com/CymChad/BaseRecyclerViewAdapterHelper</item>
124124
<item>https://github.com/bingoogolapple/BGASwipeBackLayout-Android</item>
125-
<item>https://github.com/AriesHoo/TabLayout</item>
125+
<item>https://github.com/AriesHoo/UIWidget</item>
126126
<item>https://github.com/Bakumon/StatusLayoutManager</item>
127127
<item>https://github.com/AriesHoo/UIWidget</item>
128128
<item>https://github.com/scwang90/SmartRefreshLayout</item>

library/build.gradle

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,8 @@ android {
1414
// vectorDrawables.useSupportLibrary = true
1515
}
1616
buildTypes {
17-
debug {
18-
debuggable true
19-
minifyEnabled false
20-
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
21-
}
2217
release {
23-
debuggable false
24-
minifyEnabled false
25-
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
18+
consumerProguardFiles 'proguard-rules.pro'
2619
}
2720
}
2821
//java 1.8--Interface的虚方法设置默认值default
@@ -65,9 +58,9 @@ dependencies {
6558
//图片加载
6659
compileOnly 'com.github.bumptech.glide:glide:4.8.0'
6760
//常用UI控件(TitleBarView、RadiusView等)
68-
api 'com.github.AriesHoo.UIWidget:widget-core:3.2.20'
61+
api 'com.github.AriesHoo.UIWidget:widget-core:3.2.21'
6962
//快速Tab库
70-
api 'com.github.AriesHoo.UIWidget:tab-layout:3.2.20'
63+
api 'com.github.AriesHoo.UIWidget:tab-layout:3.2.21'
7164
//日志打印
7265
api 'com.orhanobut:logger:2.2.0'
7366
//注解

library/proguard-rules.pro

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,89 @@
1515
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
1616
# public *;
1717
#}
18+
#-keep public class android.app**
19+
#FastLib-START
20+
-keep public class com.aries.library.fast.**
21+
-keepclassmembers public class com.aries.library.fast.**{
22+
*** set*(***);
23+
*** get*();
24+
}
25+
#FastLib-END
26+
#BaseRecyclerViewAdapterHelper-START
27+
-keep class com.chad.library.adapter.** {
28+
*;
29+
}
30+
-keep public class * extends com.chad.library.adapter.base.BaseQuickAdapter
31+
-keep public class * extends com.chad.library.adapter.base.BaseViewHolder
32+
-keepclassmembers class **$** extends com.chad.library.adapter.base.BaseViewHolder {
33+
<init>(...);
34+
}
35+
-keepattributes InnerClasses
36+
#BaseRecyclerViewAdapterHelper-END
37+
#agentweb-START
38+
-keep class com.just.agentweb.** {
39+
*;
40+
}
41+
-dontwarn com.just.agentweb.**
42+
#agentweb-END
43+
#Glide-START
44+
-keep public class * implements com.bumptech.glide.module.GlideModule
45+
-keep public class * extends com.bumptech.glide.module.AppGlideModule
46+
-keep public enum com.bumptech.glide.load.ImageHeaderParser$** {
47+
**[] $VALUES;
48+
public *;
49+
}
50+
#Glide-END
51+
#AndroidEventBus-START
52+
-keep class org.simple.** { *; }
53+
-keep interface org.simple.** { *; }
54+
-keepclassmembers class * {
55+
@org.simple.eventbus.Subscriber <methods>;
56+
}
57+
-keepattributes *Annotation*
58+
#AndroidEventBus-END
59+
#Logger-START
60+
-dontwarn com.orhanobut.logger.**
61+
-keep class com.orhanobut.logger.**{*;}
62+
-keep interface com.orhanobut.logger.**{*;}
63+
#Logger-END
64+
65+
#retrofit2 混淆
66+
-dontwarn javax.annotation.**
67+
-dontwarn javax.inject.**
68+
# OkHttp3
69+
-dontwarn okhttp3.logging.**
70+
-keep class okhttp3.internal.**{*;}
71+
-dontwarn okio.**
72+
# Retrofit
73+
-dontwarn retrofit2.**
74+
-keep class retrofit2.** { *; }
75+
-keepattributes Signature
76+
-keepattributes Exceptions
77+
78+
# Retrofit
79+
-dontnote retrofit2.Platform
80+
-dontnote retrofit2.Platform$IOS$MainThreadExecutor
81+
-dontwarn retrofit2.Platform$Java8
82+
-keepattributes Signature
83+
-keepattributes Exceptions
84+
85+
# okhttp
86+
-dontwarn okio.**
87+
88+
# RxJava RxAndroid
89+
-dontwarn sun.misc.**
90+
-keepclassmembers class rx.internal.util.unsafe.*ArrayQueue*Field* {
91+
long producerIndex;
92+
long consumerIndex;
93+
}
94+
-keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueProducerNodeRef {
95+
rx.internal.util.atomic.LinkedQueueNode producerNode;
96+
}
97+
-keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueConsumerNodeRef {
98+
rx.internal.util.atomic.LinkedQueueNode consumerNode;
99+
}
100+
101+
# Gson
102+
-keep class com.google.gson.stream.** { *; }
103+
-keepattributes EnclosingMethod

0 commit comments

Comments
 (0)