Android

邪恶机器人

112 篇文章
Android
Compose 动画的 animate*AsState 底层怎么实现的

Compose 动画的 animate*AsState 底层怎么实现的

Compose 动画的 animate*AsState 底层怎么实现的 Compose 动画的 animate*AsState 底层怎么实现的 前段时间在做一个折叠面板的动画优化时,我踩到了一个挺隐蔽的坑。表现很简单:用 animateDpAsState 控制一个 Column 的高度展开,如果用户

Kotlin 的 Contracts API,告诉编译器一些事

Kotlin 的 Contracts API,告诉编译器一些事

Kotlin 的 Contracts API,告诉编译器一些事 「Kotlin 的 Contracts API,告诉编译器一些事」 去年重构一个老旧 Android 模块时,我抽了一个非常普通的高阶函数,想给 Trace.beginSection 和 Trace.endSection 包一层,让 S

Dynamic Feature Module 上线一年后的真实体验

Dynamic Feature Module 上线一年后的真实体验

Dynamic Feature Module 上线一年后的真实体验 「Dynamic Feature Module 上线一年后的真实体验」 去年 Q2,我们把应用里两个最重的业务块拆成了 Dynamic Feature Module。动机很直接:Base APK 体积突破了 55MB,在东南亚市场的

Hilt 的编译时代码生成,到底生成了什么

Hilt 的编译时代码生成,到底生成了什么

Hilt 的编译时代码生成,到底生成了什么 「Hilt 的编译时代码生成,到底生成了什么」 前阵子把项目里的 Hilt 从 2.44 升到 2.48,CI 上跑了一次 clean build,忽然注意到日志里刷出来两百多行 Generated source file: ... 的路径打印。这让我意识

Material You 动态取色,实际项目中落地难点

Material You 动态取色,实际项目中落地难点

Material You 动态取色,实际项目中落地难点 Material You 动态取色,实际项目中落地难点 去年把主工程 Material Components 从 1.5.0 升到 1.9.0 时,我们顺手打开了 DynamicColors。测试包发出去第二天,设计组就在企业微信里扔了一张截图

Firebase Performance Monitoring,采集开销实测

Firebase Performance Monitoring,采集开销实测

Firebase Performance Monitoring,采集开销实测 Firebase Performance Monitoring,采集开销实测 最近把项目里的 Firebase BOM 从 31.5.0 升到 32.7.2 之后,冷启动数据开始出现一个奇怪的偏移。用 Macrobench

AccessibilityService 的滥用检测,现在的限制有多严

AccessibilityService 的滥用检测,现在的限制有多严

AccessibilityService 的滥用检测,现在的限制有多严 AccessibilityService 的滥用检测,现在的限制有多严 前阵子给一个内部工具做 Android 14 适配,核心功能依赖 AccessibilityService 遍历节点做自动化点击。代码在 Android 1

ConcurrentLinkedQueue 的无锁队列,适合什么场景

ConcurrentLinkedQueue 的无锁队列,适合什么场景

ConcurrentLinkedQueue 的无锁队列,适合什么场景 「ConcurrentLinkedQueue 的无锁队列,适合什么场景」 去年在优化一个相机预览模块的帧缓冲区时,我把原来的 LinkedBlockingQueue 换成了 ConcurrentLinkedQueue。当时的想法很

Shizuku 权限方案,无 Root 调用系统 API 的实践

Shizuku 权限方案,无 Root 调用系统 API 的实践

Shizuku 权限方案,无 Root 调用系统 API 的实践 「Shizuku 权限方案,无 Root 调用系统 API 的实践」 Android 14 上,我尝试在应用内直接通过反射关闭另一个应用的通知权限。代码刚跑起来就收到了一个无情的 SecurityException,日志很直白:uid