Skip to content

Commit 320ecaf

Browse files
committed
see 04/28 log
1 parent 6859546 commit 320ecaf

File tree

8 files changed

+193
-13
lines changed

8 files changed

+193
-13
lines changed

app/proguard-rules.pro

+172-1
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,175 @@
1414
# class:
1515
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
1616
# public *;
17-
#}
17+
#}
18+
19+
#############################################
20+
#
21+
# 对于一些基本指令的添加
22+
#
23+
#############################################
24+
# 代码混淆压缩比,在0~7之间,默认为5,一般不做修改
25+
-optimizationpasses 5
26+
27+
# 混合时不使用大小写混合,混合后的类名为小写
28+
-dontusemixedcaseclassnames
29+
30+
# 指定不去忽略非公共库的类
31+
-dontskipnonpubliclibraryclasses
32+
33+
# 这句话能够使我们的项目混淆后产生映射文件
34+
# 包含有类名->混淆后类名的映射关系
35+
-verbose
36+
37+
# 指定不去忽略非公共库的类成员
38+
-dontskipnonpubliclibraryclassmembers
39+
40+
# 不做预校验,preverify是proguard的四个步骤之一,Android不需要preverify,去掉这一步能够加快混淆速度。
41+
-dontpreverify
42+
43+
# 保留Annotation不混淆
44+
-keepattributes *Annotation*,InnerClasses
45+
46+
# 避免混淆泛型
47+
-keepattributes Signature
48+
49+
# 抛出异常时保留代码行号
50+
-keepattributes SourceFile,LineNumberTable
51+
52+
# 指定混淆是采用的算法,后面的参数是一个过滤器
53+
# 这个过滤器是谷歌推荐的算法,一般不做更改
54+
-optimizations !code/simplification/cast,!field/*,!class/merging/*
55+
56+
57+
#############################################
58+
#
59+
# Android开发中一些需要保留的公共部分
60+
#
61+
#############################################
62+
63+
# 保留我们使用的四大组件,自定义的Application等等这些类不被混淆
64+
# 因为这些子类都有可能被外部调用
65+
-keep public class * extends android.app.Activity
66+
-keep public class * extends android.app.Appliction
67+
-keep public class * extends android.app.Service
68+
-keep public class * extends android.content.BroadcastReceiver
69+
-keep public class * extends android.content.ContentProvider
70+
-keep public class * extends android.app.backup.BackupAgentHelper
71+
-keep public class * extends android.preference.Preference
72+
-keep public class * extends android.view.View
73+
-keep public class com.android.vending.licensing.ILicensingService
74+
75+
76+
# 保留support下的所有类及其内部类
77+
-keep class android.support.** {*;}
78+
79+
# 保留继承的
80+
-keep public class * extends android.support.v4.**
81+
-keep public class * extends android.support.v7.**
82+
-keep public class * extends android.support.annotation.**
83+
84+
# 保留R下面的资源
85+
-keep class **.R$* {*;}
86+
87+
# 保留本地native方法不被混淆
88+
-keepclasseswithmembernames class * {
89+
native <methods>;
90+
}
91+
92+
# 保留在Activity中的方法参数是view的方法,
93+
# 这样以来我们在layout中写的onClick就不会被影响
94+
-keepclassmembers class * extends android.app.Activity{
95+
public void *(android.view.View);
96+
}
97+
98+
# 保留枚举类不被混淆
99+
-keepclassmembers enum * {
100+
public static **[] values();
101+
public static ** valueOf(java.lang.String);
102+
}
103+
104+
# 保留我们自定义控件(继承自View)不被混淆
105+
-keep public class * extends android.view.View{
106+
*** get*();
107+
void set*(***);
108+
public <init>(android.content.Context);
109+
public <init>(android.content.Context, android.util.AttributeSet);
110+
public <init>(android.content.Context, android.util.AttributeSet, int);
111+
}
112+
113+
# 保留Parcelable序列化类不被混淆
114+
-keep class * implements android.os.Parcelable {
115+
public static final android.os.Parcelable$Creator *;
116+
}
117+
118+
# 保留Serializable序列化的类不被混淆
119+
-keepnames class * implements java.io.Serializable
120+
-keepclassmembers class * implements java.io.Serializable {
121+
static final long serialVersionUID;
122+
private static final java.io.ObjectStreamField[] serialPersistentFields;
123+
!static !transient <fields>;
124+
!private <fields>;
125+
!private <methods>;
126+
private void writeObject(java.io.ObjectOutputStream);
127+
private void readObject(java.io.ObjectInputStream);
128+
java.lang.Object writeReplace();
129+
java.lang.Object readResolve();
130+
}
131+
132+
# 对于带有回调函数的onXXEvent、**On*Listener的,不能被混淆
133+
-keepclassmembers class * {
134+
void *(**On*Event);
135+
void *(**On*Listener);
136+
}
137+
138+
# webView处理,项目中没有使用到webView忽略即可
139+
-keepclassmembers class fqcn.of.javascript.interface.for.webview {
140+
public *;
141+
}
142+
-keepclassmembers class * extends android.webkit.webViewClient {
143+
public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap);
144+
public boolean *(android.webkit.WebView, java.lang.String);
145+
}
146+
-keepclassmembers class * extends android.webkit.webViewClient {
147+
public void *(android.webkit.webView, jav.lang.String);
148+
}
149+
150+
# 移除Log类打印各个等级日志的代码,打正式包的时候可以做为禁log使用,这里可以作为禁止log打印的功能使用
151+
# 记得proguard-android.txt中一定不要加-dontoptimize才起作用
152+
# 另外的一种实现方案是通过BuildConfig.DEBUG的变量来控制
153+
#-assumenosideeffects class android.util.Log {
154+
# public static int v(...);
155+
# public static int i(...);
156+
# public static int w(...);
157+
# public static int d(...);
158+
# public static int e(...);
159+
#}
160+
161+
#############################################
162+
#
163+
# 项目中特殊处理部分
164+
#
165+
#############################################
166+
167+
#-----------处理反射类---------------
168+
169+
170+
171+
#-----------处理js交互---------------
172+
173+
174+
175+
#-----------处理实体类---------------
176+
# 在开发的时候我们可以将所有的实体类放在一个包内,这样我们写一次混淆就行了。
177+
#-keep class com.blankj.data.bean.**{ *; }
178+
179+
# 或者对实体类都加 @Keep 即可
180+
# @Keep
181+
-keep,allowobfuscation @interface android.support.annotation.Keep
182+
-keep @android.support.annotation.Keep class *
183+
-keepclassmembers class * {
184+
@android.support.annotation.Keep *;
185+
}
186+
187+
188+
#-----------处理第三方依赖库---------

app/src/main/AndroidManifest.xml

+2-1
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,8 @@
5353
android:theme="@style/AppTheme">
5454
<activity
5555
android:name=".MainActivity"
56-
android:launchMode="singleTop">
56+
android:launchMode="singleTop"
57+
android:windowSoftInputMode="stateHidden|adjustPan">
5758
<intent-filter>
5859
<action android:name="android.intent.action.MAIN" />
5960
<category android:name="android.intent.category.LAUNCHER" />

subutil/README.md

+3
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,9 @@ scheduleWithFixedDelay
116116
[coordinate.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/subutil/src/main/java/com/blankj/subutil/util/CoordinateUtils.java
117117
[coordinate.test]: https://github.com/Blankj/AndroidUtilCode/blob/master/subutil/src/test/java/com/blankj/subutil/util/CoordinateUtilsTest.java
118118

119+
[flashlight.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/subutil/src/main/java/com/blankj/subutil/util/FlashlightUtils.java
120+
[flashlight.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/feature/sub/flashlight/FlashlightActivity.java
121+
119122
[gson.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/subutil/src/main/java/com/blankj/subutil/util/GsonUtils.java
120123
[gson.test]: https://github.com/Blankj/AndroidUtilCode/blob/master/subutil/src/test/java/com/blankj/subutil/util/GsonUtilsTest.java
121124

subutil/build.gradle

+1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ android {
1212
buildTypes {
1313
release {
1414
minifyEnabled false
15+
consumerProguardFiles 'proguard-rules.pro'
1516
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
1617
}
1718
}

utilcode/README-CN.md

+7-7
Original file line numberDiff line numberDiff line change
@@ -328,14 +328,14 @@ getCaptureIntent : 获取拍照的意图
328328

329329
* ### 键盘相关 -> [KeyboardUtils.java][keyboard.java] -> [Demo][keyboard.demo]
330330
```
331-
showSoftInput : 动态显示软键盘
332-
hideSoftInput : 动态隐藏软键盘
333-
toggleSoftInput : 切换键盘显示与否状态
334-
isSoftInputVisible : 判断软键盘是否可见
335-
registerSoftInputChangedListener: 注册软键盘改变监听器
331+
showSoftInput : 动态显示软键盘
332+
hideSoftInput : 动态隐藏软键盘
333+
toggleSoftInput : 切换键盘显示与否状态
334+
isSoftInputVisible : 判断软键盘是否可见
335+
registerSoftInputChangedListener : 注册软键盘改变监听器
336336
unregisterSoftInputChangedListener: 注销软键盘改变监听器
337-
fixSoftInputLeaks : 修复软键盘内存泄漏
338-
clickBlankArea2HideSoftInput : 点击屏幕空白区域隐藏软键盘
337+
fixSoftInputLeaks : 修复软键盘内存泄漏
338+
clickBlankArea2HideSoftInput : 点击屏幕空白区域隐藏软键盘
339339
```
340340

341341
* ### 日志相关 -> [LogUtils.java][log.java] -> [Demo][log.demo]

utilcode/README.md

+1
Original file line numberDiff line numberDiff line change
@@ -333,6 +333,7 @@ hideSoftInput
333333
toggleSoftInput
334334
isSoftInputVisible
335335
registerSoftInputChangedListener
336+
unregisterSoftInputChangedListener
336337
fixSoftInputLeaks
337338
clickBlankArea2HideSoftInput
338339
```

utilcode/src/main/java/android/support/v4/content/FileProvider4Util.java

+3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package android.support.v4.content;
22

3+
import android.support.annotation.Keep;
4+
35
/**
46
* <pre>
57
* author: Blankj
@@ -8,5 +10,6 @@
810
* desc :
911
* </pre>
1012
*/
13+
@Keep
1114
public final class FileProvider4Util extends FileProvider {
1215
}

utilcode/src/main/java/com/blankj/utilcode/util/KeyboardUtils.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -120,10 +120,6 @@ public static boolean isSoftInputVisible(final Activity activity,
120120
}
121121

122122
private static int getContentViewInvisibleHeight(final Activity activity) {
123-
final int flags = activity.getWindow().getAttributes().flags;
124-
if ((flags & WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS) != 0) {
125-
activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
126-
}
127123
final View contentView = activity.findViewById(android.R.id.content);
128124
final Rect outRect = new Rect();
129125
contentView.getWindowVisibleDisplayFrame(outRect);
@@ -139,6 +135,10 @@ private static int getContentViewInvisibleHeight(final Activity activity) {
139135
*/
140136
public static void registerSoftInputChangedListener(final Activity activity,
141137
final OnSoftInputChangedListener listener) {
138+
final int flags = activity.getWindow().getAttributes().flags;
139+
if ((flags & WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS) != 0) {
140+
activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
141+
}
142142
final View contentView = activity.findViewById(android.R.id.content);
143143
sContentViewInvisibleHeightPre = getContentViewInvisibleHeight(activity);
144144
onSoftInputChangedListener = listener;

0 commit comments

Comments
 (0)