Android接入指南

DoKit最新版本描述
支持Androidx3.1.5从v3.1.0版本开始支持androidx
支持android support3.0.63.0.6版本对应3.1.5的功能,后期support将会不定期更新,主要还是看社区的反馈,请大家尽快升级和适配Androidx

1. Gradle 依赖

  1. dependencies {
  2. debugImplementation 'com.didichuxing.doraemonkit:doraemonkit:3.1.5'
  3. releaseImplementation 'com.didichuxing.doraemonkit:doraemonkit-no-op:3.1.5'
  4. }

滴滴内部业务:

滴滴内部业务线接入请将

  1. debugImplementation 'com.didichuxing.doraemonkit:doraemonkit:3.1.5'

替换为

  1. debugImplementation 'com.didichuxing.doraemonkit:doraemonkit-rpc:3.1.5'

注意: 假如你无法通过 jcenter 下载到依赖库并报了以下的错误

  1. ERROR: Failed to resolve: com.didichuxing.doraemonkit:doraemonkit:3.1.5

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

  1. ./gradlew clean assembleDebug

最新版本参见这里

注意:

安卓版本DoKit从3.1.0版本开始全面拥抱Androidx,假如你的项目还没有升级到androidx你可以选择依赖3.0.2版本 安卓版DoKit从3.0.2版本开始将逐渐放弃对Android Support版本的支持,请大家全面拥抱androidx吧

DoraemonKit目前已支持Weex工具,包括

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

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

  1. dependencies {
  2. debugImplementation 'com.didichuxing.doraemonkit:doraemonkit-weex:3.1.5'
  3. }

如果有需要集成 LeakCanary 的需求可以直接添加下面依赖

  1. dependencies {
  2. debugImplementation 'com.didichuxing.doraemonkit:doraemonkit-leakcanary:3.1.5'
  3. }

LeakCanary 已经在 doraemonkit 中动态集成,不需要自己再进行手动集成,只需要添加上面的依赖即可。

2. 初始化

在 App 启动的时候进行初始化。

  1. @Override
  2. public void onCreate() {
  3. DoraemonKit.install(application,null,"pId");
  4. }

滴滴内部业务

  1. @Override
  2. public void onCreate() {
  3. DoraemonKitRpc.install(application,null,"pId")
  4. }

3. 流量监控以及其他AOP功能(可选)

AOP包括以下几个功能: 1)百度、腾讯、高德地图的经纬度模拟 2)UrlConnection、Okhttp 抓包以及后续的接口hook功能 3)App 启动耗时统计 4)慢函数 5)大图

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

  1. buildscript {
  2. dependencies {
  3. classpath 'com.didichuxing.doraemonkit:doraemonkit-plugin:3.1.5'
  4. }
  5. }

在 app 的 build.gradle 中添加 plugin。

  1. apply plugin: 'com.didi.dokit'

插件配置选项: 添加到app module 的build.gradle文件下 与android {}处于同一级

  1. dokitExt {
  2. //dokit 插件开关
  3. dokitPluginSwitch true
  4. //通用设置
  5. comm {
  6. //地图经纬度开关
  7. gpsSwitch true
  8. //网络开关
  9. networkSwitch true
  10. //大图开关
  11. bigImgSwitch true
  12. }
  13. slowMethod {
  14. //0:默认模式 打印函数调用栈 需添加指定入口 默认为application onCreate 和attachBaseContext
  15. //1:普通模式 运行时打印某个函数的耗时 全局业务代码函数插入
  16. strategy 0
  17. //函数功能开关
  18. methodSwitch true
  19. //调用栈模式配置
  20. stackMethod {
  21. //默认值为 5ms 小于该值的函数在调用栈中不显示
  22. thresholdTime 10
  23. //调用栈函数入口
  24. enterMethods = ["com.didichuxing.doraemondemo.MainDebugActivity.test1"]
  25. }
  26. //普通模式配置
  27. normalMethod {
  28. //默认值为 500ms 小于该值的函数在运行时不会在控制台中被打印
  29. thresholdTime 500
  30. //需要针对函数插装的包名
  31. packageNames = ["com.didichuxing.doraemondemo"]
  32. //不需要针对函数插装的包名&类名
  33. methodBlacklist = ["com.didichuxing.doraemondemo.dokit"]
  34. }
  35. }
  36. }

4. 自定义功能组件(可选)

自定义组件需要实现 IKit 接口,该接口对应哆啦A梦功能面板中的组件。

以代驾乘客端为例,实现环境切换组件如下。

  1. public class EnvSwitchKit extends AbstractKit {
  2. @Override
  3. public int getCategory() {
  4. return Category.BIZ;
  5. }
  6. @Override
  7. public int getName() {
  8. return R.string.bh_env_switch;
  9. }
  10. @Override
  11. public int getIcon() {
  12. return R.drawable.bh_roadbit;
  13. }
  14. @Override
  15. public void onClick(Context context) {
  16. DebugService service = ServiceManager.getInstance().getService(context, DebugService.class);
  17. PageManager.getInstance().startFragment(service.getContainer(), EnvSwitchFragment.class);
  18. }
  19. @Override
  20. public void onAppInit(Context context) {
  21. }
  22. }

在初始化的时候注册自定义组件。

  1. @Override
  2. public void onCreate() {
  3. kits.add(new EnvSwitchKit());
  4. DoraemonKit.install(application, kits);
  5. }

DoraemonKit入口api

  1. object DoraemonKit {
  2. //不需要productId
  3. @JvmStatic
  4. fun install(app: Application) {
  5. }
  6. //需要productId
  7. @JvmStatic
  8. fun install(app: Application, productId: String) {
  9. }
  10. //用户自定义用户专区分组
  11. @JvmStatic
  12. fun install(app: Application, mapKits: LinkedHashMap<String, MutableList<AbstractKit>>, productId: String) {
  13. }
  14. //默认用户专区分组
  15. @JvmStatic
  16. fun install(app: Application, listKits: MutableList<AbstractKit>, productId: String) {
  17. }
  18. /**
  19. * @param app
  20. * @param mapKits 自定义kits 根据用户传进来的分组 建议优先选择mapKits 两者都传的话会选择mapKits
  21. * @param listKits 自定义kits 兼容原先老的api
  22. * @param productId Dokit平台端申请的productId
  23. */
  24. @JvmStatic
  25. private fun install(app: Application, mapKits: LinkedHashMap<String, MutableList<AbstractKit>>? = linkedMapOf(), listKits: MutableList<AbstractKit>? = mutableListOf(), productId: String? = "") {
  26. }
  27. //h5任意门回调
  28. @JvmStatic
  29. fun setWebDoorCallback(callback: WebDoorManager.WebDoorCallback?) {
  30. }
  31. //显示mainIcon
  32. @JvmStatic
  33. fun show() {
  34. }
  35. //隐藏mainIcon
  36. @JvmStatic
  37. fun hide() {
  38. }
  39. /**
  40. * 直接显示工具面板页面
  41. */
  42. @JvmStatic
  43. fun showToolPanel() {
  44. }
  45. /**
  46. * 直接隐藏工具面板
  47. */
  48. @JvmStatic
  49. fun hideToolPanel() {
  50. }
  51. /**
  52. * 禁用app信息上传开关,该上传信息只为做DoKit接入量的统计,如果用户需要保护app隐私,可调用该方法进行禁用
  53. */
  54. @JvmStatic
  55. fun disableUpload() {
  56. }
  57. @JvmStatic
  58. val isShow: Boolean
  59. get() = false
  60. @JvmStatic
  61. fun setDebug(debug: Boolean) {
  62. }
  63. /**
  64. * 是否显示主入口icon
  65. */
  66. @JvmStatic
  67. fun setAwaysShowMainIcon(awaysShow: Boolean) {
  68. }
  69. }

5. FAQ

参考这里