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

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

J
modify:  
jackjintai 已提交
5 6
|DoKit|最新版本|描述|
|-|-|-|-|
J
jackjintai 已提交
7
|支持Androidx|3.1.4|从v3.1.0版本开始支持androidx
J
jackjintai 已提交
8
|支持android support|3.0.5|该版本为支持Android support的最后一个版本,后期也将不在提供维护,请大家尽快升级和适配Androidx
J
modify:  
jackjintai 已提交
9 10


A
alvince 已提交
11
```groovy
糕冷羊's avatar
糕冷羊 已提交
12
dependencies {
13
    
J
jackjintai 已提交
14 15
    debugImplementation 'com.didichuxing.doraemonkit:doraemonkit:3.1.4'
    releaseImplementation 'com.didichuxing.doraemonkit:doraemonkit-no-op:3.1.4'
16
    
糕冷羊's avatar
糕冷羊 已提交
17
}
糕冷羊's avatar
糕冷羊 已提交
18
```
A
alvince 已提交
19
注意:  
J
modify:  
jackjintai 已提交
20 21 22
 假如你无法通过 jcenter 下载到依赖库并报了以下的错误 

```
J
jackjintai 已提交
23
ERROR: Failed to resolve: com.didichuxing.doraemonkit:doraemonkit:3.1.4
J
modify:  
jackjintai 已提交
24 25 26 27 28 29 30
```

建议你可以尝试挂载VPN或通过命令行重试(以Mac系统为例 项目根目录下)

```
./gradlew clean assembleDebug
```
J
modify:  
jackjintai 已提交
31

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

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

H
haojianglong 已提交
35 36
DoraemonKit目前已支持Weex工具,包括

A
alvince 已提交
37 38
* Console 日志查看
* Storage 缓存查看
H
haojianglong 已提交
39 40 41 42 43
* 容器信息
* DevTool

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

A
alvince 已提交
44
```groovy
H
haojianglong 已提交
45
dependencies {
46
    
J
jackjintai 已提交
47 48
    debugImplementation 'com.didichuxing.doraemonkit:doraemonkit-weex:3.1.4'
    releaseImplementation 'com.didichuxing.doraemonkit:doraemonkit-weex-no-op:3.1.4'
49
    
H
haojianglong 已提交
50 51
}
```
糕冷羊's avatar
糕冷羊 已提交
52

A
alvince 已提交
53
如果有需要集成 `LeakCanary` 的需求可以直接添加下面依赖
糕冷羊's avatar
糕冷羊 已提交
54

A
alvince 已提交
55
```groovy
J
modify:  
jackjintai 已提交
56
dependencies {
57
    
J
jackjintai 已提交
58
    debugImplementation 'com.didichuxing.doraemonkit:doraemonkit-leakcanary:3.1.4'
59
    
J
modify:  
jackjintai 已提交
60
}
糕冷羊's avatar
糕冷羊 已提交
61
```
A
alvince 已提交
62
`LeakCanary` 已经在 doraemonkit 中动态集成,不需要自己再进行手动集成,只需要添加上面的依赖即可。
糕冷羊's avatar
糕冷羊 已提交
63

J
modify:  
jackjintai 已提交
64 65 66

#### 2. 初始化

A
alvince 已提交
67
在 App 启动的时候进行初始化。
H
haojianglong 已提交
68

A
alvince 已提交
69
```Java
H
haojianglong 已提交
70 71
@Override
public void onCreate() {
72

J
modify:  
jackjintai 已提交
73
    DoraemonKit.install(application)
H
haojianglong 已提交
74 75 76 77 78 79 80
     
    // H5任意门功能需要,非必须
    DoraemonKit.setWebDoorCallback(new WebDoorManager.WebDoorCallback() {
    @Override
    public void overrideUrlLoading(Context context, String s) {
        // 使用自己的H5容器打开这个链接
    }
81

H
haojianglong 已提交
82 83
} 
```
糕冷羊's avatar
糕冷羊 已提交
84 85


J
modify:  
jackjintai 已提交
86 87 88 89 90
#### 3. 流量监控以及其他AOP功能(可选)
AOP包括以下几个功能:
1)百度、腾讯、高德地图的经纬度模拟
2)UrlConnection、Okhttp 抓包以及后续的接口hook功能
3)App 启动耗时统计
糕冷羊's avatar
糕冷羊 已提交
91

A
alvince 已提交
92
在项目的 `build.gradle` 中添加 classpath。
糕冷羊's avatar
糕冷羊 已提交
93

A
alvince 已提交
94
```groovy
糕冷羊's avatar
糕冷羊 已提交
95 96 97 98
// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    dependencies {
99
        
J
jackjintai 已提交
100
        classpath 'com.didichuxing.doraemonkit:doraemonkit-plugin:3.1.4'
101
        
糕冷羊's avatar
糕冷羊 已提交
102 103 104
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
糕冷羊's avatar
糕冷羊 已提交
105 106 107
}
```

J
modify:  
jackjintai 已提交
108
在 app 的 `build.gradle` 中添加 plugin。
糕冷羊's avatar
糕冷羊 已提交
109

A
alvince 已提交
110
```groovy
J
modify:  
jackjintai 已提交
111
apply plugin: 'com.didi.dokit'
A
alvince 已提交
112

糕冷羊's avatar
糕冷羊 已提交
113 114
```

J
modify:  
jackjintai 已提交
115 116 117 118 119 120
**注意:
升级方案:
dokit的aop方案已经全面升级为ASM方式,性能和兼容性更好。原先的aspectj方案已经废弃不用。大家在升级过程中需要去掉aspectj的插件引入(包括classpath 'com.hujiang.aspectjx:gradle-android-plugin-aspectjx:2.0.8'和doraemonkit-aop)。
Android Studio支持:
插件只在Android Studio 3.0及以上的IDE中进行测试,如果有IDE报错的建议升级为3.0及以上。**

[
[linjizong] 已提交
121
注:
A
alvince 已提交
122 123 124 125 126 127 128 129 130 131 132 133 134
使用插件有两个目的:  
1. 是实现网络请求的自动监控和模拟弱网功能,不需要手动写其他代码。  
2. 是可以实现三方 jar 包内的请求的 hook。但使用插件会稍微影响到编译速度。  
   如果不需要这个功能,可以通过手动添加DoraemonInterceptor的方式进行OkHttp的监控,如下:

    ```Java
    OkHttpClient client = new OkHttpClient().newBuilder()
            //用于模拟弱网的拦截器
            .addNetworkInterceptor(new DoraemonWeakNetworkInterceptor())
            //网络请求监控的拦截器
            .addInterceptor(new DoraemonInterceptor()).build();
    ```

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

糕冷羊's avatar
糕冷羊 已提交
136
#### 4. 自定义功能组件(可选)
糕冷羊's avatar
糕冷羊 已提交
137

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

糕冷羊's avatar
糕冷羊 已提交
140
以黑马乘客端为例,实现环境切换组件如下。
糕冷羊's avatar
糕冷羊 已提交
141

A
alvince 已提交
142
```Java
J
modify:  
jackjintai 已提交
143
public class EnvSwitchKit extends AbstractKit {
糕冷羊's avatar
糕冷羊 已提交
144 145 146 147
    @Override
    public int getCategory() {
        return Category.BIZ;
    }
糕冷羊's avatar
糕冷羊 已提交
148
 
糕冷羊's avatar
糕冷羊 已提交
149 150 151 152
    @Override
    public int getName() {
        return R.string.bh_env_switch;
    }
糕冷羊's avatar
糕冷羊 已提交
153
 
糕冷羊's avatar
糕冷羊 已提交
154 155 156 157
    @Override
    public int getIcon() {
        return R.drawable.bh_roadbit;
    }
糕冷羊's avatar
糕冷羊 已提交
158
 
糕冷羊's avatar
糕冷羊 已提交
159 160 161 162 163
    @Override
    public void onClick(Context context) {
        DebugService service = ServiceManager.getInstance().getService(context, DebugService.class);
        PageManager.getInstance().startFragment(service.getContainer(), EnvSwitchFragment.class);
    }
糕冷羊's avatar
糕冷羊 已提交
164
 
糕冷羊's avatar
糕冷羊 已提交
165
    @Override
糕冷羊's avatar
糕冷羊 已提交
166 167
    public void onAppInit(Context context) {
    
糕冷羊's avatar
糕冷羊 已提交
168 169 170 171
    }
}
```

糕冷羊's avatar
糕冷羊 已提交
172
在初始化的时候注册自定义组件。
糕冷羊's avatar
糕冷羊 已提交
173

A
alvince 已提交
174
```Java
糕冷羊's avatar
糕冷羊 已提交
175 176 177
@Override
public void onCreate() {
    kits.add(new EnvSwitchKit());
J
modify:  
jackjintai 已提交
178
    DoraemonKit.install(application, kits,"pId");
179

糕冷羊's avatar
糕冷羊 已提交
180
}
尘岳's avatar
尘岳 已提交
181
```
J
modify:  
jackjintai 已提交
182 183
**注意:
社区中有人反馈希望可以app 启动时不显示浮标icon的api,现在可以通过以下api来操作:**
糕冷羊's avatar
糕冷羊 已提交
184

J
modify:  
jackjintai 已提交
185 186 187 188
```Java
@Override
public void onCreate() {
    kits.add(new EnvSwitchKit());
J
modify:  
jackjintai 已提交
189
    DoraemonKit.install(application, kits,"pId");
J
modify:  
jackjintai 已提交
190
    //false:不显示入口icon 默认为true
J
modify:  
jackjintai 已提交
191
    DoraemonKit.setAwaysShowMainIcon(false);
J
modify:  
jackjintai 已提交
192 193 194 195

}
```
**直接调起工具面板**
糕冷羊's avatar
糕冷羊 已提交
196

J
modify:  
jackjintai 已提交
197 198 199
```Java
DoraemonKit.showToolPanel();
```
糕冷羊's avatar
糕冷羊 已提交
200 201 202 203 204

#### 5. FAQ

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

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

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

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

糕冷羊's avatar
糕冷羊 已提交
211
**3. 流量监控无数据**
糕冷羊's avatar
糕冷羊 已提交
212 213

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

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

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

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

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

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

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

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

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