尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Stetho 演进全览:从 CHANGELOG 看 Android 调试桥 1.0.0 到 1.6.0 的能力变迁

Stetho 演进全览:从 CHANGELOG 看 Android 调试桥 1.0.0 到 1.6.0 的能力变迁 Stetho 演进全览从 CHANGELOG 看 Android 调试桥 1.0.0 到 1.6.0 的能力变迁【免费下载链接】stethoStetho is a debug bridge for Android applications, enabling the powerful Chrome Developer Tools and much more.项目地址: https://gitcode.com/gh_mirrors/st/stetho本指南以 Stetho 官方 CHANGELOG.md 为骨架逐版本还原一个 Android 调试框架从原型可用到生态成熟的关键演进View 检查、数据库驱动、dumpapp 命令行、网络抓包与 Console 控制台等核心能力分别在哪个版本落地、修复了哪些典型缺陷并结合仓库源码Stetho.java、dumpapp 插件、StethoInterceptor.java 等给出可直接对照的实现细节。读完你可以把版本号与功能边界一一对应在集成或排查问题时快速定位这个能力是哪一版引入的、当时的坑在哪。Stetho 是 Facebook 开源的 Android 调试桥应用内启用后开发者可以直接用 Chrome DevTools 检查 View 层级、数据库、网络请求并可通过可选的dumpapp工具以命令行方式操作应用内部状态。仓库当前包含stetho、stetho-urlconnection、stetho-okhttp、stetho-okhttp3、stetho-js-rhino、stetho-timber、stetho-sample共 7 个模块见 settings.gradleCHANGELOG 完整记录了自 2015-02-18 的 1.0.0 初版到 2021-03-17 的 1.6.0 的每次发布。版本时间线速览版本发布日期里程碑主题1.0.02015-02-18首次公开发布1.0.12015-02-27SharedPreferences检查1.1.02015-04-02View 检查Elements 标签页1.1.12015-05-01stetho-timber、专利授权更新1.2.02015-09-11样式检查、投屏、Console 控制台、极简初始化1.3.02016-01-20okhttp3 支持、自定义数据库驱动、移除 HTTP 依赖1.3.12016-02-25Elements 性能大幅优化1.4.02016-09-07Accessibility 属性检查1.4.12016-09-13数据库加载回归修复1.4.22016-12-14多项稳定性修复1.5.02017-04-13通用 Socket 支持、Elements 扩展点1.5.12019-03-17Android P View 高亮崩溃修复1.6.02021-03-17AndroidX 升级最终版本1.0.02015-02-18初版发布与两条产品主线Stetho 的 1.0.0 是首次公开发布确立了此后所有版本的基本架构Chrome DevTools 桥通过本地 socket 把 Chrome 桌面浏览器的 DevTools 能力原生引入 Android 应用用户启动应用后在 Chrome 打开chrome://inspect即可点击 Inspect 进入调试界面。dumpapp 命令行工具一个可选的、面向应用内部状态的 CLI用 Python 脚本 scripts/dumpapp 接入。从当前源码看这套架构在 Stetho.java 的Initializer.start()中得到保留Stetho 会创建一个名为main的LocalSocketServer监听地址由AddressNameHelper.createCustomAddress(_devtools_remote)生成即stetho_进程名_devtools_remote这种命名见 scripts/stetho_open.py并通过ProtocolDetectingSocketHandler按魔法字节分发流量命中DumpappSocketLikeHandler.PROTOCOL_MAGICDUMP 版本号→ 走新版 dumpapp 协议命中GET /dumpapp/POST /dumpapp→ 走 1.0 时代的 HTTP 遗留协议DumpappHttpSocketLikeHandler该兼容代码在 1.3.0 之后仍保留见 Stetho.java其余全部匹配AlwaysMatchMatcher→ 走DevtoolsSocketHandlerChrome DevTools 协议。这一协议探测 分流的设计决定了后续多个版本的演进方向。1.0.12015-02-27SharedPreferences 检查与连接稳定性1.0.1 是第一个功能补丁版主要内容SharedPreferences检查现在可以在 Chrome DevTools 的 Resources 标签页里直接查看 SharedPreferences 文件内容。修复了 HTTP 响应缺少Content-Type头时不显示的问题#57、无条件的 Could not bind to socket 错误#49、同一进程出现重复 dumpapp 端点#37并使用原始进程名作为 Stetho socket 名以修复dumpapp选项格式化问题。SharedPreferences 检查在后续版本中持续完善最终沉淀为两部分DevTools Resources 侧由 SharedPreferencesHelper.java 提供读写能力命令行侧由 SharedPreferencesDumperPlugin.java 暴露dumpapp prefs命令1.3.0 起对条目按名称排序见下方。1.1.02015-04-02View 检查 dumpapp 三插件1.1.0 是功能大版本两条主线同时扩充View 检查Elements 标签页ICSAPI 15及以上支持完整的 View 检查亮点包括fragment实例虚拟地出现在层级中、View 高亮、点击设备上的 View 跳转到层级对应位置部分特性要求 JB MR2API 18。这一能力在仓库中的实现核心是 AndroidDocumentProviderFactory.java 与 AndroidDocumentProvider.java以及描述 View 各维度属性的 ViewDescriptor.java 等 descriptor 族类。ViewHighlightOverlays/ViewHighlighter提供高亮叠加实现——这正是 1.5.1 中 Android P 崩溃的修复对象。dumpapp 三个内置插件见 Stetho.java 的DefaultDumperPluginsBuilder.finish()dumpapp hprof便捷导出 HPROF 内存转储HprofDumperPlugin.javadumpapp crash用多种方式机械化终止进程CrashDumperPlugin.java简化了从发布构建中排除 Stetho 的方式在stetho-sample中实践。其他修复包括支持任意目录下的 SQLite 数据库#40后续演化为自定义DatabaseFilesProvider、支持同名多值头如 Cookie见 LightHttpMessage 相关实现、规避 AndroidLocalSocket#flush()吞吐问题、避免超大请求/响应体 OOM、为 INSERT/UPDATE/DELETE 语句提供可视化反馈。1.1.12015-05-01stetho-timber 与生态补全1.1.1 的关键变化stetho-timber模块把 Timber 的日志转发到 Stetho Console 控制台。实现见 StethoTree.java它继承Timber.Tree在log()中按优先级把VERBOSE/DEBUG → DEBUG、INFO → LOG、WARN → WARNING、ERROR/ASSERT → ERROR再通过CLog.writeToConsole写入 DevTools Console。使用方式是Timber.plant(new StethoTree())。更新了开源专利授权声明Facebook 官方公告。所有 View 检查特性在 ICSAPI 15及以上可用部分此前要求 JB MR2API 18。修复数据库在 DevTools UI 打开后被移除时的竞态、SharedPreferences 键快速增删时的崩溃、WAL 模式下 SQLite 的杂散文件忽略等。1.2.02015-09-11样式、投屏、Console 与极简初始化1.2.0 面向开箱即用与开发者体验做了大量投入View 属性支持Elements 下的 Styles 和 Computed 子标签页实现包含盒模型图和常用 View 属性摘要。对应源码是 CSS.javaDOM/CSS 域基于 Document.java 提供样式计算。投屏Screencasting点击右上角小屏幕图标即可实时预览手机屏幕鼠标/键盘支持规划中。实现见 ScreencastDispatcher.java。Console 标签页借助可选依赖stetho-js-rhino在 Console 中执行任意 Java/JavaScript。仓库中 RuntimeRepl.java 定义了 REPL 接口RhinoDetectingRuntimeReplFactory.java 会在 classpath 中存在stetho-js-rhino时自动启用 Rhino 引擎见 Stetho.javaRhino 具体实现见 stetho-js-rhino 模块。新的极简初始化 APIStetho.initializeWithDefaults(context)一行搞定实现见 Stetho.java——它默认装配 4 个 dumpapp 插件hprof/prefs/crash/files与全部 Chrome DevTools 域模块。新增网络标签页二进制数据的 pretty printer 扩展点#218后续演化为 AsyncPrettyPrinter 体系、透明请求解压#248见 DecompressionHelper.java、Elements 标签页 CTRLF 搜索 View 层级#225、SQL 控制台 EXPLAIN#238与 PRAGMA#222支持、dumpapp files插件#207见 FilesDumperPlugin.java、悬停 DOM 条目高亮 View 的 margin/padding#181、Elements 标签页 DialogFragment 支持#211。修复数据库与 SharedPreferences 条目按名称排序#231、View 层级内存泄漏#206、用 DOM 树 diff 修复 ListView 等层级边角问题#204、Fragment 支持#183。1.3.02016-01-20okhttp3、自定义数据库驱动与协议去 HTTP 化1.3.0 是影响最深远的架构版本okhttp3 支持新增stetho-okhttp3模块并宣告stetho-okhttp弃用。新拦截器 StethoInterceptor.java 通过 OkHttp 的addNetworkInterceptor接入每次请求生成requestId经NetworkEventReporterImpl上报请求/响应头与响应体流interpretResponseStream支持内容编码解压与 pretty print见 ResponseHandlingInputStream.java。1.5.1 修复了它被错误安装到应用拦截器链时的崩溃见下。移除 Apache HttpClient 依赖Stetho 内部换用轻量自研 HTTP 服务器LightHttpServer.javadumpapp 协议不再使用 HTTP。注意兼容性约定旧 dumpapp 脚本配新客户端仍可用但反过来的组合会挂起因为新协议不再识别 HTTP 帧而旧脚本会死等 HTTP 响应。当前 Stetho.java 中DumpappHttpSocketLikeHandler被保留用于兼容旧脚本。自定义数据库驱动支持完全自定义或基于 ContentProvider 的数据库驱动入口为DefaultInspectorModulesBuilder#provideDatabaseDriver。仓库中该 API 存在于 Stetho.java实现类为 SqliteDatabaseDriver.java 与 ContentProviderDatabaseDriver.java。官方示例在 SampleDebugApplication.java通过ContentProviderSchema.Builder声明表 URI 与投影列把系统日历 ContentProvider 作为数据库暴露给 DevTools。新增/修复Styles 子标签页显示 View 边距#282、SQLite 视图按表展示#289、dumpapp 支持STETHO_PROCESS环境变量与--process参数二选一#294实现见 scripts/dumpapp、CSS 属性按名称排序#297、JSON 序列化小修#292、View 检查内存泄漏修复#299仍可能有残留、stetho-js-rhinoAAR 附带 proguard 规则#305、数据库视图Long.MIN_VALUE格式化#313、ShadowDocument.getGarbageElements()NPE#332。1.3.12016-02-25Elements 性能与正确性1.3.1 聚焦 Elements 标签页对 DOM 树 diff 做了多项性能、正确性与稳定性改进核心逻辑位于 ShadowDocument.java 与 Document.java。同时修复了 dumpapp 脚本在多种边界条件下的问题#349见 scripts/dumpapp并从导出的 View styles 中移除静态字段#357相关逻辑在 ViewDescriptor.java。1.4.02016-09-07无障碍Accessibility属性1.4.0 在 Styles 标签页新增UI Accessibility 属性选中某个 View 后可查看它是否会/为何会被无障碍服务聚焦、发给无障碍服务的文本描述以及当前可用的 AccessibilityActions。这与仓库中的 AccessibilityNodeInfoWrapper.java 及 AccessibilityUtil.java 相呼应。同时修复了自定义DatabaseFilesProvider下SqliteDatabaseDriver的问题#367并让 Maven 默认打包aar#424。1.4.12016-09-13数据库加载回归1.4.1 是快速修复版v1.4.0 暴露了一个长期存在的数据库加载 bug本版通过让DefaultDatabaseProvider返回文件名修复#432。1.4.22016-12-14稳定性补丁包修复旋转屏幕且存在 retained fragments 时的 NPE#381支持 Android Studio Instant Run修复 ObjectMapper.java 相关反射问题#447支持ANDROID_ADB_SERVER_PORT环境变量#456实现见 scripts/stetho_open.py 的get_adb_server_port()默认 5037也支持ADB_SERVER_SOCKET中tcp:形式升级 OkHttp 3.4.2#454确保只有不可聚焦的子 View 描述才被父 View 借用#449。1.5.02017-04-13通用 Socket 与 Elements 扩展点1.5.0 是两个实验性方向的奠基版通用 Socket 支持可通过 Chrome DevTools 的 WebSocket API 检查任意 socketdemo 集成在stetho-sample未来计划对 okhttp 客户提供通用能力。Elements 标签页重大扩展点AndroidDocumentProviderFactory大幅扩展支持可编辑样式等深度定制为自定义 View 乃至整套渲染系统解锁新能力。修复多数据库提供者的数据库 id 映射#392、空 ViewGroup 的命中测试#521、LeakCanary 误报#513、数据库驱动运行时异常处理#514、移除对 support library 的意外硬依赖#511、stetho-rhino的 importClass/Package#406、HttpURLConnection头大小写不敏感#499、dumpapp 脚本 stdin 严重问题#512、TextViewDescriptor文本为空时 NPE#486。1.5.12019-03-17Android P 崩溃修复与收尾1.5.1 包含一次重要的兼容性修复修复 Android P 上 View 检查崩溃。原因是 View 高亮使用了 O 之前的旧 API在 P 中该 API 被移除导致 Elements 标签页高亮 View 时崩溃#607。修复后 Elements 标签页恢复可用。这一崩溃正对应仓库中 ViewHighlightOverlays.java 依赖系统 API 级别的历史实现。其他修复Elements 标签页支持跟踪窗口dialog、popup 等#325/295对应 WindowRootViewCompat.java 系列手动控制 Runtime 类对象跟踪为 J2V8 集成#614子类化 Runtime 及其他 devtools 域模块#612/613可自定义欢迎横幅Page类构造器#602见 Page.javaDefaultDumperPluginsBuilder.remove()真正生效#600SharedPreferences 条目排序#596dumpapp 支持ADB_SERVER_SOCKET变量#623见 scripts/stetho_open.py修复 dumpapp 脚本解析导致的连接失败#589WebSocket 会话信息在升级时正确显示#529拦截器装错 okhttp 链应用链而非网络链缺少 Connection 实例时不再崩溃#541/580对应 StethoInterceptor.java 中chain.connection()为空时抛出的IllegalStateException及引导性错误信息。1.6.02021-03-17AndroidX 升级与终版1.6.0 是本仓库的最终版本仅有一项变更AndroidX 升级修复 #662/665。这也意味着在 AndroidX 全面普及的今天1.6.0 是 Stetho 兼容现代 Android 工具链的最后一个官方版本。当前 README.md 中的依赖坐标即指向1.6.0如com.facebook.stetho:stetho:1.6.0、stetho-okhttp3:1.6.0、stetho-urlconnection:1.6.0、stetho-js-rhino:1.6.0。从 CHANGELOG 读出的能力演进主线纵览 13 次发布可以清晰看到四条演进主线View 检查1.1.0 引入 → 1.2.0 补样式/搜索 → 1.3.1 性能 → 1.4.0 无障碍 → 1.5.0 扩展点 → 1.5.1 修 Android P 崩溃从能看层级一路做到可定制、可编辑、可无障碍审计。数据库检查1.0.1 的 SharedPreferences → 1.1.0 任意目录 SQLite → 1.3.0 自定义/ContentProvider 驱动 → 1.4.1 回归修复驱动抽象DatabaseDriver2是这一线的最终形态。dumpapp CLI1.0.0 初版 → 1.1.0 内置三插件 → 1.2.0 files 插件 → 1.3.0 去 HTTP 化 STETHO_PROCESS→ 1.4.2/1.5.1 环境变量与脚本健壮性协议从 HTTP 迁移到自定义二进制帧scripts/dumpapp 中DUMP握手 !进入帧 1/2/_/x输出帧并持续吸收真实使用中的边角问题修复。网络检查1.2.0 解压/pretty printer → 1.3.0 okhttp3 → 1.4.2 Instant Run/大小写 → 1.5.1 拦截器链校验最终收敛为 okhttp3 拦截器 HttpURLConnection辅助类StethoURLConnectionManager双通道。对集成者而言这份 CHANGELOG 最直接的实用价值是版本选型如果项目已全面 AndroidX1.6.0 是唯一官方兼容版本如果项目仍在使用 support library 且需要老 API可在 1.5.1 停留而任何要深度定制 Elements 或数据库检查的需求起点都是 1.3.0 引入的扩展点。各版本的插件命令hprof、crash、files、prefs的完整用法可通过运行dumpapp plugin无参数触发各自的 usage 输出查看详见各插件源码与协议细节均可对照本仓库源码逐行验证。【免费下载链接】stethoStetho is a debug bridge for Android applications, enabling the powerful Chrome Developer Tools and much more.项目地址: https://gitcode.com/gh_mirrors/st/stetho创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表