android_cn_guide.md 4.4 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 9
    debugImplementation 'com.didichuxing.doraemonkit:doraemonkit:1.1.6'
    releaseImplementation 'com.didichuxing.doraemonkit:doraemonkit-no-op:1.1.6'
糕冷羊's avatar
糕冷羊 已提交
10 11
    ...
}
糕冷羊's avatar
糕冷羊 已提交
12 13
```

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


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

糕冷羊's avatar
糕冷羊 已提交
18
#### 2. 初始化
糕冷羊's avatar
糕冷羊 已提交
19

糕冷羊's avatar
糕冷羊 已提交
20
在App启动的时候进行初始化。
糕冷羊's avatar
糕冷羊 已提交
21 22 23 24

```
@Override
public void onCreate() {
糕冷羊's avatar
糕冷羊 已提交
25
	...
尘岳's avatar
尘岳 已提交
26
    DoraemonKit.install(application)
糕冷羊's avatar
糕冷羊 已提交
27 28
     
    // H5任意门功能需要,非必须
糕冷羊's avatar
糕冷羊 已提交
29 30
    DoraemonKit.setWebDoorCallback(new WebDoorManager.WebDoorCallback() {
    @Override
糕冷羊's avatar
糕冷羊 已提交
31
    public void overrideUrlLoading(Context context, String s) {
糕冷羊's avatar
糕冷羊 已提交
32 33 34
        // 使用自己的H5容器打开这个链接
    }
    ...
糕冷羊's avatar
糕冷羊 已提交
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
} 
```



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

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

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

buildscript {
    dependencies {
        ...
糕冷羊's avatar
糕冷羊 已提交
50
        classpath 'com.hujiang.aspectjx:gradle-android-plugin-aspectjx:2.0.4'
糕冷羊's avatar
糕冷羊 已提交
51 52 53 54
        ...
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
糕冷羊's avatar
糕冷羊 已提交
55 56 57
}
```

糕冷羊's avatar
糕冷羊 已提交
58 59 60 61
在app的build.gradle中添加plugin。

```
...
糕冷羊's avatar
糕冷羊 已提交
62
apply plugin: 'android-aspectjx'
糕冷羊's avatar
糕冷羊 已提交
63 64
```

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

[
[linjizong] 已提交
69 70 71 72
```
OkHttpClient client = new OkHttpClient().newBuilder()
                .addInterceptor(new DoraemonInterceptor()).build();
```
糕冷羊's avatar
糕冷羊 已提交
73
#### 4. 自定义功能组件(可选)
糕冷羊's avatar
糕冷羊 已提交
74

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

糕冷羊's avatar
糕冷羊 已提交
77
以黑马乘客端为例,实现环境切换组件如下。
糕冷羊's avatar
糕冷羊 已提交
78 79 80 81 82 83 84

```
public class EnvSwitchKit implements IKit {
    @Override
    public int getCategory() {
        return Category.BIZ;
    }
糕冷羊's avatar
糕冷羊 已提交
85
 
糕冷羊's avatar
糕冷羊 已提交
86 87 88 89
    @Override
    public int getName() {
        return R.string.bh_env_switch;
    }
糕冷羊's avatar
糕冷羊 已提交
90
 
糕冷羊's avatar
糕冷羊 已提交
91 92 93 94
    @Override
    public int getIcon() {
        return R.drawable.bh_roadbit;
    }
糕冷羊's avatar
糕冷羊 已提交
95
 
糕冷羊's avatar
糕冷羊 已提交
96 97 98 99 100
    @Override
    public void onClick(Context context) {
        DebugService service = ServiceManager.getInstance().getService(context, DebugService.class);
        PageManager.getInstance().startFragment(service.getContainer(), EnvSwitchFragment.class);
    }
糕冷羊's avatar
糕冷羊 已提交
101
 
糕冷羊's avatar
糕冷羊 已提交
102
    @Override
糕冷羊's avatar
糕冷羊 已提交
103 104
    public void onAppInit(Context context) {
    
糕冷羊's avatar
糕冷羊 已提交
105 106 107 108
    }
}
```

糕冷羊's avatar
糕冷羊 已提交
109
在初始化的时候注册自定义组件。
糕冷羊's avatar
糕冷羊 已提交
110 111 112 113 114 115 116 117

```
@Override
public void onCreate() {
    kits.add(new EnvSwitchKit());
    DoraemonKit.install(application, kits);
    ...
}
尘岳's avatar
尘岳 已提交
118
```
糕冷羊's avatar
糕冷羊 已提交
119 120 121 122 123 124 125



#### 5. FAQ

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

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

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

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

糕冷羊's avatar
糕冷羊 已提交
132
**3. 流量监控无数据**
糕冷羊's avatar
糕冷羊 已提交
133 134

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

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

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

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

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

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

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

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

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