Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
DiDi
DoraemonKit
提交
eed2ab30
D
DoraemonKit
项目概览
DiDi
/
DoraemonKit
10 个月 前同步成功
通知
166
Star
19623
Fork
3062
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
DoraemonKit
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
eed2ab30
编写于
4月 26, 2020
作者:
J
jackjintai
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'feature/platform' into feature/newfunction_from_platform
上级
43572094
467872e1
变更
14
隐藏空白更改
内联
并排
Showing
14 changed file
with
395 addition
and
16 deletion
+395
-16
Android/doraemonkit-plugin/src/main/groovy/com/didichuxing/doraemonkit/plugin/bytecode/DokitCommClassAdapter.java
...ng/doraemonkit/plugin/bytecode/DokitCommClassAdapter.java
+13
-4
Android/doraemonkit-plugin/src/main/groovy/com/didichuxing/doraemonkit/plugin/bytecode/method/comm/PlatformNullConsHttpMethodAdapter.java
...tecode/method/comm/PlatformNullConsHttpMethodAdapter.java
+10
-2
Android/doraemonkit-plugin/src/main/groovy/com/didichuxing/doraemonkit/plugin/bytecode/method/comm/PlatformOneParamHttpMethodAdapter.java
...tecode/method/comm/PlatformOneParamHttpMethodAdapter.java
+27
-0
Android/doraemonkit-rpc/src/main/java/com/didichuxing/doraemonkit/kit/network/rpc/RpcMockInterceptor.java
...uxing/doraemonkit/kit/network/rpc/RpcMockInterceptor.java
+2
-2
Android/doraemonkit-rpc/src/main/java/com/didichuxing/doraemonkit/kit/network/rpc/RpcWeakNetworkInterceptor.java
...oraemonkit/kit/network/rpc/RpcWeakNetworkInterceptor.java
+100
-0
Android/doraemonkit-rpc/src/main/java/com/didichuxing/doraemonkit/kit/weaknetwork/RpcSpeedLimitRequestBody.java
...doraemonkit/kit/weaknetwork/RpcSpeedLimitRequestBody.java
+79
-0
Android/doraemonkit-rpc/src/main/java/com/didichuxing/doraemonkit/kit/weaknetwork/RpcSpeedLimitResponseBody.java
...oraemonkit/kit/weaknetwork/RpcSpeedLimitResponseBody.java
+97
-0
Android/doraemonkit-rpc/src/main/java/com/didichuxing/foundation/net/rpc/http/PlatformHttpHook.java
...didichuxing/foundation/net/rpc/http/PlatformHttpHook.java
+46
-2
Android/doraemonkit/src/main/java/com/didichuxing/doraemonkit/aop/OkHttpHook.java
...main/java/com/didichuxing/doraemonkit/aop/OkHttpHook.java
+0
-1
Android/doraemonkit/src/main/java/com/didichuxing/doraemonkit/config/DokitSwitchConfig.java
...com/didichuxing/doraemonkit/config/DokitSwitchConfig.java
+19
-0
Android/doraemonkit/src/main/java/com/didichuxing/doraemonkit/config/PerformanceMemoryInfoConfig.java
...uxing/doraemonkit/config/PerformanceMemoryInfoConfig.java
+1
-1
Android/doraemonkit/src/main/java/com/didichuxing/doraemonkit/config/ViewCheckConfig.java
...a/com/didichuxing/doraemonkit/config/ViewCheckConfig.java
+0
-2
Android/doraemonkit/src/main/java/com/didichuxing/doraemonkit/kit/network/okhttp/interceptor/DoraemonWeakNetworkInterceptor.java
...rk/okhttp/interceptor/DoraemonWeakNetworkInterceptor.java
+0
-1
Android/doraemonkit/src/main/java/com/didichuxing/doraemonkit/okgo/DokitOkGo.java
...main/java/com/didichuxing/doraemonkit/okgo/DokitOkGo.java
+1
-1
未找到文件。
Android/doraemonkit-plugin/src/main/groovy/com/didichuxing/doraemonkit/plugin/bytecode/DokitCommClassAdapter.java
浏览文件 @
eed2ab30
...
...
@@ -6,7 +6,8 @@ import com.didichuxing.doraemonkit.plugin.bytecode.method.comm.BaiduLocationMeth
import
com.didichuxing.doraemonkit.plugin.bytecode.method.comm.FlagMethodAdapter
;
import
com.didichuxing.doraemonkit.plugin.bytecode.method.comm.OkHttpNullConsMethodAdapter
;
import
com.didichuxing.doraemonkit.plugin.bytecode.method.comm.OkHttpOneParamConsMethodAdapter
;
import
com.didichuxing.doraemonkit.plugin.bytecode.method.comm.PlatformHttpMethodAdapter
;
import
com.didichuxing.doraemonkit.plugin.bytecode.method.comm.PlatformNullConsHttpMethodAdapter
;
import
com.didichuxing.doraemonkit.plugin.bytecode.method.comm.PlatformOneParamHttpMethodAdapter
;
import
com.didichuxing.doraemonkit.plugin.bytecode.method.comm.TencentLocationMethodAdapter
;
import
com.didichuxing.doraemonkit.plugin.bytecode.method.comm.TencentLocationSingleMethodAdapter
;
...
...
@@ -129,11 +130,19 @@ public final class DokitCommClassAdapter extends ClassVisitor {
return
mv
==
null
?
null
:
new
OkHttpOneParamConsMethodAdapter
(
mv
,
access
,
methodName
,
desc
);
}
//didi平台端 网络 拦截器字节码替换
if
(
className
.
equals
(
"didihttp/DidiHttpClient$Builder"
)
&&
methodName
.
equals
(
"<init>"
))
{
//didi平台端 网络 空构造函数
if
(
className
.
equals
(
"didihttp/DidiHttpClient$Builder"
)
&&
methodName
.
equals
(
"<init>"
)
&&
getParamsSize
(
desc
)
==
0
)
{
//创建MethodVisitor代理
log
(
className
,
access
,
methodName
,
desc
,
signature
);
return
mv
==
null
?
null
:
new
PlatformNullConsHttpMethodAdapter
(
access
,
desc
,
mv
);
}
//didi平台端 网络 一个参数的构造函数
if
(
className
.
equals
(
"didihttp/DidiHttpClient$Builder"
)
&&
methodName
.
equals
(
"<init>"
)
&&
getParamsSize
(
desc
)
==
1
)
{
//创建MethodVisitor代理
log
(
className
,
access
,
methodName
,
desc
,
signature
);
return
mv
==
null
?
null
:
new
Platform
HttpMethodAdapter
(
access
,
desc
,
mv
);
return
mv
==
null
?
null
:
new
Platform
OneParamHttpMethodAdapter
(
mv
,
access
,
methodName
,
desc
);
}
//app启动hook点 onCreate()函数 兼容MultiDex
// if (!StringUtils.isEmpty(superName) && (superName.equals("android/app/Application") || superName.equals("android/support/multidex/MultiDexApplication")) && methodName.equals("onCreate") && desc.equals("()V")) {
...
...
Android/doraemonkit-plugin/src/main/groovy/com/didichuxing/doraemonkit/plugin/bytecode/method/comm/PlatformHttpMethodAdapter.java
→
Android/doraemonkit-plugin/src/main/groovy/com/didichuxing/doraemonkit/plugin/bytecode/method/comm/Platform
NullCons
HttpMethodAdapter.java
浏览文件 @
eed2ab30
...
...
@@ -10,10 +10,10 @@ import org.objectweb.asm.commons.LocalVariablesSorter;
* Only weave okhttp3/OkHttpClient's init method
* Created by Quinn on 09/09/2018.
*/
public
final
class
PlatformHttpMethodAdapter
extends
LocalVariablesSorter
implements
Opcodes
{
public
final
class
Platform
NullCons
HttpMethodAdapter
extends
LocalVariablesSorter
implements
Opcodes
{
public
PlatformHttpMethodAdapter
(
int
access
,
String
desc
,
MethodVisitor
mv
)
{
public
Platform
NullCons
HttpMethodAdapter
(
int
access
,
String
desc
,
MethodVisitor
mv
)
{
super
(
Opcodes
.
ASM7
,
access
,
desc
,
mv
);
}
...
...
@@ -27,6 +27,14 @@ public final class PlatformHttpMethodAdapter extends LocalVariablesSorter implem
mv
.
visitFieldInsn
(
GETSTATIC
,
"com/didichuxing/foundation/net/rpc/http/PlatformHttpHook"
,
"globalInterceptors"
,
"Ljava/util/List;"
);
mv
.
visitMethodInsn
(
INVOKEINTERFACE
,
"java/util/List"
,
"addAll"
,
"(Ljava/util/Collection;)Z"
,
true
);
mv
.
visitInsn
(
POP
);
//插入NetworkInterceptor 网络拦截器
mv
.
visitVarInsn
(
ALOAD
,
0
);
mv
.
visitFieldInsn
(
GETFIELD
,
"didihttp/DidiHttpClient$Builder"
,
"networkInterceptors"
,
"Ljava/util/List;"
);
mv
.
visitFieldInsn
(
GETSTATIC
,
"com/didichuxing/foundation/net/rpc/http/PlatformHttpHook"
,
"globalNetworkInterceptors"
,
"Ljava/util/List;"
);
mv
.
visitMethodInsn
(
INVOKEINTERFACE
,
"java/util/List"
,
"addAll"
,
"(Ljava/util/Collection;)Z"
,
true
);
mv
.
visitInsn
(
POP
);
}
super
.
visitInsn
(
opcode
);
}
...
...
Android/doraemonkit-plugin/src/main/groovy/com/didichuxing/doraemonkit/plugin/bytecode/method/comm/PlatformOneParamHttpMethodAdapter.java
0 → 100644
浏览文件 @
eed2ab30
package
com.didichuxing.doraemonkit.plugin.bytecode.method.comm
;
import
org.objectweb.asm.MethodVisitor
;
import
org.objectweb.asm.Opcodes
;
import
org.objectweb.asm.commons.AdviceAdapter
;
import
org.objectweb.asm.commons.LocalVariablesSorter
;
/**
* Only weave didihttp/DidiHttpClient's init method
* Created by Quinn on 09/09/2018.
*/
public
final
class
PlatformOneParamHttpMethodAdapter
extends
AdviceAdapter
{
public
PlatformOneParamHttpMethodAdapter
(
MethodVisitor
methodVisitor
,
int
access
,
String
methodName
,
String
descriptor
)
{
super
(
Opcodes
.
ASM7
,
methodVisitor
,
access
,
methodName
,
descriptor
);
}
@Override
protected
void
onMethodExit
(
int
opcode
)
{
super
.
onMethodExit
(
opcode
);
mv
.
visitVarInsn
(
ALOAD
,
0
);
mv
.
visitVarInsn
(
ALOAD
,
1
);
mv
.
visitMethodInsn
(
INVOKESTATIC
,
"com/didichuxing/foundation/net/rpc/http/PlatformHttpHook"
,
"performDidiHttpOneParamBuilderInit"
,
"(Ljava/lang/Object;Ljava/lang/Object;)V"
,
false
);
}
}
Android/doraemonkit-rpc/src/main/java/com/didichuxing/doraemonkit/kit/network/rpc/RpcMockInterceptor.java
浏览文件 @
eed2ab30
...
...
@@ -55,8 +55,8 @@ public class RpcMockInterceptor implements RpcInterceptor<HttpRpcRequest, HttpRp
String
queries
=
url
.
query
();
String
jsonQuery
=
transformQuery
(
queries
);
String
jsonRequestBody
=
transformRequestBody
(
oldRequest
.
getEntity
());
LogHelper
.
i
(
TAG
,
"realJsonQuery===>"
+
jsonQuery
);
LogHelper
.
i
(
TAG
,
"realJsonRequestBody===>"
+
jsonRequestBody
);
//
LogHelper.i(TAG, "realJsonQuery===>" + jsonQuery);
//
LogHelper.i(TAG, "realJsonRequestBody===>" + jsonRequestBody);
String
interceptMatchedId
=
DokitDbManager
.
getInstance
().
isMockMatched
(
path
,
jsonQuery
,
jsonRequestBody
,
DokitDbManager
.
MOCK_API_INTERCEPT
,
DokitDbManager
.
FROM_SDK_DIDI
);
String
templateMatchedId
=
DokitDbManager
.
getInstance
().
isMockMatched
(
path
,
jsonQuery
,
jsonRequestBody
,
DokitDbManager
.
MOCK_API_TEMPLATE
,
DokitDbManager
.
FROM_SDK_DIDI
);
...
...
Android/doraemonkit-rpc/src/main/java/com/didichuxing/doraemonkit/kit/network/rpc/RpcWeakNetworkInterceptor.java
0 → 100644
浏览文件 @
eed2ab30
package
com.didichuxing.doraemonkit.kit.network.rpc
;
import
android.os.SystemClock
;
import
com.didichuxing.doraemonkit.kit.weaknetwork.RpcSpeedLimitRequestBody
;
import
com.didichuxing.doraemonkit.kit.weaknetwork.RpcSpeedLimitResponseBody
;
import
com.didichuxing.doraemonkit.kit.weaknetwork.WeakNetworkManager
;
import
java.io.IOException
;
import
didihttp.HttpUrl
;
import
didihttp.Interceptor
;
import
didihttp.Request
;
import
didihttp.RequestBody
;
import
didihttp.Response
;
import
didihttp.ResponseBody
;
/**
* 用于模拟弱网的拦截器
* <p>
* Created by xiandanin on 2019-05-09 16:29
*
* @author didi
*/
public
class
RpcWeakNetworkInterceptor
implements
Interceptor
{
private
static
final
String
TAG
=
"DoraemonWeakNetworkInterceptor"
;
@Override
public
Response
intercept
(
Chain
chain
)
throws
IOException
{
if
(!
WeakNetworkManager
.
get
().
isActive
())
{
Request
request
=
chain
.
request
();
return
chain
.
proceed
(
request
);
}
final
int
type
=
WeakNetworkManager
.
get
().
getType
();
final
HttpUrl
url
=
chain
.
request
().
url
();
switch
(
type
)
{
case
WeakNetworkManager
.
TYPE_TIMEOUT
:
//超时
return
simulateTimeOut
(
chain
);
case
WeakNetworkManager
.
TYPE_SPEED_LIMIT
:
//限速
return
simulateSpeedLimit
(
chain
);
default
:
//断网
return
simulateOffNetwork
(
chain
);
}
}
/**
* 模拟断网
*/
public
Response
simulateOffNetwork
(
Interceptor
.
Chain
chain
)
throws
IOException
{
final
Response
response
=
chain
.
proceed
(
chain
.
request
());
ResponseBody
responseBody
=
ResponseBody
.
create
(
response
.
body
().
contentType
(),
""
);
Response
newResponse
=
response
.
newBuilder
()
.
code
(
400
)
.
message
(
String
.
format
(
"Unable to resolve host %s: No address associated with hostname"
,
chain
.
request
().
url
().
host
()))
.
body
(
responseBody
)
.
build
();
return
newResponse
;
}
/**
* 模拟超时
*
* @param chain url
*/
public
Response
simulateTimeOut
(
Interceptor
.
Chain
chain
)
throws
IOException
{
SystemClock
.
sleep
(
WeakNetworkManager
.
get
().
getTimeOutMillis
());
final
Response
response
=
chain
.
proceed
(
chain
.
request
());
ResponseBody
responseBody
=
ResponseBody
.
create
(
response
.
body
().
contentType
(),
""
);
Response
newResponse
=
response
.
newBuilder
()
.
code
(
400
)
.
message
(
String
.
format
(
"failed to connect to %s after %dms"
,
chain
.
request
().
url
().
host
(),
WeakNetworkManager
.
get
().
getTimeOutMillis
()))
.
body
(
responseBody
)
.
build
();
return
newResponse
;
}
/**
* 限速
*/
public
Response
simulateSpeedLimit
(
Interceptor
.
Chain
chain
)
throws
IOException
{
Request
request
=
chain
.
request
();
final
RequestBody
body
=
request
.
body
();
if
(
body
!=
null
)
{
//大于0使用限速的body 否则使用原始body
final
RequestBody
requestBody
=
WeakNetworkManager
.
get
().
getRequestSpeed
()
>
0
?
new
RpcSpeedLimitRequestBody
(
WeakNetworkManager
.
get
().
getRequestSpeed
(),
body
)
:
body
;
request
=
request
.
newBuilder
().
method
(
request
.
method
(),
requestBody
).
build
();
}
final
Response
response
=
chain
.
proceed
(
request
);
//大于0使用限速的body 否则使用原始body
final
ResponseBody
responseBody
=
response
.
body
();
final
ResponseBody
newResponseBody
=
WeakNetworkManager
.
get
().
getResponseSpeed
()
>
0
?
new
RpcSpeedLimitResponseBody
(
WeakNetworkManager
.
get
().
getResponseSpeed
(),
responseBody
)
:
responseBody
;
return
response
.
newBuilder
().
body
(
newResponseBody
).
build
();
}
}
Android/doraemonkit-rpc/src/main/java/com/didichuxing/doraemonkit/kit/weaknetwork/RpcSpeedLimitRequestBody.java
0 → 100644
浏览文件 @
eed2ab30
package
com.didichuxing.doraemonkit.kit.weaknetwork
;
import
android.os.SystemClock
;
import
java.io.IOException
;
import
didihttp.MediaType
;
import
didihttp.RequestBody
;
import
okio.Buffer
;
import
okio.BufferedSink
;
import
okio.ForwardingSink
;
import
okio.Sink
;
/**
* Created by xiandanin on 2019-05-09 18:35
*/
public
class
RpcSpeedLimitRequestBody
extends
RequestBody
{
private
long
mSpeedByte
;
//b/s
private
RequestBody
mRequestBody
;
private
BufferedSink
mBufferedSink
;
public
RpcSpeedLimitRequestBody
(
long
speed
,
RequestBody
source
)
{
this
.
mRequestBody
=
source
;
this
.
mSpeedByte
=
speed
*
1024
;
//转成字节
}
@Override
public
MediaType
contentType
()
{
return
mRequestBody
.
contentType
();
}
@Override
public
long
contentLength
()
throws
IOException
{
return
mRequestBody
.
contentLength
();
}
@Override
public
void
writeTo
(
BufferedSink
sink
)
throws
IOException
{
if
(
mBufferedSink
==
null
)
{
//mBufferedSink = Okio.buffer(sink(sink));
//默认8K 精确到1K
mBufferedSink
=
new
ByteCountBufferedSink
(
sink
(
sink
),
1024L
);
}
mRequestBody
.
writeTo
(
mBufferedSink
);
mBufferedSink
.
close
();
}
private
Sink
sink
(
final
BufferedSink
sink
)
{
return
new
ForwardingSink
(
sink
)
{
private
long
cacheTotalBytesWritten
;
private
long
cacheStartTime
;
@Override
public
void
write
(
Buffer
source
,
long
byteCount
)
throws
IOException
{
if
(
cacheStartTime
==
0
)
{
cacheStartTime
=
SystemClock
.
uptimeMillis
();
}
super
.
write
(
source
,
byteCount
);
cacheTotalBytesWritten
+=
byteCount
;
long
endTime
=
SystemClock
.
uptimeMillis
()
-
cacheStartTime
;
//如果在一秒内
if
(
endTime
<=
1000L
)
{
//大小就超出了限制
if
(
cacheTotalBytesWritten
>=
mSpeedByte
)
{
long
sleep
=
1000L
-
endTime
;
SystemClock
.
sleep
(
sleep
);
//重置计算
cacheStartTime
=
0L
;
cacheTotalBytesWritten
=
0L
;
}
}
}
};
}
}
Android/doraemonkit-rpc/src/main/java/com/didichuxing/doraemonkit/kit/weaknetwork/RpcSpeedLimitResponseBody.java
0 → 100644
浏览文件 @
eed2ab30
package
com.didichuxing.doraemonkit.kit.weaknetwork
;
import
android.os.SystemClock
;
import
java.io.IOException
;
import
didihttp.MediaType
;
import
didihttp.ResponseBody
;
import
okio.Buffer
;
import
okio.BufferedSource
;
import
okio.ForwardingSource
;
import
okio.Okio
;
import
okio.Source
;
/**
* Created by xiandanin on 2019-05-09 18:35
*/
public
class
RpcSpeedLimitResponseBody
extends
ResponseBody
{
private
static
String
TAG
=
"SpeedLimitResponseBody"
;
/**
* 限速字节
*/
private
long
mSpeedByte
;
private
ResponseBody
mResponseBody
;
private
BufferedSource
mBufferedSource
;
public
RpcSpeedLimitResponseBody
(
long
speed
,
ResponseBody
source
)
{
this
.
mResponseBody
=
source
;
//转成字节
this
.
mSpeedByte
=
speed
*
1024L
;
}
@Override
public
MediaType
contentType
()
{
return
mResponseBody
.
contentType
();
}
@Override
public
long
contentLength
()
{
return
mResponseBody
.
contentLength
();
}
@Override
public
BufferedSource
source
()
{
if
(
mBufferedSource
==
null
)
{
mBufferedSource
=
Okio
.
buffer
(
source
(
mResponseBody
.
source
()));
}
return
mBufferedSource
;
}
private
Source
source
(
Source
source
)
{
return
new
ForwardingSource
(
source
)
{
/**
* 如果小于1s 会重置
*/
private
long
cacheTotalBytesRead
;
/**
* 分片读取1024个字节开始时间 小于1s会重置
*/
private
long
cacheStartTime
;
@Override
public
long
read
(
Buffer
sink
,
long
byteCount
)
throws
IOException
{
if
(
cacheStartTime
==
0
)
{
cacheStartTime
=
SystemClock
.
uptimeMillis
();
}
//默认8K 精确到1K -1代表已经读取完毕
long
bytesRead
=
super
.
read
(
sink
.
buffer
(),
1024L
);
if
(
bytesRead
==
-
1
)
{
return
bytesRead
;
}
//一般为1024
cacheTotalBytesRead
=
cacheTotalBytesRead
+
bytesRead
;
/**
* 判断当前请求累计消耗的时间 即相当于读取1024个字节所需要的时间
*/
long
costTime
=
SystemClock
.
uptimeMillis
()
-
cacheStartTime
;
//如果每次分片读取时间小于ls sleep 延迟时间
if
(
costTime
<=
1000L
)
{
if
(
cacheTotalBytesRead
>=
mSpeedByte
)
{
long
sleep
=
1000L
-
costTime
;
SystemClock
.
sleep
(
sleep
);
//重置计算
cacheStartTime
=
0L
;
cacheTotalBytesRead
=
0L
;
}
}
return
bytesRead
;
}
};
}
}
Android/doraemonkit-rpc/src/main/java/com/didichuxing/foundation/net/rpc/http/PlatformHttpHook.java
浏览文件 @
eed2ab30
package
com.didichuxing.foundation.net.rpc.http
;
import
android.util.Log
;
import
com.blankj.utilcode.util.ReflectUtils
;
import
com.didichuxing.doraemonkit.kit.network.rpc.RpcMockInterceptor
;
import
com.didichuxing.doraemonkit.kit.network.rpc.RpcMonitorInterceptor
;
import
com.didichuxing.doraemonkit.kit.network.rpc.RpcWeakNetworkInterceptor
;
import
java.util.ArrayList
;
import
java.util.LinkedHashSet
;
import
java.util.List
;
import
didihttp.DidiHttpClient
;
import
didihttp.Interceptor
;
...
...
@@ -20,6 +26,7 @@ import didihttp.Interceptor;
*/
public
class
PlatformHttpHook
{
public
static
List
<
Interceptor
>
globalInterceptors
=
new
ArrayList
<>();
public
static
List
<
Interceptor
>
globalNetworkInterceptors
=
new
ArrayList
<>();
private
static
boolean
IS_INSTALL
=
false
;
public
static
void
installInterceptor
()
{
...
...
@@ -28,13 +35,50 @@ public class PlatformHttpHook {
}
try
{
//可能存在用户没有引入滴滴内部网络库的情况
OkHttpRpc
.
OkHttpRpcInterceptor
rpcMockInterceptor
=
new
OkHttpRpc
.
OkHttpRpcInterceptor
(
(
new
RpcMockInterceptor
()
));
OkHttpRpc
.
OkHttpRpcInterceptor
rpcMonitorInterceptor
=
new
OkHttpRpc
.
OkHttpRpcInterceptor
(
(
new
RpcMonitorInterceptor
()
));
OkHttpRpc
.
OkHttpRpcInterceptor
rpcMockInterceptor
=
new
OkHttpRpc
.
OkHttpRpcInterceptor
(
new
RpcMockInterceptor
(
));
OkHttpRpc
.
OkHttpRpcInterceptor
rpcMonitorInterceptor
=
new
OkHttpRpc
.
OkHttpRpcInterceptor
(
new
RpcMonitorInterceptor
(
));
globalInterceptors
.
add
(
rpcMockInterceptor
);
globalInterceptors
.
add
(
rpcMonitorInterceptor
);
Interceptor
weakNetworkInterceptor
=
new
RpcWeakNetworkInterceptor
();
globalNetworkInterceptors
.
add
(
weakNetworkInterceptor
);
IS_INSTALL
=
true
;
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
/**
* @param builder 真实的对象为DidiHttpClient.Builder
* @param didiHttpClient 真实的对象为DidiHttpClient
*/
public
static
void
performDidiHttpOneParamBuilderInit
(
Object
builder
,
Object
didiHttpClient
)
{
try
{
if
(
builder
instanceof
DidiHttpClient
.
Builder
)
{
DidiHttpClient
.
Builder
localBuild
=
(
DidiHttpClient
.
Builder
)
builder
;
List
<
Interceptor
>
interceptors
=
removeDuplicate
(
localBuild
.
interceptors
());
List
<
Interceptor
>
networkInterceptors
=
removeDuplicate
(
localBuild
.
networkInterceptors
());
ReflectUtils
.
reflect
(
localBuild
).
field
(
"interceptors"
,
interceptors
);
ReflectUtils
.
reflect
(
localBuild
).
field
(
"networkInterceptors"
,
networkInterceptors
);
//Log.i("Doraemon", "====performDidiHttpOneParamBuilderInit===");
}
}
catch
(
Exception
e
)
{
Log
.
i
(
"Doraemon"
,
""
+
e
.
getMessage
());
}
}
/**
* 保证顺序并去重
*
* @param list
* @return
*/
private
static
List
<
Interceptor
>
removeDuplicate
(
List
<
Interceptor
>
list
)
{
//保证顺序并去重
LinkedHashSet
h
=
new
LinkedHashSet
<
Interceptor
>(
list
);
list
.
clear
();
list
.
addAll
(
h
);
return
list
;
}
}
Android/doraemonkit/src/main/java/com/didichuxing/doraemonkit/aop/OkHttpHook.java
浏览文件 @
eed2ab30
...
...
@@ -9,7 +9,6 @@ import com.didichuxing.doraemonkit.kit.network.okhttp.interceptor.LargePictureIn
import
com.didichuxing.doraemonkit.kit.network.okhttp.interceptor.MockInterceptor
;
import
java.util.ArrayList
;
import
java.util.HashSet
;
import
java.util.LinkedHashSet
;
import
java.util.List
;
...
...
Android/doraemonkit/src/main/java/com/didichuxing/doraemonkit/config/DokitSwitchConfig.java
0 → 100644
浏览文件 @
eed2ab30
package
com.didichuxing.doraemonkit.config
;
/**
* ================================================
* 作 者:jint(金台)
* 版 本:1.0
* 创建日期:2020/4/26-14:35
* 描 述:Dokit 功能开关配置
* 修订历史:
* ================================================
*/
public
class
DokitSwitchConfig
{
private
boolean
alignRule
;
private
boolean
largeImg
;
private
boolean
log
;
private
boolean
gps
;
private
boolean
appHealth
;
private
boolean
crash
;
}
Android/doraemonkit/src/main/java/com/didichuxing/doraemonkit/config/PerformanceMemoryInfoConfig.java
浏览文件 @
eed2ab30
...
...
@@ -2,7 +2,7 @@ package com.didichuxing.doraemonkit.config;
/**
* Created by jintai on 2019/10/10.
* 将配置信息保存在内存中
* 将配置信息保存在内存中
不需要持久化保存
*/
public
class
PerformanceMemoryInfoConfig
{
...
...
Android/doraemonkit/src/main/java/com/didichuxing/doraemonkit/config/ViewCheckConfig.java
浏览文件 @
eed2ab30
package
com.didichuxing.doraemonkit.config
;
import
android.content.Context
;
import
com.didichuxing.doraemonkit.constant.SharedPrefsKey
;
import
com.didichuxing.doraemonkit.util.SharedPrefsUtil
;
...
...
Android/doraemonkit/src/main/java/com/didichuxing/doraemonkit/kit/network/okhttp/interceptor/DoraemonWeakNetworkInterceptor.java
浏览文件 @
eed2ab30
...
...
@@ -30,7 +30,6 @@ public class DoraemonWeakNetworkInterceptor implements Interceptor {
return
chain
.
proceed
(
request
);
}
final
int
type
=
WeakNetworkManager
.
get
().
getType
();
final
HttpUrl
url
=
chain
.
request
().
url
();
switch
(
type
)
{
case
WeakNetworkManager
.
TYPE_TIMEOUT
:
//超时
...
...
Android/doraemonkit/src/main/java/com/didichuxing/doraemonkit/okgo/DokitOkGo.java
浏览文件 @
eed2ab30
...
...
@@ -77,7 +77,7 @@ public class DokitOkGo {
loggingInterceptor
.
setPrintLevel
(
HttpLoggingInterceptor
.
Level
.
BODY
);
loggingInterceptor
.
setColorLevel
(
Level
.
INFO
);
builder
.
addInterceptor
(
loggingInterceptor
);
builder
.
retryOnConnectionFailure
(
true
);
//
builder.retryOnConnectionFailure(true);
builder
.
readTimeout
(
DokitOkGo
.
DEFAULT_MILLISECONDS
,
TimeUnit
.
MILLISECONDS
);
builder
.
writeTimeout
(
DokitOkGo
.
DEFAULT_MILLISECONDS
,
TimeUnit
.
MILLISECONDS
);
builder
.
connectTimeout
(
DokitOkGo
.
DEFAULT_MILLISECONDS
,
TimeUnit
.
MILLISECONDS
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录