如何为DebugKit扩展自己的预置函数?仿照DumpSharedPreferences源码实现实战

📅 2026/8/23 11:55:05
如何为DebugKit扩展自己的预置函数?仿照DumpSharedPreferences源码实现实战
如何为DebugKit扩展自己的预置函数仿照DumpSharedPreferences源码实现实战【免费下载链接】debugkitEver hid debug functions in your UI? Here is now a clean way to do it!项目地址: https://gitcode.com/gh_mirrors/de/debugkitDebugKit 是一款轻量级 Android 调试工具库在应用内悬浮一个可拖动的调试面板上面有 F1、F2 等功能按钮和实时日志控制台点击按钮即可在运行时触发动作并直接看到文字反馈。本文将带你拆解内置函数DumpSharedPreferences的源码从零实战一个属于自己的预置调试函数全程只需几十行代码。️先看懂 DebugKit 的函数机制DebugKit 的核心只有三个源码文件分工非常清晰文件职责debugkit/src/main/java/com/hulab/debugkit/DebugFunction.java调试函数抽象类所有预置函数都继承它debugkit/src/main/java/com/hulab/debugkit/DevTool.javaBuilder负责注册函数、设置主题并弹出面板debugkit/src/main/java/com/hulab/debugkit/DevToolFragment.java面板 UI按钮渲染、控制台日志、拖拽与折叠工作机制可以用一句话概括每注册一个DebugFunction面板就生成一个按钮点击按钮时框架自动调用call()把返回的字符串打印到控制台。框架还给你准备了 4 个趁手的工具方法方法作用call()必写按钮点击时执行返回值自动写入控制台log(String)过程中分步打印日志带时间戳clear()清空控制台getContext()获取宿主 Activity 的 Context 所以扩展一个预置函数本质上只有三件事继承DebugFunction→ 构造器里传按钮标题 → 实现call()返回结果字符串。第一步拆解 DumpSharedPreferences 源码内置的导出 SharedPreferences函数是官方给出的标准范例位于 DebugFunction.java结构非常典型public static class DumpSharedPreferences extends DebugFunction { private String FILE_NAME; private int mode Context.MODE_PRIVATE; public DumpSharedPreferences(String title, String fileName) { super(title); // ① 把按钮标题传给父类 this.FILE_NAME fileName; // ② 私有字段保存参数 } Override public String call() { // ③ 实现唯一必写的入口 return dumpSharedPreferences(this.getContext()); } private String dumpSharedPreferences(Context context) { // ④ 具体逻辑抽成私有方法遍历所有键值对拼成字符串 } }拆解出四个要点照抄即可复刻这个模式继承 静态内部类写成DebugFunction的静态子类调用方可以像new DebugFunction.DumpSharedPreferences(标题, 文件名)一样一行注册构造器传 title父类构造器接收标题按钮就显示自定义文字而不是默认的 F1/F2面板渲染逻辑见 DevToolFragment.java参数用私有字段持有不同业务实例可以传不同参数互不干扰call()只负责返回值真正的逻辑放进私有方法返回值就是最终显示在控制台的文本返回null则不打印。第二步仿写实战——扩展 DumpAppVersion 函数仿照上面的结构我们写一个一键打印应用版本号的预置函数放进DebugFunction里即可public static class DumpAppVersion extends DebugFunction { public DumpAppVersion() { super(Version); // 固定标题也可以像范例一样做成带参构造 } Override public String call() throws Exception { PackageManager pm getContext().getPackageManager(); PackageInfo info pm.getPackageInfo(getContext().getPackageName(), 0); return 当前版本 info.versionName; } }对照一下范例四个要点全部命中继承DebugFunction、构造器调super(title)、实现call()、通过getContext()拿到系统服务。就这么简单。✨第三步注册到 DevTool.Builder 验证效果函数写好后在任意 Activity 里通过 Builder 链式注册完整示例见 ExampleActivity.javaDevTool.Builder builder new DevTool.Builder(this); builder.addFunction(new DebugFunction.DumpAppVersion()) .addFunction(new DebugFunction.Clear(Clear)) .addFunction(new DebugFunction.DumpSharedPreferences(Shared prefs, preferences)) .setTheme(DevToolFragment.DevToolTheme.DARK) .displayAt(50, 200) .build();build()内部会把DevToolFragment作为 Fragment 添加到当前 Activity实现见 DevTool.java。运行后你会看到面板上出现Version按钮点击一下控制台立刻显示类似12:05:33 Version: 当前版本1.0.0的日志。新手必看的 4 个避坑清单现象原因解决方式按钮显示 F1/F2 而不是自定义文字构造器没传 titlesuper(标题)别忘点了按钮控制台没输出call()返回了null返回有意义的结果字符串控制台提示Error: see logcatcall()抛了异常框架会捕获异常并打印到 logcat见 DevToolFragment.java按提示查日志getContext()拿到null函数没经过addFunction()注册必须走 Builder 注册框架会在注册时注入 Fragment见 DevTool.java小结三步扩展 DebugKit 预置函数仿写类继承DebugFunction构造器super(title)实现call()返回结果字符串抽逻辑具体代码放进私有方法像DumpSharedPreferences一样保持call()干净注册DevTool.Builder.addFunction(...).build()按钮即刻生效。想动手试试的话先克隆仓库到本地跑一遍示例工程git clone https://gitcode.com/gh_mirrors/de/debugkit再打开 app 模块的 ExampleActivity.java照着本文的三步走一遍你就能把自己的调试面板玩出各种花样了。【免费下载链接】debugkitEver hid debug functions in your UI? Here is now a clean way to do it!项目地址: https://gitcode.com/gh_mirrors/de/debugkit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考