Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
DiDi
Booster
提交
7d0e014f
B
Booster
项目概览
DiDi
/
Booster
通知
31
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
B
Booster
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
7d0e014f
编写于
4月 30, 2019
作者:
J
johnsonlee
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Commit optimizations for shared preferences
上级
10e6c8ca
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
126 addition
and
1 deletion
+126
-1
booster-android-instrument-shared-preferences/build.gradle
booster-android-instrument-shared-preferences/build.gradle
+6
-0
booster-android-instrument-shared-preferences/src/main/java/com/didiglobal/booster/instrument/ShadowEditor.java
.../java/com/didiglobal/booster/instrument/ShadowEditor.java
+22
-0
booster-transform-all/build.gradle
booster-transform-all/build.gradle
+1
-0
booster-transform-shared-preferences/build.gradle
booster-transform-shared-preferences/build.gradle
+11
-0
booster-transform-shared-preferences/src/main/kotlin/com/didiglobal/booster/transform/sharedpreferences/SharedPreferencesEditorTransformer.kt
...m/sharedpreferences/SharedPreferencesEditorTransformer.kt
+64
-0
booster-transform-shared-preferences/src/main/kotlin/com/didiglobal/booster/transform/sharedpreferences/SharedPreferencesEditorVariantProcessor.kt
...redpreferences/SharedPreferencesEditorVariantProcessor.kt
+19
-0
settings.gradle
settings.gradle
+3
-1
未找到文件。
booster-android-instrument-shared-preferences/build.gradle
0 → 100644
浏览文件 @
7d0e014f
sourceCompatibility
=
JavaVersion
.
VERSION_1_7
targetCompatibility
=
JavaVersion
.
VERSION_1_7
dependencies
{
compileOnly
project
(
':booster-android-api'
)
}
booster-android-instrument-shared-preferences/src/main/java/com/didiglobal/booster/instrument/ShadowEditor.java
0 → 100644
浏览文件 @
7d0e014f
package
com.didiglobal.booster.instrument
;
import
android.content.SharedPreferences
;
import
android.os.AsyncTask
;
import
android.os.Looper
;
public
class
ShadowEditor
{
public
static
void
apply
(
final
SharedPreferences
.
Editor
editor
)
{
if
(
Looper
.
myLooper
()
==
Looper
.
getMainLooper
())
{
AsyncTask
.
SERIAL_EXECUTOR
.
execute
(
new
Runnable
()
{
@Override
public
void
run
()
{
editor
.
commit
();
}
});
}
else
{
editor
.
commit
();
}
}
}
booster-transform-all/build.gradle
浏览文件 @
7d0e014f
dependencies
{
compile
project
(
':booster-transform-lint'
)
compile
project
(
':booster-transform-shared-preferences'
)
compile
project
(
':booster-transform-shrink'
)
compile
project
(
':booster-transform-toast'
)
compile
project
(
':booster-transform-usage'
)
...
...
booster-transform-shared-preferences/build.gradle
0 → 100644
浏览文件 @
7d0e014f
apply
from:
'../gradle/booster.gradle'
dependencies
{
kapt
"com.google.auto.service:auto-service:1.0-rc4"
implementation
project
(
':booster-android-gradle-api'
)
implementation
project
(
':booster-gradle-base'
)
implementation
project
(
':booster-task-spi'
)
implementation
project
(
':booster-transform-asm'
)
compileOnly
'com.android.tools.build:gradle:3.0.0'
testCompileOnly
'com.android.tools.build:gradle:3.0.0'
}
booster-transform-shared-preferences/src/main/kotlin/com/didiglobal/booster/transform/sharedpreferences/SharedPreferencesEditorTransformer.kt
0 → 100644
浏览文件 @
7d0e014f
package
com.didiglobal.booster.transform.sharedpreferences
import
com.didiglobal.booster.kotlinx.GREEN
import
com.didiglobal.booster.kotlinx.RESET
import
com.didiglobal.booster.kotlinx.asIterable
import
com.didiglobal.booster.transform.TransformContext
import
com.didiglobal.booster.transform.asm.ClassTransformer
import
com.google.auto.service.AutoService
import
jdk.internal.org.objectweb.asm.Opcodes
import
org.objectweb.asm.tree.ClassNode
import
org.objectweb.asm.tree.MethodInsnNode
import
org.objectweb.asm.tree.MethodNode
/**
* Represents a transformer for *SharedPreferences* bug fixing
*
* @author johnsonlee
*/
@AutoService
(
ClassTransformer
::
class
)
class
SharedPreferencesEditorTransformer
:
ClassTransformer
{
override
fun
transform
(
context
:
TransformContext
,
klass
:
ClassNode
):
ClassNode
{
if
(
klass
.
name
==
SHADOW_EDITOR
)
{
return
klass
}
klass
.
methods
.
forEach
{
method
->
method
.
instructions
?.
iterator
()
?.
asIterable
()
?.
filterIsInstance
(
MethodInsnNode
::
class
.
java
)
?.
filter
{
it
.
opcode
==
Opcodes
.
INVOKEINTERFACE
&&
it
.
owner
==
SHARED_PREFERENCES_EDITOR
}
?.
forEach
{
invoke
->
when
(
"${invoke.name}${invoke.desc}"
)
{
"commit()Z"
->
{
// if the return value of commit() does not used
// use asynchronous commit() instead
if
(
Opcodes
.
POP
==
invoke
.
next
?.
opcode
)
{
optimize
(
invoke
,
klass
,
method
)
method
.
instructions
.
remove
(
invoke
.
next
)
}
}
"apply()V"
->
{
optimize
(
invoke
,
klass
,
method
)
}
}
}
}
return
klass
}
}
private
fun
optimize
(
invoke
:
MethodInsnNode
,
klass
:
ClassNode
,
method
:
MethodNode
)
{
println
(
" * $GREEN${invoke.owner}.${invoke.name}${invoke.desc}$RESET => $GREEN$SHADOW_EDITOR.apply(L$SHARED_PREFERENCES_EDITOR;)V$RESET: ${klass.name}.${method.name}${method.desc}"
)
invoke
.
apply
{
itf
=
false
owner
=
SHADOW_EDITOR
name
=
"apply"
opcode
=
Opcodes
.
INVOKESTATIC
desc
=
"(L$SHARED_PREFERENCES_EDITOR;)V"
}
}
private
const
val
SHARED_PREFERENCES_EDITOR
=
"android/content/SharedPreferences\$Editor"
private
const
val
SHADOW_EDITOR
=
"com/didiglobal/booster/instrument/ShadowEditor"
booster-transform-shared-preferences/src/main/kotlin/com/didiglobal/booster/transform/sharedpreferences/SharedPreferencesEditorVariantProcessor.kt
0 → 100644
浏览文件 @
7d0e014f
package
com.didiglobal.booster.transform.sharedpreferences
import
com.android.build.gradle.api.BaseVariant
import
com.android.build.gradle.api.LibraryVariant
import
com.didiglobal.booster.gradle.scope
import
com.didiglobal.booster.task.spi.VariantProcessor
import
com.didiglobal.booster.transform.shared.preferences.Build
import
com.google.auto.service.AutoService
@AutoService
(
VariantProcessor
::
class
)
class
SharedPreferencesEditorVariantProcessor
:
VariantProcessor
{
override
fun
process
(
variant
:
BaseVariant
)
{
if
(
variant
!
is
LibraryVariant
)
{
variant
.
scope
.
globalScope
.
project
.
dependencies
.
add
(
"implementation"
,
"${Build.GROUP}:booster-android-instrument-shared-preferences:${Build.VERSION}"
)
}
}
}
settings.gradle
浏览文件 @
7d0e014f
include
':booster-aapt2'
include
':booster-android-api'
include
':booster-android-instrument'
include
':booster-android-instrument-shared-preferences'
include
':booster-android-instrument-toast'
include
':booster-android-gradle-api'
include
':booster-android-gradle-v3_0'
...
...
@@ -15,10 +16,11 @@ include ':booster-task-permission'
include
':booster-task-spi'
include
':booster-transform-all'
include
':booster-transform-asm'
include
':booster-transform-toast'
include
':booster-transform-lint'
include
':booster-transform-spi'
include
':booster-transform-shared-preferences'
include
':booster-transform-shrink'
include
':booster-transform-toast'
include
':booster-transform-usage'
include
':booster-transform-util'
include
':booster-kotlinx'
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录