android_cn_guide.md 5.7 KB
Newer Older
糕冷羊's avatar
糕冷羊 已提交
1
## 接入方式
Y
readme  
yixiang 已提交
2

糕冷羊's avatar
糕冷羊 已提交
3
#### 1. Gradle依赖
糕冷羊's avatar
糕冷羊 已提交
4 5

```
糕冷羊's avatar
糕冷羊 已提交
6 7
dependencies {
	...
糕冷羊's avatar
糕冷羊 已提交
8
    debugImplementation 'com.didichuxing.doraemonkit:doraemonkit:1.2.1'
糕冷羊's avatar
糕冷羊 已提交
9
    releaseImplementation 'com.didichuxing.doraemonkit:doraemonkit-no-op:1.2.0'
糕冷羊's avatar
糕冷羊 已提交
10 11
    ...
}
糕冷羊's avatar
糕冷羊 已提交
12 13
```

14
最新版本参见[这里](android-ReleaseNotes.md)
糕冷羊's avatar
糕冷羊 已提交
15

H
haojianglong 已提交
16 17 18 19 20 21 22 23 24 25 26 27
DoraemonKit目前已支持Weex工具,包括

* Console日志查看
* Storage缓存查看
* 容器信息
* DevTool

如果有需要支持Weex的需求可以直接添加下面依赖

```
dependencies {
	...
糕冷羊's avatar
糕冷羊 已提交
28 29
    debugImplementation 'com.didichuxing.doraemonkit:doraemonkit-weex:1.0.0'
    releaseImplementation 'com.didichuxing.doraemonkit:doraemonkit-weex-no-op:1.0.0'
H
haojianglong 已提交
30 31 32
    ...
}
```
糕冷羊's avatar
糕冷羊 已提交
33

糕冷羊's avatar
糕冷羊 已提交
34

糕冷羊's avatar
糕冷羊 已提交
35
#### 2. 初始化
糕冷羊's avatar
糕冷羊 已提交
36

糕冷羊's avatar
糕冷羊 已提交
37
在App启动的时候进行初始化。
糕冷羊's avatar
糕冷羊 已提交
38 39 40 41

```
@Override
public void onCreate() {
糕冷羊's avatar
糕冷羊 已提交
42
	...
尘岳's avatar
尘岳 已提交
43
    DoraemonKit.install(application)
糕冷羊's avatar
糕冷羊 已提交
44 45
     
    // H5任意门功能需要,非必须
糕冷羊's avatar
糕冷羊 已提交
46 47
    DoraemonKit.setWebDoorCallback(new WebDoorManager.WebDoorCallback() {
    @Override
糕冷羊's avatar
糕冷羊 已提交
48
    public void overrideUrlLoading(Context context, String s) {
糕冷羊's avatar
糕冷羊 已提交
49 50 51
        // 使用自己的H5容器打开这个链接
    }
    ...
糕冷羊's avatar
糕冷羊 已提交
52 53 54
} 
```

H
haojianglong 已提交
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
如果已接入了Weex工具(暂不支持自定义功能组件),使用下面方式初始化

```
@Override
public void onCreate() {
	...
    DKWeexInstance.install(application)
     
    // H5任意门功能需要,非必须
    DoraemonKit.setWebDoorCallback(new WebDoorManager.WebDoorCallback() {
    @Override
    public void overrideUrlLoading(Context context, String s) {
        // 使用自己的H5容器打开这个链接
    }
    ...
} 
```
糕冷羊's avatar
糕冷羊 已提交
72 73 74 75 76 77 78 79 80 81 82 83


#### 3. 流量监控功能(可选)

在项目的build.gradle中添加classpath。

```
// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    dependencies {
        ...
糕冷羊's avatar
糕冷羊 已提交
84
        classpath 'com.hujiang.aspectjx:gradle-android-plugin-aspectjx:2.0.4'
糕冷羊's avatar
糕冷羊 已提交
85 86 87 88
        ...
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
糕冷羊's avatar
糕冷羊 已提交
89 90 91
}
```

糕冷羊's avatar
糕冷羊 已提交
92 93
在app的build.gradle中添加plugin和引用。新版本中已经将插件用到的注解类提取到单独的aar中,用以解决
和其他AspectJ插件冲突问题。如果项目中引用了其他AspectJ插件,请勿引用本插件,改为手动注册。
糕冷羊's avatar
糕冷羊 已提交
94 95 96

```
...
糕冷羊's avatar
糕冷羊 已提交
97
apply plugin: 'android-aspectjx'
糕冷羊's avatar
糕冷羊 已提交
98 99 100 101 102
dependencies {
	...
    debugImplementation 'com.didichuxing.doraemonkit:doraemonkit-aop:1.0.0'
    ...
}
糕冷羊's avatar
糕冷羊 已提交
103 104
```

[
[linjizong] 已提交
105
注:
猴子请来的救兵_'s avatar
猴子请来的救兵_ 已提交
106
使用插件有两个目的:1是实现网络请求的自动监控和模拟弱网功能,不需要手动写其他代码。2是可以实现三方jar包内的请求的hook。
[
[linjizong] 已提交
107
但使用插件会稍微影响到编译速度。如果不需要这个功能,可以通过手动添加DoraemonInterceptor的方式进行OkHttp的监控,如下:
糕冷羊's avatar
糕冷羊 已提交
108

[
[linjizong] 已提交
109 110
```
OkHttpClient client = new OkHttpClient().newBuilder()
猴子请来的救兵_'s avatar
猴子请来的救兵_ 已提交
111 112 113
                //用于模拟弱网的拦截器
                .addNetworkInterceptor(new DoraemonWeakNetworkInterceptor())
                //网络请求监控的拦截器
[
[linjizong] 已提交
114 115
                .addInterceptor(new DoraemonInterceptor()).build();
```
糕冷羊's avatar
糕冷羊 已提交
116
#### 4. 自定义功能组件(可选)
糕冷羊's avatar
糕冷羊 已提交
117

糕冷羊's avatar
糕冷羊 已提交
118
自定义组件需要实现IKit接口,该接口对应哆啦A梦功能面板中的组件。
糕冷羊's avatar
糕冷羊 已提交
119

糕冷羊's avatar
糕冷羊 已提交
120
以黑马乘客端为例,实现环境切换组件如下。
糕冷羊's avatar
糕冷羊 已提交
121 122 123 124 125 126 127

```
public class EnvSwitchKit implements IKit {
    @Override
    public int getCategory() {
        return Category.BIZ;
    }
糕冷羊's avatar
糕冷羊 已提交
128
 
糕冷羊's avatar
糕冷羊 已提交
129 130 131 132
    @Override
    public int getName() {
        return R.string.bh_env_switch;
    }
糕冷羊's avatar
糕冷羊 已提交
133
 
糕冷羊's avatar
糕冷羊 已提交
134 135 136 137
    @Override
    public int getIcon() {
        return R.drawable.bh_roadbit;
    }
糕冷羊's avatar
糕冷羊 已提交
138
 
糕冷羊's avatar
糕冷羊 已提交
139 140 141 142 143
    @Override
    public void onClick(Context context) {
        DebugService service = ServiceManager.getInstance().getService(context, DebugService.class);
        PageManager.getInstance().startFragment(service.getContainer(), EnvSwitchFragment.class);
    }
糕冷羊's avatar
糕冷羊 已提交
144
 
糕冷羊's avatar
糕冷羊 已提交
145
    @Override
糕冷羊's avatar
糕冷羊 已提交
146 147
    public void onAppInit(Context context) {
    
糕冷羊's avatar
糕冷羊 已提交
148 149 150 151
    }
}
```

糕冷羊's avatar
糕冷羊 已提交
152
在初始化的时候注册自定义组件。
糕冷羊's avatar
糕冷羊 已提交
153 154 155 156 157 158 159 160

```
@Override
public void onCreate() {
    kits.add(new EnvSwitchKit());
    DoraemonKit.install(application, kits);
    ...
}
尘岳's avatar
尘岳 已提交
161
```
糕冷羊's avatar
糕冷羊 已提交
162 163 164 165 166 167 168



#### 5. FAQ

**1. 为什么接入后看不到悬浮窗入口?**

糕冷羊's avatar
糕冷羊 已提交
169
> 先确认是否打开应用的悬浮窗权限,同时确认是否错误引用no-op版本。
糕冷羊's avatar
糕冷羊 已提交
170 171 172

**2. com.didichuxing.doraemonkit:kit和com.didichuxing.doraemonkit:kit-no-op有什么区别?**

糕冷羊's avatar
糕冷羊 已提交
173
> no-op版本提供空实现,DoraemonKit不推荐集成到线上版本使用的,可通过gradle配置动态切换正常版本和no-op版本。
糕冷羊's avatar
糕冷羊 已提交
174

糕冷羊's avatar
糕冷羊 已提交
175
**3. 流量监控无数据**
糕冷羊's avatar
糕冷羊 已提交
176 177

> 目前流量监测功能只支持OkHttp3和HttpUrlConnection的自动注入,其他网络库暂不支持。
糕冷羊's avatar
糕冷羊 已提交
178
> 其他网络库可以使用NetworkPrinterHelper类进行请求数据的手动注入,使用参考demo。
糕冷羊's avatar
糕冷羊 已提交
179

糕冷羊's avatar
糕冷羊 已提交
180
**4. 性能监控中,CPU、RAM无数据**
糕冷羊's avatar
糕冷羊 已提交
181

糕冷羊's avatar
糕冷羊 已提交
182
> 旧版本SDK的CPU监控实现在8.0系统读取不到数据。新版本已修改实现方式,可以正常读取。
糕冷羊's avatar
糕冷羊 已提交
183

糕冷羊's avatar
糕冷羊 已提交
184
**5. 帧率、CPU、RAM数据不准确**
糕冷羊's avatar
糕冷羊 已提交
185

糕冷羊's avatar
糕冷羊 已提交
186
> 由于读取cpu、内存数据本身需要消耗cpu和内存,加上心跳图绘制需要消耗性能,所以开启这几项功能后,数据比app实际使用值有升高。
糕冷羊's avatar
糕冷羊 已提交
187

糕冷羊's avatar
糕冷羊 已提交
188
**6. com.hujiang.aspectjx:gradle-android-plugin-aspectjx是否必须?**
糕冷羊's avatar
糕冷羊 已提交
189

糕冷羊's avatar
糕冷羊 已提交
190 191
> 这个插件的用处是在编译阶段在okhttp和httpurlconnection的调用处进行插桩,用来收集网络请求数据从而实现流量监控功能,如果不需要流量监控功能或者使用的是非okhttp和httpurlconnection网络库,可以不引用这个插件。
> 因为这个插件会涉及到字节码的修改,同时会插入一些代码到网络请求中,对性能和稳定性有影响,所以非常不推荐在线上版本中使用。在线上版本中,务必去除该插件的引用。
糕冷羊's avatar
糕冷羊 已提交
192

糕冷羊's avatar
糕冷羊 已提交
193
**7. 沙盒游览功能能否打开数据库、sp文件?**
糕冷羊's avatar
糕冷羊 已提交
194

糕冷羊's avatar
糕冷羊 已提交
195
> 目前已经支持