Android 技术文章归档

Native/H5 路由灰度切换:用 RedirectRouterInterceptor 实现零风险页面迁移

同一入口存在 Native 和 H5 两种实现时,如何在路由层安全地灰度切换?本文介绍 RedirectRouterInterceptor 的通用设计,通过远程配置控制落点,配合稳定散列、参数映射、兜底策略和结构化监控,让 Native 新页面平滑上线,异常时快速回滚。

SmartDependency 源码/AAR 双模式依赖体系:让模块化工程既快又稳

在大型 Android 工程中,模块数量增长后依赖方式直接影响研发效率。本文介绍一种源码/AAR 双模式依赖体系,通过统一注册、配置切换、版本治理和 CI 约束,让开发者按需打开源码模块,同时保证发布时回归二进制真实形态。

动态 Launcher Icon 与启动入口切换:换图标背后的工程治理

动态 Launcher icon 看似只调用一次 PackageManager,实际却涉及 Manifest 声明、状态机、回退策略、桌面兼容和灰度控制。本文介绍一种通用的动态启动入口切换方案,讲清楚为什么"换图标"的能力需要完整的入口状态管理设计。

启动框架分阶段初始化:background/activity 两类 StartType 的设计与实践

App 启动阶段承载大量初始化逻辑,如果全部堆在 Application 中,冷启动耗时不可控。本文介绍一种分阶段初始化框架,将任务按 background 和 activity 两类 StartType 拆分,配合依赖声明、线程调度、异常降级和耗时监控,让初始化在正确时间完成必要工作。

图片加载稳定性实战:自定义 SSL 确认与 DoH DNS 双管齐下

移动端图片加载看似简单,但用户看到的头像不显示、内容图片灰块、首屏瀑布流空白,背后往往是证书链校验失败、DNS 被污染、运营商局部解析异常等问题。本文介绍图片网络层的两项稳定性增强:自定义 SSL 确认和 DoH DNS 解析。

图片加载统一门面:用 ImageUrlProcessor 动态裁剪与门面模式告别混乱的图片代码

图片加载是移动端体验的基础能力,但如果每个页面都直接调用底层库,URL 拼接规则、尺寸参数、预加载逻辑就会散落全项目。本文介绍一种图片加载统一门面设计,通过 ImageUrlProcessor 集中处理动态裁剪,配合门面接口、预加载调度和监控,让业务只关心展示意图。

字节码 try-catch 插桩治理第三方 Crash:用 hookPoint 精准止血

第三方 SDK 的 crash 无法通过源码修复时,字节码 try-catch 插桩是一种工程止血手段。本文介绍 hookPoint 配置驱动的通用方案:如何在编译阶段精确命中目标方法,包裹保护逻辑,捕获非致命异常并上报,同时避免掩盖真实问题。

异步 Inflate 管理器:用线程池预加载与安全回退加速首帧渲染

Android 页面首帧耗时不只来自网络和图片,复杂 XML 布局在主线程的 inflate 过程同样不可忽略。本文介绍一种异步 Inflate 管理器设计,通过线程池提前创建 View,用 MutableContextWrapper 替换上下文保证安全,失败时自动回退到 UI 线程同步 inflate。

截屏检测与支持浮层:在用户最想求助的时刻提供入口

用户遇到问题时最自然的动作之一是截屏。本文介绍一种截屏检测与支持浮层设计,覆盖系统媒体监听、去抖策略、隐私保护、浮层触发和反馈链路闭环,把"用户准备离开应用去求助"的瞬间转化为站内反馈入口。

深入 Compose Multiplatform 桌面端实战:从 JVM 窗口管理到平台互操作的跨桌面 UI 工程全链路

从 Electron 迁移到 Compose Desktop 的实战复盘,覆盖 JVM 窗口系统、菜单栏、拖拽、系统托盘、平台互操作及打包分发全链路,启动速度提升 60%,内存降低 70%,适合 Android/Kotlin 团队构建桌面工具。

网络诊断体系设计:让每一次失败都可追溯、可解释

移动端网络问题最难处理的地方不是失败本身,而是失败之后很难还原现场。本文拆解一种通用的网络诊断体系设计:如何定义诊断分层、采集请求上下文、编排诊断任务、输出可读报告,同时控制隐私和性能成本。

自研缓存策略体系:用 FirstCache/FirstNet/OnlyNet/Timeout 终结混乱的缓存代码

缓存策略看起来只是"先读缓存还是先请求网络"的选择,实际落地却会影响页面速度、弱网体验、数据一致性和代码复杂度。本文介绍一种自研缓存策略体系,用统一策略枚举、CacheManager 读写和 Flow 数据流封装,让页面只订阅状态,不拼装缓存细节。

路由预取与请求合并:让首屏数据"提前跑"且"不重复跑"

页面打开速度不只取决于接口耗时,还取决于请求发起得够不够早、重复请求能不能被压住。本文介绍 PrefetchRouterInterceptor 在路由阶段提前发起高确定性请求,配合 MergeHolder 在网络层合并重复请求,一条链路解决"发得早"和"别重复发"两个问题。

深入 Android Simpleperf 火焰图分析:从 CPU 采样到性能瓶颈定位的全链路

本文深入解析 Android Simpleperf 工具的原理与实战,从火焰图生成、调用栈分析到冷启动优化、多线程 CPU 分配,并结合 Systrace 构建互补的性能定位方法论。

Android App 启动优化应该先看哪些指标?

整理 Android 启动优化的关键指标、阶段拆分、Perfetto trace 观察点和线上治理优先级。

Android Binder 是什么?一篇看懂 Binder 通信模型

用问题驱动的方式解释 Android Binder 是什么、为什么系统服务依赖 Binder、一次跨进程调用会经过哪些角色。

Android CI/CD 质量门禁应该包含什么?

整理 Android CI/CD 中构建、测试、Lint、签名、性能基准、发布和回滚的质量门禁设计。

Android Gradle 构建慢怎么分析?

整理 Android Gradle 构建慢的分析路径,包括 Build Scan、Configuration Cache、KSP、任务依赖和缓存命中。

Android Perfetto 怎么入门?从一条 Trace 开始定位性能问题

面向 Android 开发者介绍 Perfetto 入门方法,覆盖 trace 抓取、关键轨道、Binder、调度、渲染和启动分析。

AudioFlinger 在 Android 音频系统中负责什么?

解释 AudioFlinger 在 Android 音频链路中的角色,包括混音、线程、AudioTrack、低延迟播放和 AAudio。