Dokit 开源库:简化 Android 应用开发的利器

Dokit 开源库:简化 Android 应用开发的利器

  • 一、Dokit 简介
  • 二、Dokit 功能
  • 三、Dokit 使用
    • 3.1 DoKit Android 最新版本
    • 3.2 DoKit Android 接入步骤
  • 四、总结

在 Android 应用开发过程中,我们经常需要处理调试、性能优化和用户体验等方面的问题。然而,这些任务通常需要大量的时间和精力。幸运的是,有一款名为 Dokit 的开源库可以帮助我们简化这些任务,提高开发效率和应用质量。

一、Dokit 简介

Dokit 是一款功能强大且易于集成的 Android 开发工具库,旨在帮助开发人员更轻松地进行应用调试、性能优化和用户体验改进。它提供了丰富的调试工具、性能监测和悬浮窗功能,使开发者可以更方便地查看应用的运行状态、性能指标和运行时信息。
在这里插入图片描述
Github:https://github.com/didi/DoKit

文档:https://xingyun.xiaojukeji.com/docs/dokit/#/intro

网站:https://www.dokit.cn/

介绍:https://zhuanlan.zhihu.com/p/196625684

二、Dokit 功能

Dokit 提供了许多有用的功能,以下是其中一些主要功能的介绍:

  1. 悬浮窗调试工具: Dokit 提供了一个可自定义的悬浮窗,可以在应用运行时显示调试信息,包括布局边界、视图层级、性能指标等。这使得调试 UI 布局和交互变得更加方便。

  2. 应用性能监测: Dokit 可以监测应用的性能指标,如 CPU 使用率、内存占用、网络请求等,并以可视化的方式展示。这有助于开发人员发现性能瓶颈并进行优化。

  3. 网络请求监控: Dokit 可以拦截应用的网络请求,并展示请求的详细信息,如请求 URL、请求参数、响应数据等。这对于调试和分析网络请求非常有用。

  4. 应用信息查看: Dokit 提供了应用信息查看功能,包括应用版本、设备信息、权限信息等。这有助于了解应用的运行环境和配置。

  5. 自定义插件: Dokit 还支持开发者自定义插件,根据自己的需求扩展功能。你可以根据应用的特定需求,添加自定义的调试工具和监测功能。

三、Dokit 使用

3.1 DoKit 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及以后的AndroidxdebugImplementation “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 supportdebugImplementation “com.didichuxing.doraemonkit:${aarName}:3.3.5”support放弃更新,请大家尽快升级和适配Androidx

${aarName}需要改为指定的名称,参考如下:

//核心模块
debugImplementation "io.github.didi.dokit:dokitx:${lastversion}"

//文件同步模块
debugImplementation "io.github.didi.dokit:dokitx-ft:${lastversion}"

//一机多控模块
debugImplementation "io.github.didi.dokit:dokitx-mc:${lastversion}"

//weex模块
debugImplementation "io.github.didi.dokit:dokitx-weex:${lastversion}"

//no-op 模块
releaseImplementation "io.github.didi.dokit:dokitx-no-op:${lastversion}"

debugImplementation 需要根据自己的构建改成对应的productFlavor

下面所有的例子均用dokitx举例。要使用support版本请将dokitx改为dokit即可。 v3.3.5以后的版本需要添加mavenCentral()仓库

3.2 DoKit Android 接入步骤

  1. Gradle 依赖
dependencies {
    …
    debugImplementation 'io.github.didi.dokit:dokitx:${lastversion}'
    releaseImplementation 'io.github.didi.dokit:dokitx-no-op:${lastversion}'}
  1. 初始化

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

@Override
public void onCreate() {

   DoKit.Builder(this)
            .productId("需要使用平台功能的话,需要到dokit.cn平台申请id")
            .build()

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

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

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

buildscript {
    dependencies {
        …
        classpath 'io.github.didi.dokit:dokitx-plugin:${lastversion}'}
}

在 app 的 build.gradle 中添加 plugin。

apply plugin: 'com.didi.dokit'

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

dokitExt {
    //通用设置
    comm {
        //地图经纬度开关
        gpsSwitch true
        //网络开关
        networkSwitch true
        //大图开关
        bigImgSwitch true
        //webView js 抓包
        webViewSwitch true
    }

    slowMethod {
        //调用栈模式配置 对应gradle.properties中DOKIT_METHOD_STRATEGY=0
        stackMethod {
            //默认值为 5ms 小于该值的函数在调用栈中不显示
            thresholdTime 10
            //调用栈函数入口 千万不要用我默认的配置 如果有特殊需求修改成项目中自己的入口 假如不需要可以去掉该字段
            enterMethods = ["com.didichuxing.doraemondemo.MainDebugActivity.test1"]
            //黑名单 粒度最小到类 暂不支持到方法  千万不要用我默认的配置 如果有特殊需求修改成项目中自己的入口 假如不需要可以去掉该字段
            methodBlacklist = ["com.facebook.drawee.backends.pipeline.Fresco"]
        }
        //普通模式配置 对应gradle.properties中DOKIT_METHOD_STRATEGY=1
        normalMethod {
            //默认值为 500ms 小于该值的函数在运行时不会在控制台中被打印
            thresholdTime 500
            //需要针对函数插装的包名 千万不要用我默认的配置 如果有特殊需求修改成项目中自己的项目包名 假如不需要可以去掉该字段
            packageNames = ["com.didichuxing.doraemondemo"]
            //不需要针对函数插装的包名&类名 千万不要用我默认的配置 如果有特殊需求修改成项目中自己的项目包名 假如不需要可以去掉该字段
            methodBlacklist = ["com.didichuxing.doraemondemo.dokit"]
        }
    }
}

其中strategymethodSwitch配置项已经弃用。新的配置开关位于项目根目录下的gradle.properties中。

具体的配置如下所示:

# dokit全局配置
# 插件开关
DOKIT_PLUGIN_SWITCH=true
# DOKIT读取三方库会和booster冲突 如果你的项目中也集成了booster 建议将开关改成false
DOKIT_THIRD_LIB_SWITCH=true
# 插件日志
DOKIT_LOG_SWITCH=true
# 自定义Webview的全限定名 主要是作用于h5 js抓包和数据mock
DOKIT_WEBVIEW_CLASS_NAME=com/didichuxing/doraemonkit/widget/webview/MyWebView
# dokit 慢函数开关
DOKIT_METHOD_SWITCH=true
# dokit 函数调用栈层级
DOKIT_METHOD_STACK_LEVEL=4
# 0:默认模式 打印函数调用栈 需添加指定入口  默认为application onCreate 和attachBaseContext
# 1:普通模式 运行时打印某个函数的耗时 全局业务代码函数插入
DOKIT_METHOD_STRATEGY=0

理由: 为了减少项目的编译时间,所以慢函数的默认开关为false。再加上plugin的transform注册必须早于project.afterEvaluate。所以无法通过原先的配置项拿到配置信息,只能通过在全局的gradle.properties中的配置可以拿到。

tips: 当修改完DoKit插件的相关配置以后一定要clean一下重新编译才能生效。这是AS的缓存增量编译导致的,暂时没有其他好的解决方案。

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

四、总结

Dokit 是一款功能强大且易于集成的 Android 开发工具库,它提供了丰富的调试工具、性能监测和悬浮窗功能,帮助开发人员更轻松地进行应用调试、性能优化和用户体验改进。通过集成 Dokit,开发人员可以更方便地查看应用的运行状态、性能指标和运行时信息。你可以在 Dokit 的官方文档中进一步了解其更详细的功能和使用方法,祝你在 Android 应用开发中取得更高的效率和质量!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/259751.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java精品项目源码新基于协同过滤算法的旅游推荐系统(编号V69)

Java精品项目源码新基于协同过滤算法的旅游推荐系统(编号V69) 大家好,小辰今天给大家介绍一个基于协同过滤算法的旅游推荐系统

linux ARM64 处理器内存屏障

一、内存类型: ARMv8架构将系统中所有的内存,按照它们的特性,划分成两种,即普通内存和设备内存。并且它们是互斥的,也就是说系统中的某段内存要么是普通内存,要么是设备内存,不能都是。 1&…

动力电池系统介绍(十四)——热管理系统

动力电池系统介绍(十四) 一、梗概二、座舱热管理(汽车空调)2.1 空调制冷2.2 空调制热2.2.1 传统燃油汽车空调制热2.2.2 新能源汽车空调制热 三、动力系统热管理3.1 燃油车发动机热管理3.1.1 冷却系统3.1.2 润滑系统3.1.3 进排气系…

C++ Lambda表达式基础用法

语法 C11标准lambda表达式的语法非常简单,定义如下,并且语法规定lambda表达式如果存在说明符,那么形参列表不能省略。标准还规定能捕获的变量必须是一个自动存储类型。简单来说就是非静态的局部变量、非全局变量。 定义:[ captu…

纳米流体传热与计算机模拟

纳米流体传热与计算机模拟 一、引言 纳米流体传热是一个研究领域,主要关注纳米尺度下流体的传热特性和机制。由于纳米流体的尺寸较小,其传热行为与传统尺度下的流体有很大不同。近年来,随着计算机技术的飞速发展,计算机模拟成为…

TensorFlow(2):Windows安装TensorFlow

1 安装python环境 这一步请自行安装,这边不做介绍。 2 安装anaconda 下载路径:Index of /,用户自行选择自己的需要的版本。 3 环境配置 3.1 anaconda环境配置 找到设置,点击系统->系统信息->高级系统设置->环境变量…

Github 2023-12-19开源项目日报 Top10

根据Github Trendings的统计,今日(2023-12-19统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目4Rust项目2非开发语言项目2C#项目1TypeScript项目1 Avalonia: 跨平台UI框架和Avalonia XPF 创建周…

高高。。。。

重点:存储系统/分布式系统 得到数据: 数据模型计算(简单系统)实现一个操作系统CPU(成本高)仿真实验 文章类型: 国际会议 10-15slices期刊论文 做OS研究为其他方面提供支持 一 Advanced OS …

鸿蒙开发运用ArkUI基础-实操显式动画

利用ArkUI组件不仅可以实现属性变化引起的属性动画,也可以实现父组件状态变化引起子组件产生动画效果,这种动画为显式动画。效果如图所示: 代码结构解读 ├──entry/src/main/ets // 代码区 │ ├──common │ │ └──…

css 美化滚动条

当div内容溢出容器定义的高度时,滚动条显示,并美化默认的滚动条样式 div 容器 <divclass"content">内容 </div>css 样式 /* 问话区域 滚动条 */ .content {overflow: auto;height: 662px;padding: 25px;scrollbar-width: thin; /* 设置滚动条宽度 */bo…

四川云汇优想教育咨询有限公司电商服务靠谱吗

随着抖音电商的兴起&#xff0c;越来越多的商家开始关注这一领域。四川云汇优想教育咨询有限公司作为一家专注于电商服务的企业&#xff0c;也受到了广泛的关注。那么&#xff0c;四川云汇优想教育咨询有限公司的抖音电商服务靠谱吗&#xff1f;下面我们将从多个方面进行深入剖…

大模型赋能“AI+电商”,景联文科技提供高质量电商场景数据

据新闻报道&#xff0c;阿里巴巴旗下淘天集团和国际数字商业集团都已建立完整的AI团队。 淘天集团已经推出模特图智能生成、官方客服机器人、万相台无界版等AI工具&#xff0c;训练出了自己的大模型产品 “星辰”&#xff1b; 阿里国际商业集团已成立AI Business&#xff0c;…

在线教育(内部)培训系统搭建,提供高效便捷的学习体验

我国一直是教育大国&#xff0c;不管是国民义务教育&#xff0c;还是学历提升、职业证书等&#xff0c;我国教育行业一直处于兴盛不衰的地步。 随着互联网信息化的发展&#xff0c;在线教育培训系统逐渐在教育行业得到重视。根据数据显示&#xff0c;我国在线教育市场规模将达…

拼图游戏

第一步是创建项目 项目名自拟 第二部创建个包名 来规范class 然后是创建类 创建一个代码类 和一个运行类 代码如下&#xff1a; package heima;import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import jav…

探索泰勒级数在机器学习中的作用:从函数逼近到模型优化

一、介绍 泰勒级数是数学中的一个基本概念&#xff0c;在机器学习领域有着重要的应用。本文将探讨泰勒级数的基础知识、它在机器学习中的相关性以及一些具体应用。 揭开复杂性&#xff1a;利用泰勒级数增强机器学习应用的理解和效率。 二、理解泰勒级数 在数学中&#xff0c;泰…

Leetcode—128.最长连续序列【中等】

2023每日刷题&#xff08;六十四&#xff09; Leetcode—128.最长连续序列 实现代码 class Solution { public:int longestConsecutive(vector<int>& nums) {unordered_set<int> s;for(auto num: nums) {s.insert(num);}int longestNum 0;for(auto num: s) …

Python Opencv实践 - 手部跟踪

使用mediapipe库做手部的实时跟踪&#xff0c;关于mediapipe的介绍,请自行百度。 mediapipe做手部检测的资料&#xff0c;可以参考这里&#xff1a; MediaPipe Hands: On-device Real-time Hand Tracking 论文阅读笔记 - 知乎论文地址&#xff1a; https://arxiv.org/abs/2006…

Shell三剑客:awk(简介)

一、前言 AWK 是一种编程语言&#xff0c;用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入、一个或多个文件&#xff0c;或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能&#xff0c;是linux/unix下的一个强大编程工具。它在命令行中使用&a…

3 - Electron app BrowserWindow对象-关于窗口

优雅的打开应用~ 当加载缓慢&#xff0c;打开应用的一瞬间会出现白屏&#xff0c;以下方法可以解决 const mainWindow new BrowserWindow({ show: false }) mainWindow.once(ready-to-show, () > {mainWindow.show() }) 设置背景颜色 const win new BrowserWindow({ b…

VueCron使用方法

1&#xff09;什么是vueCron Vue Cron 是基于 Vue.js 的定时任务管理组件&#xff0c;它提供了一种简单易用的方式来设定和管理定时任务。Vue Cron 提供了一个类似于 Linux crontab 的界面&#xff0c;用户可以通过它来创建、编辑和删除定时任务。 2&#xff09;安装依赖及应…