Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xiaoxuan_i809
AndroidUtilCode
提交
14ed64d2
A
AndroidUtilCode
项目概览
xiaoxuan_i809
/
AndroidUtilCode
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
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 搜索 >>
提交
14ed64d2
编写于
12月 04, 2018
作者:
B
Blankj
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
see 12/04 log
上级
a9687d00
变更
23
展开全部
隐藏空白更改
内联
并排
Showing
23 changed file
with
365 addition
and
164 deletion
+365
-164
README-CN.md
README-CN.md
+1
-1
README.md
README.md
+1
-1
app/__bus__.json
app/__bus__.json
+2
-1
app/build.gradle
app/build.gradle
+1
-1
app/src/main/java/com/blankj/androidutilcode/feature/core/CoreUtilActivity.java
...blankj/androidutilcode/feature/core/CoreUtilActivity.java
+12
-1
app/src/main/java/com/blankj/androidutilcode/feature/core/adaptScreen/AdaptScreenActivity.kt
...dutilcode/feature/core/adaptScreen/AdaptScreenActivity.kt
+1
-4
app/src/main/java/com/blankj/androidutilcode/feature/core/adaptScreen/CloseAdaptActivity.kt
...idutilcode/feature/core/adaptScreen/CloseAdaptActivity.kt
+1
-4
bus-gradle-plugin/CHANGELOG.md
bus-gradle-plugin/CHANGELOG.md
+19
-0
bus-gradle-plugin/com/blankj/bus/BusUtils.class
bus-gradle-plugin/com/blankj/bus/BusUtils.class
+0
-0
bus-gradle-plugin/src/main/java/com/blankj/bus/BusInject.groovy
...adle-plugin/src/main/java/com/blankj/bus/BusInject.groovy
+23
-14
bus-gradle-plugin/src/main/java/com/blankj/bus/BusScan.groovy
...gradle-plugin/src/main/java/com/blankj/bus/BusScan.groovy
+48
-8
bus-gradle-plugin/src/main/java/com/blankj/bus/Config.groovy
bus-gradle-plugin/src/main/java/com/blankj/bus/Config.groovy
+1
-1
bus-gradle-plugin/src/main/java/com/blankj/util/JavassistUtils.groovy
...lugin/src/main/java/com/blankj/util/JavassistUtils.groovy
+1
-0
bus-gradle-plugin/src/test/java/com/blankj/bus/BusTest.java
bus-gradle-plugin/src/test/java/com/blankj/bus/BusTest.java
+126
-3
config.gradle
config.gradle
+5
-5
launcher/pkg/src/main/java/com/blankj/launcher/pkg/MainActivity.kt
...pkg/src/main/java/com/blankj/launcher/pkg/MainActivity.kt
+7
-15
launcher/pkg/src/main/res/layout/activity_main.xml
launcher/pkg/src/main/res/layout/activity_main.xml
+2
-2
subutil/README.md
subutil/README.md
+12
-12
utilcode/README-CN.md
utilcode/README-CN.md
+10
-1
utilcode/README-STATIC-BUS.md
utilcode/README-STATIC-BUS.md
+5
-3
utilcode/README.md
utilcode/README.md
+73
-64
utilcode/lib/src/main/java/com/blankj/utilcode/util/BusUtils.java
.../lib/src/main/java/com/blankj/utilcode/util/BusUtils.java
+14
-1
utilcode/lib/src/test/java/com/blankj/utilcode/util/BaseTest.java
.../lib/src/test/java/com/blankj/utilcode/util/BaseTest.java
+0
-22
未找到文件。
README-CN.md
浏览文件 @
14ed64d2
...
...
@@ -41,7 +41,7 @@
[
logo
]:
https://raw.githubusercontent.com/Blankj/AndroidUtilCode/master/art/logo.png
[
aucSvg
]:
https://img.shields.io/badge/AndroidUtilCode-v1.22.
0
-brightgreen.svg
[
aucSvg
]:
https://img.shields.io/badge/AndroidUtilCode-v1.22.
1
-brightgreen.svg
[
auc
]:
https://github.com/Blankj/AndroidUtilCode
[
apiSvg
]:
https://img.shields.io/badge/API-14+-brightgreen.svg
...
...
README.md
浏览文件 @
14ed64d2
...
...
@@ -41,7 +41,7 @@ If this project helps you a lot and you want to support the project's developmen
[
logo
]:
https://raw.githubusercontent.com/Blankj/AndroidUtilCode/master/art/logo.png
[
aucSvg
]:
https://img.shields.io/badge/AndroidUtilCode-v1.22.
0
-brightgreen.svg
[
aucSvg
]:
https://img.shields.io/badge/AndroidUtilCode-v1.22.
1
-brightgreen.svg
[
auc
]:
https://github.com/Blankj/AndroidUtilCode
[
apiSvg
]:
https://img.shields.io/badge/API-14+-brightgreen.svg
...
...
app/__bus__.json
浏览文件 @
14ed64d2
{
"CloseAdaptActivity#start"
:
"void com.blankj.androidutilcode.feature.core.adaptScreen.CloseAdaptActivity.start(android.content.Context)"
"CloseAdaptActivity#start"
:
"void com.blankj.androidutilcode.feature.core.adaptScreen.CloseAdaptActivity.start(android.content.Context)"
,
"AdaptScreenActivity#start"
:
"void com.blankj.androidutilcode.feature.core.adaptScreen.AdaptScreenActivityKt.start(android.content.Context)"
}
\ No newline at end of file
app/build.gradle
浏览文件 @
14ed64d2
...
...
@@ -21,5 +21,5 @@ dependencies {
// LeakCanary
debugImplementation
dep
.
leakcanary
.
android
releaseImplementation
dep
.
leakcanary
.
android_no_op
// implementation 'com.blankj:utilcode:1.22.
0
'
// implementation 'com.blankj:utilcode:1.22.
1
'
}
\ No newline at end of file
app/src/main/java/com/blankj/androidutilcode/feature/core/CoreUtilActivity.java
浏览文件 @
14ed64d2
...
...
@@ -2,7 +2,9 @@ package com.blankj.androidutilcode.feature.core;
import
android.content.Context
;
import
android.content.Intent
;
import
android.os.Build
;
import
android.os.Bundle
;
import
android.provider.Settings
;
import
android.support.annotation.Nullable
;
import
android.view.View
;
...
...
@@ -84,7 +86,6 @@ public class CoreUtilActivity extends BaseBackActivity {
public
void
adaptScreenClick
(
View
view
)
{
BusUtils
.
post
(
"AdaptScreenActivity#start"
,
this
);
// AdaptScreenActivity.start(this);
}
public
void
appClick
(
View
view
)
{
...
...
@@ -174,4 +175,14 @@ public class CoreUtilActivity extends BaseBackActivity {
public
void
toastClick
(
View
view
)
{
ToastActivity
.
start
(
this
);
}
public
static
float
getAnimationScale
(
Context
context
)
{
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
JELLY_BEAN_MR1
)
{
return
Settings
.
Global
.
getFloat
(
context
.
getContentResolver
(),
Settings
.
Global
.
ANIMATOR_DURATION_SCALE
,
1.0f
);
}
else
{
return
Settings
.
System
.
getFloat
(
context
.
getContentResolver
(),
Settings
.
System
.
ANIMATOR_DURATION_SCALE
,
1.0f
);
}
}
}
app/src/main/java/com/blankj/androidutilcode/feature/core/adaptScreen/AdaptScreenActivity.kt
浏览文件 @
14ed64d2
...
...
@@ -28,10 +28,7 @@ class AdaptScreenActivity : BaseBackActivity() {
override
fun
initView
(
savedInstanceState
:
Bundle
?,
contentView
:
View
?)
{
adaptWidthBtn
.
setOnClickListener
{
WidthActivity
.
start
(
this
)
}
adaptHeightBtn
.
setOnClickListener
{
HeightActivity
.
start
(
this
)
}
closeAdaptBtn
.
setOnClickListener
{
BusUtils
.
post
<
Any
>(
"CloseAdaptActivity#start"
,
this
)
// CloseAdaptActivity.start(this)
}
closeAdaptBtn
.
setOnClickListener
{
CloseAdaptActivity
.
start
(
this
)
}
}
override
fun
doBusiness
()
{}
...
...
app/src/main/java/com/blankj/androidutilcode/feature/core/adaptScreen/CloseAdaptActivity.kt
浏览文件 @
14ed64d2
...
...
@@ -8,13 +8,10 @@ import android.support.v7.app.AppCompatActivity
import
android.view.WindowManager
import
com.blankj.androidutilcode.R
import
com.blankj.utilcode.util.AdaptScreenUtils
import
com.blankj.utilcode.util.BusUtils
class
CloseAdaptActivity
:
AppCompatActivity
()
{
companion
object
Instance
{
@JvmStatic
@BusUtils
.
Subscribe
(
name
=
"CloseAdaptActivity#start"
)
companion
object
{
fun
start
(
context
:
Context
)
{
val
starter
=
Intent
(
context
,
CloseAdaptActivity
::
class
.
java
)
context
.
startActivity
(
starter
)
...
...
bus-gradle-plugin/CHANGELOG.md
0 → 100644
浏览文件 @
14ed64d2
# Change Log
## v1.5
升级 javassist 来修复 Kotlin 匿名类 NotFoundException
## v1.4
优化 inject 兼容 Kotlin 的 bus
## v1.3
去除 static bus,只注入 utilcode
## v1.2
修复 bug
## v1.1
升级 javassist 版本,兼容 Java8
## v1.0
发布初版本
\ No newline at end of file
bus-gradle-plugin/com/blankj/bus/BusUtils.class
0 → 100644
浏览文件 @
14ed64d2
文件已添加
bus-gradle-plugin/src/main/java/com/blankj/bus/BusInject.groovy
浏览文件 @
14ed64d2
...
...
@@ -4,27 +4,34 @@ import com.blankj.util.JavassistUtils
import
com.blankj.util.ZipUtils
import
javassist.CtClass
import
javassist.CtMethod
import
javassist.NotFoundException
import
org.apache.commons.io.FileUtils
class
BusInject
{
static
void
start
(
HashMap
<
String
,
String
>
bus
,
File
busJar
)
{
String
jarPath
=
busJar
.
getAbsolutePath
()
String
decompressedJarPath
=
jarPath
.
substring
(
0
,
jarPath
.
length
()
-
4
);
File
decompressedJar
=
new
File
(
decompressedJarPath
)
ZipUtils
.
unzipFile
(
busJar
,
decompressedJar
)
String
jarPath
=
busJar
.
getAbsolutePath
()
String
decompressedJarPath
=
jarPath
.
substring
(
0
,
jarPath
.
length
()
-
4
);
File
decompressedJar
=
new
File
(
decompressedJarPath
)
ZipUtils
.
unzipFile
(
busJar
,
decompressedJar
)
CtClass
busUtils
=
JavassistUtils
.
getPool
().
get
(
Config
.
CLASS_BUS_UTILS
)
CtMethod
callMethod
=
busUtils
.
getDeclaredMethod
(
"post"
);
callMethod
.
insertAfter
(
getInsertContent
(
bus
));
busUtils
.
writeFile
(
decompressedJarPath
)
busUtils
.
defrost
();
FileUtils
.
forceDelete
(
busJar
)
ZipUtils
.
zipFile
(
decompressedJar
,
busJar
)
FileUtils
.
forceDelete
(
decompressedJar
)
CtClass
busUtils
=
JavassistUtils
.
getPool
().
get
(
Config
.
BUS_UTILS_CLASS
)
CtMethod
callMethod
;
try
{
callMethod
=
busUtils
.
getDeclaredMethod
(
"injectShell"
);
callMethod
.
insertAfter
(
getInsertContent
(
bus
,
false
));
}
catch
(
NotFoundException
ignore
)
{
callMethod
=
busUtils
.
getDeclaredMethod
(
"post"
);
callMethod
.
insertAfter
(
getInsertContent
(
bus
,
true
));
}
busUtils
.
writeFile
(
decompressedJarPath
)
busUtils
.
defrost
();
FileUtils
.
forceDelete
(
busJar
)
ZipUtils
.
zipFile
(
decompressedJar
,
busJar
)
FileUtils
.
forceDelete
(
decompressedJar
)
}
private
static
String
getInsertContent
(
HashMap
<
String
,
String
>
bus
)
{
private
static
String
getInsertContent
(
HashMap
<
String
,
String
>
bus
,
boolean
isLow
)
{
StringBuilder
sb
=
new
StringBuilder
();
bus
.
each
{
String
key
,
String
val
->
String
name
=
key
...
...
@@ -72,7 +79,9 @@ class BusInject {
}
sb
.
append
(
"}"
)
}
sb
.
append
(
'android.util.Log.e("BusUtils", "bus of <" + $1 + "> didn\'t exist.");'
)
if
(
isLow
)
{
sb
.
append
(
'android.util.Log.e("BusUtils", "bus of <" + $1 + "> didn\'t exist.");'
)
}
return
sb
.
toString
()
}
}
\ No newline at end of file
bus-gradle-plugin/src/main/java/com/blankj/bus/BusScan.groovy
浏览文件 @
14ed64d2
...
...
@@ -6,7 +6,9 @@ import com.blankj.util.ZipUtils
import
com.blankj.utilcode.util.BusUtils
import
groovy.io.FileType
import
javassist.CtClass
import
javassist.CtField
import
javassist.CtMethod
import
javassist.NotFoundException
import
org.apache.commons.io.FileUtils
import
java.lang.reflect.Modifier
...
...
@@ -54,20 +56,58 @@ class BusScan {
className
=
className
.
substring
(
0
,
className
.
length
()
-
6
)
CtClass
ctClass
=
JavassistUtils
.
getPool
().
get
(
className
)
CtMethod
[]
methods
=
ctClass
.
getDeclaredMethods
();
CtMethod
[]
methods
=
ctClass
.
getMethods
();
for
(
CtMethod
method
:
methods
)
{
if
(
method
.
hasAnnotation
(
BusUtils
.
Subscribe
))
{
if
(
method
.
hasAnnotation
(
BusUtils
.
Subscribe
.
class
))
{
String
name
=
((
BusUtils
.
Subscribe
)
method
.
getAnnotation
(
BusUtils
.
Subscribe
.
class
)).
name
();
if
(
busMap
.
containsKey
(
name
))
{
LogUtils
.
l
(
"bus of "
+
name
+
" has registered: "
+
method
.
getLongName
());
continue
;
}
String
methodLongName
=
method
.
getLongName
();
if
(
Modifier
.
isStatic
(
method
.
getModifiers
()))
{
String
name
=
method
.
getAnnotation
(
BusUtils
.
Subscribe
).
name
()
String
sign
=
method
.
getReturnType
().
getName
()
+
' '
+
method
.
getLongName
()
busMap
.
put
(
name
,
sign
)
}
else
{
LogUtils
.
l
(
method
.
getLongName
()
+
"is not static"
)
String
sign
=
method
.
getReturnType
().
getName
()
+
' '
+
methodLongName
;
busMap
.
put
(
name
,
sign
);
}
else
{
// may be is kotlin
processKt
(
method
,
name
,
methodLongName
)
}
}
}
}
}
}
private
void
processKt
(
CtMethod
method
,
String
name
,
String
longMethodName
)
{
CtClass
ktClass
=
method
.
getDeclaringClass
();
try
{
CtField
instance
=
ktClass
.
getField
(
"INSTANCE"
);
LogUtils
.
l
(
"find INSTANCE: "
+
name
+
": "
+
longMethodName
);
int
i
=
longMethodName
.
lastIndexOf
(
'('
);
String
temp
=
longMethodName
.
substring
(
0
,
i
);
int
j
=
temp
.
lastIndexOf
(
'.'
);
String
sign
=
method
.
getReturnType
().
getName
()
+
' '
+
longMethodName
.
substring
(
0
,
j
)
+
".INSTANCE"
+
longMethodName
.
substring
(
j
);
busMap
.
put
(
name
,
sign
);
}
catch
(
NotFoundException
ignore
)
{
String
innerClassSimpleName
=
ktClass
.
getSimpleName
();
if
(
innerClassSimpleName
.
contains
(
'$'
)
&&
!
innerClassSimpleName
.
endsWith
(
'$'
))
{
String
innerClassName
=
ktClass
.
getName
();
String
outerClassName
=
innerClassName
.
substring
(
0
,
innerClassName
.
lastIndexOf
(
'$'
));
CtClass
outerClass
=
JavassistUtils
.
getPool
().
get
(
outerClassName
);
try
{
CtField
ctField
=
outerClass
.
getField
(
innerClassSimpleName
.
substring
(
innerClassSimpleName
.
lastIndexOf
(
'$'
)
+
1
));
String
fieldName
=
ctField
.
getName
();
String
methodName
=
longMethodName
.
replace
(
'$'
+
fieldName
,
'.'
+
fieldName
);
String
sign
=
method
.
getReturnType
().
getName
()
+
' '
+
methodName
;
busMap
.
put
(
name
,
sign
);
}
catch
(
NotFoundException
ignored
)
{
LogUtils
.
l
(
longMethodName
+
"is not static"
);
}
}
else
{
LogUtils
.
l
(
longMethodName
+
"is not static"
);
}
}
}
}
bus-gradle-plugin/src/main/java/com/blankj/bus/Config.groovy
浏览文件 @
14ed64d2
...
...
@@ -13,5 +13,5 @@ class Config {
public
static
final
String
FILE_SEP
=
System
.
getProperty
(
"file.separator"
)
public
static
final
String
CLASS_BUS_UTIL
S
=
'com.blankj.utilcode.util.BusUtils'
public
static
final
String
BUS_UTILS_CLAS
S
=
'com.blankj.utilcode.util.BusUtils'
}
bus-gradle-plugin/src/main/java/com/blankj/util/JavassistUtils.groovy
浏览文件 @
14ed64d2
...
...
@@ -19,6 +19,7 @@ class JavassistUtils {
sPool
=
new
ClassPool
(
null
)
sPool
.
appendSystemPath
()
// 加入本地 android 包
LogUtils
.
l
(
project
.
android
.
bootClasspath
[
0
].
toString
())
sPool
.
appendClassPath
(
project
.
android
.
bootClasspath
[
0
].
toString
())
}
...
...
bus-gradle-plugin/src/test/java/com/blankj/bus/BusTest.java
浏览文件 @
14ed64d2
package
com.blankj.bus
;
import
com.blankj.util.JsonUtils
;
import
com.blankj.utilcode.util.BusUtils
;
import
org.apache.commons.io.FileUtils
;
...
...
@@ -8,10 +9,16 @@ import org.junit.Test;
import
java.io.File
;
import
java.util.Collection
;
import
java.util.HashMap
;
import
java.util.function.BiConsumer
;
import
javassist.ClassPool
;
import
javassist.CtClass
;
import
javassist.CtField
;
import
javassist.CtMethod
;
import
javassist.CtNewMethod
;
import
javassist.Modifier
;
import
javassist.NotFoundException
;
/**
* <pre>
...
...
@@ -27,9 +34,11 @@ public class BusTest {
public
void
test
()
throws
Exception
{
String
rootPath
=
"/Users/blankj/Repo/AndroidUtilCode/app/build/intermediates/transforms/busTransform/debug/43/"
;
File
root
=
new
File
(
rootPath
);
ClassPool
mPool
=
new
ClassPool
(
null
);
ClassPool
mPool
=
new
ClassPool
(
null
);
mPool
.
appendSystemPath
();
mPool
.
appendClassPath
(
rootPath
);
mPool
.
appendClassPath
(
"/Users/blankj/Library/Android/sdk/platforms/android-27/android.jar"
);
HashMap
<
String
,
String
>
busMap
=
new
HashMap
<>();
if
(
root
.
isDirectory
())
{
Collection
<
File
>
files
=
FileUtils
.
listFiles
(
root
,
new
String
[]{
"class"
},
true
);
...
...
@@ -48,11 +57,125 @@ public class BusTest {
for
(
CtMethod
method
:
methods
)
{
if
(
method
.
hasAnnotation
(
BusUtils
.
Subscribe
.
class
))
{
String
name
=
((
BusUtils
.
Subscribe
)
method
.
getAnnotation
(
BusUtils
.
Subscribe
.
class
)).
name
();
String
sign
=
method
.
getReturnType
().
getName
()
+
' '
+
method
.
getLongName
();
System
.
out
.
println
(
name
+
": "
+
sign
);
if
(
busMap
.
containsKey
(
name
))
{
System
.
out
.
println
(
"bus of "
+
name
+
" has registered."
+
method
.
getLongName
());
continue
;
}
String
longMethodName
=
method
.
getLongName
();
if
(
Modifier
.
isStatic
(
method
.
getModifiers
()))
{
String
sign
=
method
.
getReturnType
().
getName
()
+
' '
+
longMethodName
;
busMap
.
put
(
name
,
sign
);
}
else
{
// may be is kotlin
processKt
(
mPool
,
busMap
,
method
,
name
,
longMethodName
);
}
}
}
}
System
.
out
.
println
(
JsonUtils
.
getFormatJson
(
busMap
));
}
CtClass
ctClass
=
mPool
.
makeClass
(
"com.blankj.bus.BusUtils"
);
String
src
=
""
+
"public static Object post(String name, Object[] objects) {\n"
+
" if (name == null || name.length() == 0) return null;\n"
+
" return null;\n"
+
"}"
;
CtMethod
make
=
CtNewMethod
.
make
(
src
,
ctClass
);
ctClass
.
addMethod
(
make
);
make
.
insertAfter
(
getInsertContent
(
busMap
));
ctClass
.
debugWriteFile
();
}
private
void
processKt
(
ClassPool
mPool
,
HashMap
<
String
,
String
>
busMap
,
CtMethod
method
,
String
name
,
String
longMethodName
)
throws
NotFoundException
{
CtClass
innerClass
=
method
.
getDeclaringClass
();
try
{
CtField
instance
=
innerClass
.
getField
(
"INSTANCE"
);
System
.
out
.
println
(
"find INSTANCE: "
+
name
+
": "
+
longMethodName
);
int
i
=
longMethodName
.
lastIndexOf
(
'('
);
String
temp
=
longMethodName
.
substring
(
0
,
i
);
int
j
=
temp
.
lastIndexOf
(
'.'
);
String
sign
=
method
.
getReturnType
().
getName
()
+
' '
+
longMethodName
.
substring
(
0
,
j
)
+
".INSTANCE"
+
longMethodName
.
substring
(
j
);
System
.
out
.
println
(
sign
);
busMap
.
put
(
name
,
sign
);
}
catch
(
NotFoundException
ignore
)
{
String
innerClassSimpleName
=
innerClass
.
getSimpleName
();
if
(
innerClassSimpleName
.
contains
(
"$"
)
&&
!
innerClassSimpleName
.
endsWith
(
"$"
))
{
String
innerClassName
=
innerClass
.
getName
();
String
outerClassName
=
innerClassName
.
substring
(
0
,
innerClassName
.
lastIndexOf
(
'$'
));
CtClass
outerClass
=
mPool
.
get
(
outerClassName
);
try
{
CtField
ctField
=
outerClass
.
getField
(
innerClassSimpleName
.
substring
(
innerClassSimpleName
.
lastIndexOf
(
'$'
)
+
1
));
String
fieldName
=
ctField
.
getName
();
String
methodName
=
longMethodName
.
replace
(
"$"
+
fieldName
,
"."
+
fieldName
);
String
sign
=
method
.
getReturnType
().
getName
()
+
' '
+
methodName
;
busMap
.
put
(
name
,
sign
);
}
catch
(
NotFoundException
e
)
{
System
.
out
.
println
(
longMethodName
+
"is not static"
);
}
}
else
{
System
.
out
.
println
(
longMethodName
+
"is not static"
);
}
}
}
private
static
String
getInsertContent
(
HashMap
<
String
,
String
>
bus
)
{
final
StringBuilder
sb
=
new
StringBuilder
();
bus
.
forEach
(
new
BiConsumer
<
String
,
String
>()
{
@Override
public
void
accept
(
String
name
,
String
sign
)
{
String
[]
method
=
sign
.
split
(
" "
);
String
returnType
=
method
[
0
];
String
methodName
=
method
[
1
];
sb
.
append
(
"if (\""
).
append
(
name
).
append
(
"\".equals($1)) {\n"
);
int
st
=
methodName
.
indexOf
(
'('
);
int
end
=
methodName
.
length
();
String
params
=
methodName
.
substring
(
st
+
1
,
end
-
1
);
if
(!
params
.
equals
(
""
))
{
String
[]
paramArr
=
params
.
split
(
","
);
StringBuilder
args
=
new
StringBuilder
();
for
(
int
i
=
0
;
i
<
paramArr
.
length
;
i
++)
{
if
(
paramArr
[
i
].
equals
(
"char"
))
{
args
.
append
(
",$2["
).
append
(
i
).
append
(
"].toString().charAt(0)"
);
}
else
if
(
paramArr
[
i
].
equals
(
"boolean"
))
{
args
.
append
(
",Boolean.parseBoolean($2["
).
append
(
i
).
append
(
"].toString())"
);
}
else
if
(
paramArr
[
i
].
equals
(
"byte"
))
{
args
.
append
(
",Byte.parseByte($2["
).
append
(
i
).
append
(
"].toString())"
);
}
else
if
(
paramArr
[
i
].
equals
(
"short"
))
{
args
.
append
(
",Short.parseShort($2["
).
append
(
i
).
append
(
"].toString())"
);
}
else
if
(
paramArr
[
i
].
equals
(
"int"
))
{
args
.
append
(
",Integer.parseInt($2["
).
append
(
i
).
append
(
"].toString())"
);
}
else
if
(
paramArr
[
i
].
equals
(
"long"
))
{
args
.
append
(
",Long.parseLong($2["
).
append
(
i
).
append
(
"].toString())"
);
}
else
if
(
paramArr
[
i
].
equals
(
"float"
))
{
args
.
append
(
",Float.parseFloat($2["
).
append
(
i
).
append
(
"].toString())"
);
}
else
if
(
paramArr
[
i
].
equals
(
"double"
))
{
args
.
append
(
",Double.parseDouble($2["
).
append
(
i
).
append
(
"].toString())"
);
}
else
{
args
.
append
(
",("
).
append
(
paramArr
[
i
]).
append
(
")$2["
).
append
(
i
).
append
(
"]"
);
}
}
methodName
=
methodName
.
substring
(
0
,
st
+
1
)
+
args
.
substring
(
1
)
+
")"
;
}
if
(
returnType
.
equals
(
"void"
))
{
sb
.
append
(
methodName
).
append
(
";\n"
).
append
(
"return null;\n"
);
}
else
{
sb
.
append
(
"return ($w)"
).
append
(
methodName
).
append
(
";\n"
);
}
sb
.
append
(
"}"
);
}
});
return
sb
.
toString
();
}
}
config.gradle
浏览文件 @
14ed64d2
...
...
@@ -5,12 +5,12 @@ ext {
compileSdkVersion
=
27
minSdkVersion
=
14
targetSdkVersion
=
27
versionCode
=
1
_022_00
0
versionName
=
'1.22.
0
'
// E.g. 1.9.72 => 1,009,072
versionCode
=
1
_022_00
1
versionName
=
'1.22.
1
'
// E.g. 1.9.72 => 1,009,072
bus
=
[
isDebug:
tru
e
,
version:
'1.
3
'
,
isDebug:
fals
e
,
version:
'1.
5
'
,
group
:
'com.blankj'
]
...
...
@@ -46,7 +46,7 @@ ext {
gson
:
"com.google.code.gson:gson:2.8.2"
,
glide
:
"com.github.bumptech.glide:glide:4.7.1"
,
retrofit
:
"com.squareup.retrofit2:retrofit:2.4.0"
,
javassist
:
"org.javassist:javassist:3.2
3.1
-GA"
,
javassist
:
"org.javassist:javassist:3.2
4.0
-GA"
,
commons_io
:
"commons-io:commons-io:2.5"
,
junit
:
"junit:junit:4.12"
,
...
...
launcher/pkg/src/main/java/com/blankj/launcher/pkg/MainActivity.kt
浏览文件 @
14ed64d2
...
...
@@ -43,13 +43,13 @@ class MainActivity : BaseDrawerActivity() {
BarUtils
.
setStatusBarAlpha4Drawer
(
this
,
mDrawerRootLayout
,
launcherMainFakeStatusBar
,
0
,
false
)
BarUtils
.
addMarginTopEqualStatusBarHeight
(
launcherMainToolbar
)
//
launcherMainCoreUtilBtn.setOnClickListener {
//
BusUtils.post<Any>("CoreUtilActivity#start", this)
//
}
//
//
launcherMainSubUtilBtn.setOnClickListener {
//
BusUtils.post<Any>("SubUtilActivity#start", this)
//
}
launcherMainCoreUtilBtn
.
setOnClickListener
{
BusUtils
.
post
<
Any
>(
"CoreUtilActivity#start"
,
this
)
}
launcherMainSubUtilBtn
.
setOnClickListener
{
BusUtils
.
post
<
Any
>(
"SubUtilActivity#start"
,
this
)
}
}
override
fun
doBusiness
()
{
...
...
@@ -60,14 +60,6 @@ class MainActivity : BaseDrawerActivity() {
}
fun
coreUtilClick
(
view
:
View
)
{
}
fun
subUtilClick
(
view
:
View
)
{
BusUtils
.
post
<
Any
>(
"SubUtilActivity#start"
,
this
)
}
override
fun
onBackPressed
()
{
ActivityUtils
.
startHomeActivity
()
}
...
...
launcher/pkg/src/main/res/layout/activity_main.xml
浏览文件 @
14ed64d2
...
...
@@ -55,15 +55,15 @@
android:paddingRight=
"@dimen/spacing_16"
>
<Button
style=
"@style/WideBtnStyle"
android:id=
"@+id/launcherMainCoreUtilBtn"
style=
"@style/WideBtnStyle"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:text=
"@string/core_util"
/>
<Button
style=
"@style/WideBtnStyle"
android:id=
"@+id/launcherMainSubUtilBtn"
style=
"@style/WideBtnStyle"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:text=
"@string/sub_util"
/>
...
...
subutil/README.md
浏览文件 @
14ed64d2
...
...
@@ -85,26 +85,26 @@ getSurnameFirstLetter
[
brightness.java
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/subutil/
subutil-
lib/src/main/java/com/blankj/subutil/util/BrightnessUtils.java
[
brightness.java
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/subutil/lib/src/main/java/com/blankj/subutil/util/BrightnessUtils.java
[
brightness.demo
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/feature/sub/brightness/BrightnessActivity.java
[
clipboard.java
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/subutil/
subutil-
lib/src/main/java/com/blankj/subutil/util/ClipboardUtils.java
[
clipboard.test
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/subutil/
subutil-
lib/src/test/java/com/blankj/subutil/util/ClipboardUtilsTest.java
[
clipboard.java
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/subutil/lib/src/main/java/com/blankj/subutil/util/ClipboardUtils.java
[
clipboard.test
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/subutil/lib/src/test/java/com/blankj/subutil/util/ClipboardUtilsTest.java
[
clone.java
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/subutil/
subutil-
lib/src/main/java/com/blankj/subutil/util/CloneUtils.java
[
clone.test
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/subutil/
subutil-
lib/src/test/java/com/blankj/subutil/util/CloneUtilsTest.java
[
clone.java
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/subutil/lib/src/main/java/com/blankj/subutil/util/CloneUtils.java
[
clone.test
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/subutil/lib/src/test/java/com/blankj/subutil/util/CloneUtilsTest.java
[
coordinate.java
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/subutil/
subutil-
lib/src/main/java/com/blankj/subutil/util/CoordinateUtils.java
[
coordinate.test
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/subutil/
subutil-
lib/src/test/java/com/blankj/subutil/util/CoordinateUtilsTest.java
[
coordinate.java
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/subutil/lib/src/main/java/com/blankj/subutil/util/CoordinateUtils.java
[
coordinate.test
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/subutil/lib/src/test/java/com/blankj/subutil/util/CoordinateUtilsTest.java
[
flashlight.java
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/subutil/
subutil-
lib/src/main/java/com/blankj/subutil/util/FlashlightUtils.java
[
flashlight.java
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/subutil/lib/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/
subutil-
lib/src/main/java/com/blankj/subutil/util/GsonUtils.java
[
gson.test
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/subutil/
subutil-
lib/src/test/java/com/blankj/subutil/util/GsonUtilsTest.java
[
gson.java
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/subutil/lib/src/main/java/com/blankj/subutil/util/GsonUtils.java
[
gson.test
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/subutil/lib/src/test/java/com/blankj/subutil/util/GsonUtilsTest.java
[
location.java
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/subutil/
subutil-
lib/src/main/java/com/blankj/subutil/util/LocationUtils.java
[
location.java
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/subutil/lib/src/main/java/com/blankj/subutil/util/LocationUtils.java
[
location.demo
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/feature/sub/location/LocationActivity.java
[
pinyin.java
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/subutil/
subutil-
lib/src/main/java/com/blankj/subutil/util/PinyinUtils.java
[
pinyin.java
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/subutil/lib/src/main/java/com/blankj/subutil/util/PinyinUtils.java
[
pinyin.demo
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/feature/sub/pinyin/PinyinActivity.java
utilcode/README-CN.md
浏览文件 @
14ed64d2
...
...
@@ -2,7 +2,7 @@
Gradle:
```
groovy
implementation
'com.blankj:utilcode:1.22.
0
'
implementation
'com.blankj:utilcode:1.22.
1
'
```
...
...
@@ -88,6 +88,12 @@ getNavBarColor : 获取导航栏颜色
isSupportNavBar : 判断是否支持导航栏
```
*
### Bus 相关 ->
[
BusUtils.java
][
bus.java
]
->
[
README
][
bus.readme
]
```
post: 发送
```
*
### 磁盘缓存相关 ->
[
CacheDiskUtils.java
][
cacheDisk.java
]
->
[
Test
][
cacheDisk.test
]
```
getInstance : 获取缓存实例
...
...
@@ -816,6 +822,9 @@ getComments : 获取压缩文件中的注释链表
[
bar.java
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/lib/src/main/java/com/blankj/utilcode/util/BarUtils.java
[
bar.demo
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/feature/core/bar/BarActivity.java
[
bus.java
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/lib/src/main/java/com/blankj/utilcode/util/BusUtils.java
[
bus.readme
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/README-STATIC-BUS.md
[
cacheDisk.java
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDiskUtils.java
[
cacheDisk.test
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/lib/src/test/java/com/blankj/utilcode/util/CacheDiskUtilsTest.java
...
...
utilcode/README-STATIC-BUS.md
浏览文件 @
14ed64d2
...
...
@@ -2,7 +2,7 @@
## 关于
组件化开发会涉及到模块与模块之间相互调用,而各模块之间又是解偶的,所以就产生了很多路由方案,或者是把接口下沉到
`base`
组件中,但在
**[StaticBus][bus]**
看来,它们都略显复杂,
**[StaticBus][bus]**
只需调用一个静态函数便可自由穿梭于各个模块,就像一辆巴士,由于是基于静态函数来实现,所以称她为
**[StaticBus][bus]**
。
组件化开发会涉及到模块与模块之间相互调用,而各模块之间又是解偶的,所以就产生了很多路由方案,或者是把接口下沉到
`base`
组件中,但在
**[StaticBus][bus]**
看来,它们都略显复杂,
**[StaticBus][bus]**
只需调用一个静态函数便可自由穿梭于各个模块,就像一辆巴士,由于是基于静态函数来实现,所以称她为
**[StaticBus][bus]**
,如今已支持 Kotlin
。
## 基本使用
...
...
@@ -13,7 +13,7 @@
buildscript
{
dependencies
{
...
classpath
'com.blankj:bus-gradle-plugin:1.
3
'
classpath
'com.blankj:bus-gradle-plugin:1.
5
'
}
}
```
...
...
@@ -27,7 +27,7 @@ apply plugin: "com.blankj.bus"
给 base 模块添加
[
AndroidUtilCode
](
https://github.com/Blankj/AndroidUtilCode
)
依赖:
```
groovy
api
"com.blankj:utilcode:1.22.
0
"
api
"com.blankj:utilcode:1.22.
1
"
```
比如 module0 中存在的
`Module0Activity.java`
,我们通常都是在它内部写一个
`start`
函数来启动它,现在我们给它添加
`@BusUtils.Subscribe`
注解,并给注解的
`name`
赋唯一值,要注意,函数务必要
`public static`
哦:
...
...
@@ -63,6 +63,8 @@ boolean result = BusUtils.post("startModule0", context, "blankj", 18);
## 高级使用
参看本项目的组件化即可。
...
...
utilcode/README.md
浏览文件 @
14ed64d2
此差异已折叠。
点击以展开。
utilcode/lib/src/main/java/com/blankj/utilcode/util/BusUtils.java
浏览文件 @
14ed64d2
package
com.blankj.utilcode.util
;
import
android.util.Log
;
import
java.lang.annotation.ElementType
;
import
java.lang.annotation.Retention
;
import
java.lang.annotation.RetentionPolicy
;
...
...
@@ -18,9 +20,20 @@ import java.lang.annotation.Target;
*/
public
final
class
BusUtils
{
private
static
final
Object
NULL
=
new
Object
();
public
static
<
T
>
T
post
(
String
name
,
Object
...
objects
)
{
if
(
name
==
null
||
name
.
length
()
==
0
)
return
null
;
return
null
;
Object
o
=
injectShell
(
name
,
objects
);
if
(
NULL
.
equals
(
o
))
{
Log
.
e
(
"BusUtils"
,
"bus of <"
+
name
+
"> didn\'t exist."
);
return
null
;
}
return
(
T
)
o
;
}
private
static
Object
injectShell
(
String
name
,
Object
[]
objects
)
{
return
NULL
;
}
@Target
({
ElementType
.
METHOD
})
...
...
utilcode/lib/src/test/java/com/blankj/utilcode/util/BaseTest.java
浏览文件 @
14ed64d2
package
com.blankj.utilcode.util
;
import
android.support.annotation.Nullable
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.robolectric.RobolectricTestRunner
;
import
org.robolectric.RuntimeEnvironment
;
import
org.robolectric.annotation.Config
;
import
java.util.concurrent.TimeUnit
;
/**
* <pre>
* author: Blankj
...
...
@@ -28,24 +24,6 @@ public class BaseTest {
@Test
public
void
test
()
{
ThreadUtils
.
SimpleTask
<
String
>
task
=
new
ThreadUtils
.
SimpleTask
<
String
>()
{
@Nullable
@Override
public
String
doInBackground
()
throws
Throwable
{
boolean
fl
=
true
;
while
(
fl
)
{
System
.
out
.
println
(
"haha"
);
}
return
null
;
}
@Override
public
void
onSuccess
(
@Nullable
String
result
)
{
}
};
ThreadUtils
.
executeByCpuWithDelay
(
task
,
20
,
TimeUnit
.
SECONDS
);
// task.cancel();
// ThreadUtils.cancel(task);
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录