Futter开源项目-精美的ADB GUI工具

“我们迟早会变成每天只会上下班的程序员,没有任何社区输出,这一天终将会到来。”——梦魇兽

系列文章:

想要提前了解更多个人项目,个人项目官网传送

个人简介

大家好,我是梦魇兽,可以叫我小梦。滴滴国际化架构团队研发工程师。

好像在社区,大家总是会优先以身份去定位笔者的能力,以前我总是以一个学生,这次换换风格

前言

这篇文章为大家带来一款精致的 ADB 客户端,适配了 Windows、Linux、macOS、Android,首先这并非是一个 KPI 项目,这只是我在大学生涯中的一个个人作品,它如同“速享”,“魇·工具箱”,“无界”一样,都付出过我极多的精力。极多~

对于我而言,需求都是诞生自日常,当我频繁的需要某一类软件,但并没有发现此类软件或者已有的软件不如人意的时候,我便会尝试去开发它。

这个客户端比我想象中花的精力还要多,也经过了很多个小版本的迭代,要把一个项目当做一个产品来做,无疑需要在多种角色之间转换,可能偶尔是产品经理,偶尔是 UI,偶尔是开发。

这篇文章会从以下几个方面为大家展示这个客户端:

  • 1.界面展示
  • 2.存在的意义
  • 3.功能特性
  • 4.开源相关
  • 5.更多

Github Insights

比起那些“只花几天开发的应用”便大量分享和推广的应用,我觉得这样更优说服力。

界面展示

客户端可以根据屏幕的大小进行响应适配。

作为一个客户端开发,UI 我的确是尽力了,也花了各种方式来补课,逛 dribbble,让同学看。

screenshot

screenshot

背景&&意义

  • 更方便的使用adb二进制
  • 更方便的远程调试:局域网自动发现自动连接,历史IP记录,扫描连接
  • 更方便的文件上传、软件安装:拖拽安装软件,上传文件,切支持批量处理
  • 更方便的应用管理、程序启动:直接在 PC 上获取到更详细的应用信息
  • 更方便的Task管理:在 PC 上查看连接设备的后台任务,获取任务缩略图,关闭任务
  • 支持Android To Android:通过 WIFI/OTG 连手表,连电视
  • CPU/GPU 信息查看
  • 进程管理

我们很多时候不会主动的使用 adb 命令,一般都是借助 IDE 间接的使用到 adb,但一旦需要使用adb 的某个命令的时候,就会面临各种各样的参数,各种各样的开关

我们也许在跟 UI 对线的时候想快速开启设备的视图分割线,然后立马想到可能不好找,随后打消了这个念头,“UI:你这儿怎么感觉有点没对齐”,“你这儿好像有块白色的玩意”,“你这个像素感觉有点不对”,你可能需要这个

“UI:这个阴影看起来怪怪的,要不我再给你几组值你都编译给我看看?”,ok,这个问题此文的 ADB KIT 解决不了,下一题!

我们也许拿到一台很陌生的测试机,也可能是自己的手机,总是找不着我们的 App 在哪。你可以试试这个

我们想要快速的清数据,卸载 app,查看 apk 更详细的信息。你只需要通过客户端就能看到应用详情

“这电脑怎么连这么多线,我想换无线调试,随后脑袋复现,adb tcpip 5555,然后还得找设备的 ip 地址,放弃这个想法”,现在你只需要拖拽文件到客户端(后面有GIF演示)

“adb -s install -t xxxx”

“adb -s push xxx xxx”

“pm 清除 app 数据命令是哪个来着,我给忘了,百度查一下”,现在你只需要

它的第一个版本启动以后只有一个大大丑丑的二维码,安卓端处于同局域网下扫描后即可实现对安卓设备的adb连接,也就是说我将adb connect $IP这样的命令转换成了扫码的方式,但随着对使用安卓调试频率的增加,这个客户端逐渐变得更完善。

功能特性

  • 支持多平台
  • 可扩展
  • 快捷管理多设备调试
  • 快速连接
    • UDP 自动连接
    • 扫码连接
    • 输入连接
    • 历史连接
  • 安卓免 root 连接另一台安卓
  • 历史记录
  • 快捷上传,安装应用
  • 常用开关(免 ROOT)
    • 开启 ADB 远程调试
    • 显示屏幕指针
    • 打开布局边界
    • 显示点按操作
  • 快捷连接 ADB SHELL
  • 应用管理器,桌面启动器
  • 任务管理器
  • 主题适配
  • 响应式
  • 国际化
  • 快捷启动
    • scene
    • 黑域
    • 冰箱
    • shizuku

1.支持多平台

这的确是得益于 Flutter 框架的性能表现,可以将 ADB KIT 支持到 Windows、macOS、Linux 还有 Android。
其中与系统底层的交互也通过 flutter ffi plugin 进行差异抹平(local terminal)。

由于这个项目同时可以运行在安卓设备上,而由文章深入理解 ADB 协议 - 安卓使用 ADB 实现可知,安卓不同 PC 一样,PC adb 二进制有完善的功能,安卓端的 adb 二进制是没办法访问 usb 设备的(在非 root 的情况下),于是只有通过 java 去调安卓 usb api 实现 adb 协议,从而实现设备的通信。

2.插件化设计

ADB KIT 在结构设计上使用插件化的设计,侧栏菜单与设备对应的二级页面均为可插拔设计。

你可以用非常简短的代码,将自己实现的插件集成到 ADB KIT 中。

就像这样

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

class ProcessPlugin extends Pluggable {
@override
Widget buildWidget(BuildContext context, DevicesEntity? device) {
return ProcessManagerPage(
devicesEntity: device,
);
}

@override
String get displayName => '进程管理';

@override
ImageProvider<Object> get iconImageProvider => throw UnimplementedError();

@override
String get name => '进程管理';

@override
void onTrigger() {}
}
PluginManager.instance.registerADBPlugin(ProcessPlugin());

任何人都可以基于现有的 ADB KIT,去快速的定制一份属于自己业务场景的 ADB KIT.

3.快捷管理多设备调试

不再需要手动通过 adb -s 命令去切换对应的设备,

4.快速连接

4.1 UDP 自动连接

4.2 扫码连接

4.3 输入连接

4.4 历史连接

5.历史记录

6.快速安装 Apk,上传文件

只需要拖拽即可快速完成操作,且支持批量。

7.常用开关

8.快捷连接 ADB SHELL

9.应用管理器,桌面启动器

10.任务管理器

11.主题适配

12.响应式布局

13.国际化支持

14.快捷启动

开源相关

一个人的人力的确是非常的不够,并且想要打造的东西越大越完善,所需要的时间也会更久,我承认,ADB KIT 至今仍然不成算作一个完全可用的产品。但这会是一个好的开始。

相关仓库

ADB GUI 核心模块还依赖以下仓库,这些仓库都全部由个人开发维护。

  • app_manager: 应用管理器,通过插件集成到 ADB TOOL 内部。
  • global_repository: 自实现的屏幕适配,弹窗,运行环境,组件库,日志库等。
  • multicast: 局域网组播与广播的监听与注册。
  • pseudo_terminal_utils: 快速创建 pty 实例
  • termare_pty: 本地终端组件。(已经替换成flutter_pty,感谢@xuty)
  • termare_view: 渲染终端的Widget。(已经替换成xterm.dart,感谢@xuty)
  • adbutil: 对 adb 二进制的封装。
  • file_selector_nightmare: 文件选择。
  • app_launcher: 应用启动器,通过 Plugin 集成到 ADB TOOL 内部。
  • settings: 设置。
  • device_info: 设备信息,通过 Plugin 集成到 ADB TOOL 内部。

这其中有些依赖在迭代的过程中进行了替换,只要能很好的解决问题,就不用自己再去实现。

更多

目前 ADB KIT 有如下插件

  • 应用管理
  • 进程管理
  • Task管理

这些 package 作为 plugin,同时也能独立存在
就像这样,得益于 C/S 的架构设计,这些插件本身并不直接依赖 adb。

作者

梦魇兽

发布于

2022-09-25

更新于

2023-03-14

许可协议

评论