README-CN
Android接入指南
由于jcenter事件的影响,我们需要将DoKit For Android迁移到mavenCentral(),但是需要更改groupId.所以大家要注意一下,具体的更新信息如下:
lastversion:3.5.0
;kotlin
编译插件为1.4.32
;支持Gradle 6.8
及以上
lastversion:3.5.0.1
; kotlin
编译插件为1.3.72
; 支持Gradle 6.8
及以下
DoKit | 最新版本 | 描述 |
---|---|---|
3.3.5及以后的Androidx | debugImplementation “io.github.didi.dokit:${aarName}: ${lastversion}” | (1)dokitx的library和plugin的groupId及版本号需要保持一致;(2)AGP最低版本要求3.3.0+ |
3.3.5及以前的Androidx版本 | debugImplementation “com.didichuxing.doraemonkit:${aarName}:3.3.5” | (1)dokitx的library和plugin的groupId及版本号需要保持一致; (2)AGP最低版本要求3.3.0+ |
支持android support | debugImplementation “com.didichuxing.doraemonkit:${aarName}:3.3.5” | support放弃更新,请大家尽快升级和适配Androidx |
${aarName}需要改为指定的名称,参考如下:
1 | //核心模块 |
debugImplementation 需要根据自己的构建改成对应的productFlavor
下面所有的例子均用dokitx举例。要使用support版本请将dokitx改为dokit即可。 v3.3.5以后的版本需要添加mavenCentral()仓库
接入步骤
1. Gradle 依赖
1 | dependencies { |
滴滴内部业务:
滴滴内部业务线接入请添加模块
1 | debugImplementation 'io.github.didi.dokit:dokitx-rpc:${lastversion}' |
最新版本参见这里。
2. 初始化
在 App 启动的时候进行初始化。
1 |
|
3. 流量监控以及其他AOP功能(可选)
AOP包括以下几个功能: 1)百度、腾讯、高德地图的经纬度模拟 2)UrlConnection、Okhttp 抓包以及后续的接口hook功能 3)App 启动耗时统计 4)慢函数 5)大图
在项目的 build.gradle
中添加 classpath。
1 | buildscript { |
在 app 的 build.gradle
中添加 plugin。
1 | apply plugin: 'com.didi.dokit' |
插件配置选项: 添加到app module 的build.gradle文件下 与android {}处于同一级
1 | dokitExt { |
其中strategy
和methodSwitch
配置项已经弃用。新的配置开关位于项目根目录下的gradle.properties
中。
具体的配置如下所示:
1 | // dokit全局配置 |
理由: 为了减少项目的编译时间,所以慢函数的默认开关为false。再加上plugin的transform注册必须早于project.afterEvaluate。所以无法通过原先的配置项拿到配置信息,只能通过在全局的gradle.properties中的配置可以拿到。
tips: 当修改完DoKit插件的相关配置以后一定要clean一下重新编译才能生效。这是AS的缓存增量编译导致的,暂时没有其他好的解决方案。
4. 自定义功能组件(可选)
自定义组件需要实现 IKit 接口,该接口对应哆啦A梦功能面板中的组件。
以代驾乘客端为例,实现环境切换组件如下。
1 | class DemoKit : AbstractKit() { |
在初始化的时候注册自定义组件。
1 | override fun onCreate() { |
DoKit入口api
1 | public class DoKit private constructor() { |
5. FAQ
参考这里
Android
1、为什么接入后看不到悬浮窗入口?
先确认是否打开应用的悬浮窗权限,同时确认是否错误引用no-op版本。
2、
com.didichuxing.doraemonkit:kit
和com.didichuxing.doraemonkit:kit-no-op
有什么区别?
no-op版本提供空实现,DoraemonKit不推荐集成到线上版本使用的,可通过gradle配置动态切换正常版本和no-op版本。
3、 流量监控无数据
目前流量监测功能只支持OkHttp3和HttpUrlConnection的自动注入,其他网络库暂不支持。 其他网络库可以使用NetworkPrinterHelper类进行请求数据的手动注入,使用参考demo。
4、 性能监控中,CPU、RAM无数据
旧版本SDK的CPU监控实现在8.0系统读取不到数据。新版本已修改实现方式,可以正常读取。
5、 帧率、CPU、RAM数据不准确
由于读取cpu、内存数据本身需要消耗cpu和内存,加上心跳图绘制需要消耗性能,所以开启这几项功能后,数据比app实际使用值有升高。
6、 com.hujiang.aspectjx:gradle-android-plugin-aspectjx是否必须?
注意:该插件只在低版本的dokit sdk中采用,新版本已经替换为ASM的技术方案,可以去掉。
这个插件的用处是在编译阶段在okhttp和httpurlconnection的调用处进行插桩,用来收集网络请求数据从而实现流量监控功能,如果不需要流量监控功能或者使用的是非okhttp和httpurlconnection网络库,可以不引用这个插件。 因为这个插件会涉及到字节码的修改,同时会插入一些代码到网络请求中,对性能和稳定性有影响,所以非常不推荐在线上版本中使用。在线上版本中,务必去除该插件的引用。
7、 沙盒游览功能能否打开数据库、sp文件?
目前已经支持
8、为什么地图的经纬度 hook 不成功
请检查是否集成了dokit-plugin插件
9、dokit 的数据mock以及健康体检到需要依赖dokit-plugin。
请检查是否集成了dokit-plugin插件
10、拾色器功能失效。
请先检查你当前app的targetSdkVersion是否大于等于29(Android Q).
1)假如你的app没有针对Android Q进行适配,可以考虑将targetSdkVersion设置为小于29即可。
2)我当前app的功能已经针对Android Q进行适配,想要正常使用拾色器。你可以添加以下代码到你项目的AndroidManifest.xml中。**(线上真实版本记得一定要去掉以下代码,dokit的所有功能只在开发环境中使用,千万不要带到线上)**
1 | <service |
如果编译过程中报找不到foregroundServiceType属性,请检查你项目的compileSdkVersion是否已经设置为29.一般情况下targetSdkVersion总是小于或等于compileSdkVersion。
原理: 因为Android Q针对屏幕截图的权限进行了调整。假如你项目的targetSdkVersion设置为29,系统会要求你的截图操作必须在前台服务中进行操作。否则无法正常进行屏幕截图。
11、Android Dokit为什么迟迟不升级成Androidx
其实现阶段Dokit的所有功能都是只支持在开发阶段,所以就意味着dokit依赖库所依赖的所有第三方库都不会带到线上,于此同时dokit-no-op中没有依赖任何第三方库,并且所有入口方法都是空实现。开发者根本不用担心线上包变大或者依赖冲突等问题。所以Android端现阶段升级Androidx的意义并不是很大。
12、大图检测功能未生效
当前安卓平台只支持glide4.0+、fresco、picasso、Imageloader 4个图片框架的自动检测。 当fileSize显示为0的时候,有可能是你设置了图片缓存,所以请请你一下缓存再重试。fileSize只会在通过网络加载时才会拦截。
13、编译demo失败
1、确认你的androidStudio版本时候升级到3.6.0及以上,因为项目中使用到了databind 2、去除和doraemonkit-rpc相关的引入,主要存在setting文件和build.gradle中,因为该module中使用滴滴自己的网络库外部并不能下载。
14、dokit版本的问题
|DoKit|最新版本|描述| |-|-|-|-| |支持Androidx|3.1.6|从v3.1.0版本开始支持androidx |支持android support|3.0.7.1|support 支持还会维护一到两个版本,请大家尽快拥抱androidx吧
15、数据mock不成功
1、当前dokit的数据mock逻辑为实际的接口path+query 必须包含在平台端配置的path+query 否则会匹配不到 2、如果你的项目中使用了retrofit,请确认你的okhttp版本时候大于3.14.0,如果是请把版本版本降低到3.12.1。参考代码如下:
1 | app module的build.gradle下添加以下代码 |
15、编译异常
项目编译过程中出现以下异常信息:
1 | Cause: tried to access method com.google.common.io.Files.fileTreeTraverser()Lcom/google/common/collect/TreeTraverser; from class com.android.utils.FileUtils |
请将AGP(AndroidStudio Gradle Plugin)版本升级3.3.0以上