Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
mmm-rain
AndroidUtilCode
提交
320ecaf1
A
AndroidUtilCode
项目概览
mmm-rain
/
AndroidUtilCode
与 Fork 源项目一致
从无法访问的项目Fork
通知
4
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
A
AndroidUtilCode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
320ecaf1
编写于
4月 28, 2018
作者:
B
Blankj
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
see 04/28 log
上级
68595468
变更
8
隐藏空白更改
内联
并排
Showing
8 changed file
with
193 addition
and
13 deletion
+193
-13
app/proguard-rules.pro
app/proguard-rules.pro
+172
-1
app/src/main/AndroidManifest.xml
app/src/main/AndroidManifest.xml
+2
-1
subutil/README.md
subutil/README.md
+3
-0
subutil/build.gradle
subutil/build.gradle
+1
-0
utilcode/README-CN.md
utilcode/README-CN.md
+7
-7
utilcode/README.md
utilcode/README.md
+1
-0
utilcode/src/main/java/android/support/v4/content/FileProvider4Util.java
...in/java/android/support/v4/content/FileProvider4Util.java
+3
-0
utilcode/src/main/java/com/blankj/utilcode/util/KeyboardUtils.java
...src/main/java/com/blankj/utilcode/util/KeyboardUtils.java
+4
-4
未找到文件。
app/proguard-rules.pro
浏览文件 @
320ecaf1
...
...
@@ -14,4 +14,175 @@
#
class
:
#-
keepclassmembers
class
fqcn
.
of
.
javascript
.
interface
.
for
.
webview
{
#
public
*
;
#
}
\ No newline at end of file
#
}
#############################################
#
#
对于一些基本指令的添加
#
#############################################
#
代码混淆压缩比,在
0
~
7
之间,默认为
5
,一般不做修改
-
optimizationpasses
5
#
混合时不使用大小写混合,混合后的类名为小写
-
dontusemixedcaseclassnames
#
指定不去忽略非公共库的类
-
dontskipnonpubliclibraryclasses
#
这句话能够使我们的项目混淆后产生映射文件
#
包含有类名
->
混淆后类名的映射关系
-
verbose
#
指定不去忽略非公共库的类成员
-
dontskipnonpubliclibraryclassmembers
#
不做预校验,
preverify是proguard的四个步骤之一
,
Android
不需要
preverify
,去掉这一步能够加快混淆速度。
-
dontpreverify
#
保留
Annotation
不混淆
-
keepattributes
*
Annotation
*,
InnerClasses
#
避免混淆泛型
-
keepattributes
Signature
#
抛出异常时保留代码行号
-
keepattributes
SourceFile
,
LineNumberTable
#
指定混淆是采用的算法,后面的参数是一个过滤器
#
这个过滤器是谷歌推荐的算法,一般不做更改
-
optimizations
!
code
/
simplification
/
cast
,!
field
/*
,!class/merging
/*
#############################################
#
# Android开发中一些需要保留的公共部分
#
#############################################
# 保留我们使用的四大组件,自定义的Application等等这些类不被混淆
# 因为这些子类都有可能被外部调用
-keep public class
* extends android.app.Activity
-keep public class * extends android.app.Appliction
-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.view.View
-keep public class com.android.vending.licensing.ILicensingService
# 保留support下的所有类及其内部类
-keep class android.support.
*
* {*;}
# 保留继承的
-keep public class * extends android.support.v4.
*
*
-keep public class * extends android.support.v7.
*
*
-keep public class * extends android.support.annotation.
*
*
# 保留R下面的资源
-keep class
*
*.R$* {*;}
# 保留本地native方法不被混淆
-keepclasseswithmembernames class * {
native <methods>;
}
# 保留在Activity中的方法参数是view的方法,
# 这样以来我们在layout中写的onClick就不会被影响
-keepclassmembers class * extends android.app.Activity{
public void *(android.view.View);
}
# 保留枚举类不被混淆
-keepclassmembers enum * {
public static
*
*[] values();
public static
*
* valueOf(java.lang.String);
}
# 保留我们自定义控件(继承自View)不被混淆
-keep public class * extends android.view.View{
**
* get*();
void set*(
**
*);
public <init>(android.content.Context);
public <init>(android.content.Context, android.util.AttributeSet);
public <init>(android.content.Context, android.util.AttributeSet, int);
}
# 保留Parcelable序列化类不被混淆
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
# 保留Serializable序列化的类不被混淆
-keepnames class * implements java.io.Serializable
-keepclassmembers class * implements java.io.Serializable {
static final long serialVersionUID;
private static final java.io.ObjectStreamField[] serialPersistentFields;
!static !transient <fields>;
!private <fields>;
!private <methods>;
private void writeObject(java.io.ObjectOutputStream);
private void readObject(java.io.ObjectInputStream);
java.lang.Object writeReplace();
java.lang.Object readResolve();
}
# 对于带有回调函数的onXXEvent、
*
*On*Listener的,不能被混淆
-keepclassmembers class * {
void *(
*
*On*Event);
void *(
*
*On*Listener);
}
# webView处理,项目中没有使用到webView忽略即可
-keepclassmembers class fqcn.of.javascript.interface.for.webview {
public *;
}
-keepclassmembers class * extends android.webkit.webViewClient {
public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap);
public boolean *(android.webkit.WebView, java.lang.String);
}
-keepclassmembers class * extends android.webkit.webViewClient {
public void *(android.webkit.webView, jav.lang.String);
}
# 移除Log类打印各个等级日志的代码,打正式包的时候可以做为禁log使用,这里可以作为禁止log打印的功能使用
# 记得proguard-android.txt中一定不要加-dontoptimize才起作用
# 另外的一种实现方案是通过BuildConfig.DEBUG的变量来控制
#-assumenosideeffects class android.util.Log {
# public static int v(...);
# public static int i(...);
# public static int w(...);
# public static int d(...);
# public static int e(...);
#}
#############################################
#
# 项目中特殊处理部分
#
#############################################
#-----------处理反射类---------------
#-----------处理js交互---------------
#-----------处理实体类---------------
# 在开发的时候我们可以将所有的实体类放在一个包内,这样我们写一次混淆就行了。
#-keep class com.blankj.data.bean.
*
*{ *; }
# 或者对实体类都加 @Keep 即可
# @Keep
-keep,allowobfuscation @interface android.support.annotation.Keep
-keep @android.support.annotation.Keep class *
-keepclassmembers class * {
@android.support.annotation.Keep *;
}
#-----------处理第三方依赖库---------
\ No newline at end of file
app/src/main/AndroidManifest.xml
浏览文件 @
320ecaf1
...
...
@@ -53,7 +53,8 @@
android:theme=
"@style/AppTheme"
>
<activity
android:name=
".MainActivity"
android:launchMode=
"singleTop"
>
android:launchMode=
"singleTop"
android:windowSoftInputMode=
"stateHidden|adjustPan"
>
<intent-filter>
<action
android:name=
"android.intent.action.MAIN"
/>
<category
android:name=
"android.intent.category.LAUNCHER"
/>
...
...
subutil/README.md
浏览文件 @
320ecaf1
...
...
@@ -116,6 +116,9 @@ scheduleWithFixedDelay
[
coordinate.java
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/subutil/src/main/java/com/blankj/subutil/util/CoordinateUtils.java
[
coordinate.test
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/subutil/src/test/java/com/blankj/subutil/util/CoordinateUtilsTest.java
[
flashlight.java
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/subutil/src/main/java/com/blankj/subutil/util/FlashlightUtils.java
[
flashlight.demo
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/feature/sub/flashlight/FlashlightActivity.java
[
gson.java
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/subutil/src/main/java/com/blankj/subutil/util/GsonUtils.java
[
gson.test
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/subutil/src/test/java/com/blankj/subutil/util/GsonUtilsTest.java
...
...
subutil/build.gradle
浏览文件 @
320ecaf1
...
...
@@ -12,6 +12,7 @@ android {
buildTypes
{
release
{
minifyEnabled
false
consumerProguardFiles
'proguard-rules.pro'
proguardFiles
getDefaultProguardFile
(
'proguard-android.txt'
),
'proguard-rules.pro'
}
}
...
...
utilcode/README-CN.md
浏览文件 @
320ecaf1
...
...
@@ -328,14 +328,14 @@ getCaptureIntent : 获取拍照的意图
*
### 键盘相关 ->
[
KeyboardUtils.java
][
keyboard.java
]
->
[
Demo
][
keyboard.demo
]
```
showSoftInput : 动态显示软键盘
hideSoftInput : 动态隐藏软键盘
toggleSoftInput : 切换键盘显示与否状态
isSoftInputVisible : 判断软键盘是否可见
registerSoftInputChangedListener: 注册软键盘改变监听器
showSoftInput
: 动态显示软键盘
hideSoftInput
: 动态隐藏软键盘
toggleSoftInput
: 切换键盘显示与否状态
isSoftInputVisible
: 判断软键盘是否可见
registerSoftInputChangedListener
: 注册软键盘改变监听器
unregisterSoftInputChangedListener: 注销软键盘改变监听器
fixSoftInputLeaks : 修复软键盘内存泄漏
clickBlankArea2HideSoftInput : 点击屏幕空白区域隐藏软键盘
fixSoftInputLeaks
: 修复软键盘内存泄漏
clickBlankArea2HideSoftInput
: 点击屏幕空白区域隐藏软键盘
```
*
### 日志相关 ->
[
LogUtils.java
][
log.java
]
->
[
Demo
][
log.demo
]
...
...
utilcode/README.md
浏览文件 @
320ecaf1
...
...
@@ -333,6 +333,7 @@ hideSoftInput
toggleSoftInput
isSoftInputVisible
registerSoftInputChangedListener
unregisterSoftInputChangedListener
fixSoftInputLeaks
clickBlankArea2HideSoftInput
```
...
...
utilcode/src/main/java/android/support/v4/content/FileProvider4Util.java
浏览文件 @
320ecaf1
package
android.support.v4.content
;
import
android.support.annotation.Keep
;
/**
* <pre>
* author: Blankj
...
...
@@ -8,5 +10,6 @@ package android.support.v4.content;
* desc :
* </pre>
*/
@Keep
public
final
class
FileProvider4Util
extends
FileProvider
{
}
utilcode/src/main/java/com/blankj/utilcode/util/KeyboardUtils.java
浏览文件 @
320ecaf1
...
...
@@ -120,10 +120,6 @@ public final class KeyboardUtils {
}
private
static
int
getContentViewInvisibleHeight
(
final
Activity
activity
)
{
final
int
flags
=
activity
.
getWindow
().
getAttributes
().
flags
;
if
((
flags
&
WindowManager
.
LayoutParams
.
FLAG_LAYOUT_NO_LIMITS
)
!=
0
)
{
activity
.
getWindow
().
clearFlags
(
WindowManager
.
LayoutParams
.
FLAG_LAYOUT_NO_LIMITS
);
}
final
View
contentView
=
activity
.
findViewById
(
android
.
R
.
id
.
content
);
final
Rect
outRect
=
new
Rect
();
contentView
.
getWindowVisibleDisplayFrame
(
outRect
);
...
...
@@ -139,6 +135,10 @@ public final class KeyboardUtils {
*/
public
static
void
registerSoftInputChangedListener
(
final
Activity
activity
,
final
OnSoftInputChangedListener
listener
)
{
final
int
flags
=
activity
.
getWindow
().
getAttributes
().
flags
;
if
((
flags
&
WindowManager
.
LayoutParams
.
FLAG_LAYOUT_NO_LIMITS
)
!=
0
)
{
activity
.
getWindow
().
clearFlags
(
WindowManager
.
LayoutParams
.
FLAG_LAYOUT_NO_LIMITS
);
}
final
View
contentView
=
activity
.
findViewById
(
android
.
R
.
id
.
content
);
sContentViewInvisibleHeightPre
=
getContentViewInvisibleHeight
(
activity
);
onSoftInputChangedListener
=
listener
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录