滴滴开源 Booster:移动APP质量优化框架

Android-Booster-滴滴开源App的质量优化框架 Booster 是专门为移动应用而设计的简单易用、轻量级、功能强大且可扩展的质量优化工具包,其通过动态发现和加载机制提供可扩展的能力,换言之,Booster 也是一个移动应用质量优化框架。 立即下载

本文来自滴滴终端技术团队

项目地址:https://github.com/didi/booster

简介

Booster 是一款专门为移动应用设计的易用、轻量级且可扩展的质量优化框架,其目标主要是为了解决 APP 复杂度的提升而带来的性能、稳定性、包体积等问题。

本文给大家介绍下 Booster的功能和实现思路,算是一篇导读,希望能帮助到大家:

为什么是 Booster?

质量优化是所有应用开发者都要面临的问题,对于 DAU 千万级的 APP 来说,万分之一的崩溃率就意味着上千的用户受到影响,对于长时间在线的司机来说,司机端 APP 的稳定性关乎着司机的安全和收入,所以更是不容小觑。

随着业务的快速发展,业务复杂度不断提升,我们开始思考:

  1. 如何持续保证 APP 的质量?

  2. 当 APP 崩溃后,如何快速定位问题所属的业务线?

  3. 能不能在上线之前提前发现潜在的质量问题?

  4. 能不能对 APP 进行无侵入的全局质量优化而不需要推动各个业务线?

基于这些考虑,Booster 应运而生,经过一年多的时间不断打磨,Booster 成绩斐然。由于目前在质量优化方面基于静态分析的开源项目屈指可数,加上质量优化对于 APP 开发者而言门槛偏高,因此,我们选择了将 Booster 开源,希望更多的开发者和用户能从中受益。

功能与特性

动态加载模块

为了支持差异化的优化需求,Booster 实现了模块的动态加载,以便于开发者能在不使用配置的情况下选择使用指定的模块,详见:booster-task-all、booster-transform-all。

第三方类库注入

Booster 在进行优化的过程中,可能需要注入一些特定的类或者类库,为了解决注入类的依赖管理问题,Booster 提供了VariantProcessor SPI 让开发者可以轻松的扩展,请参考:ThreadVariantProcessor.kt#L12

性能检测

APP 的卡顿率是衡量应用运行时性能的一个重要指标,为了能提前发现潜在的卡顿问题,Booster 通过静态分析实现了性能检测,并生成可视化的报告帮助开发者定位问题所在,如下图所示:

其实现原理是通过分析所有的 class 文件,构建一个全局的 Call Graph, 然后从 Call Graph 中找出在主线程中调用的链路(Application、四大组件、View、Widget等相关的方法),然后再将这些链路以类为单位分别输出报告。

详见:booster-transform-lint。

多线程优化

业务线众多的 APP 普遍存在线程过载的问题,而线程管理一直是开发者最头疼的问题之一,虽然可以通过制定严格的代码规范来归避此类问题发生,但是对于组织结构复杂的大厂来说,实施起来成本巨大,而对于第三方 SDK 来说,代码规范则有些力不从心。为了彻底的解决这一问题,Booster 通过在编译期间修改字节码实现了全局线程池优化,并对线程进行重命名。

以下是示例代码:

class MainActivity : AppCompatActivity() {    override fun onCreate(savedInstanceState: Bundle?) {        super.onCreate(savedInstanceState)        setContentView(R.layout.activity_main)        getSharedPreferences("demo", MODE_PRIVATE).edit().commit()    }    override fun onStart() {        super.onStart()        Thread({            while (true) {                Thread.sleep(5)            }        }, "#Booster").start()    }    override fun onResume() {        super.onResume()        HandlerThread("Booster").start()    }}

线程重命名效果如下图所示:

详见:booster-transform-thread。

SharedPreferences 优化

对于 Android 开发者来说,SharedPreferences 几乎无处不在,而在主线程中修改 SharedPreferences 会导致卡顿甚至 ANR,为了彻底的解决这一问题,Booster 对 APP 中的指令进行了全局的替换。

详见:booster-transform-shared-preferences。

常量字段删除

无论是资源索引,还是其它常量字段,在编译完成后,就没有存在的价值了(反射除外),因此,Booster 将对资源索引字段访问的指令替换为常量指令,将其它常量字段从类中删除,一方面可以提升运行时性能,另一方面,还能减小包体积,资源索引(R)表面上看起来微不足道,实际上占用不少空间,以滴滴车主为例,资源索引相关的类就有上千个,进行常量字段删除后,减小了1MB左右。

详见:booster-transform-shrink。

Toast Bug 修复

为了彻底解决在 Android 7.1 中存在的bug: 30150688,Booster 对 APP 中的 Toast.show() 方法调用指令进行全局替换。

详见:booster-transform-toast。

资源压缩

APP 的包体积也是一个非常重要的指标,在 APP 安装中,图片资源占了相当大的比例,通常情况下,图片质量降低 10%-20% 并不会影响视觉效果,因此,Booster 采用有损压缩来降低图片的大小,而且,图像尺寸越小,加载速度越快,占用内存越少。

Booster 提供了两种压缩方案:

  1. pngquant 有损压缩(需要自行安装 pngquant 命令行工具)

  2. cwebp 有损压缩(已内置)

两种方案各有优缺点,pngquant 的方案不存在兼容性问题,但是压缩率略逊于 WebP,而 WebP 存在系统版本兼容性问题,总的来看,有损压缩的效果非常显著,以滴滴车主为例,APP 包体积减小了10 MB左右。

另外,像 Android Support Library 中包含有大量的图片资源,而且支持多种屏幕尺寸,对于 APP 而言,相同的图片资源,保留最大尺寸的即可。以 Android Support Library 为例,去冗余后,APP 包体积减小了1MB左右。

详见:booster-task-compression。

WebView 预加载

为了解决 WebView 初始化导致的卡顿问题,Booster 通过注入指令的方式,在主线程空闲时提前加载 WebView。

除上以上特性外,Booster 还提供了一些辅助开发的功能,如:检查依赖项中是否包含 SNAPSHOT 版本等等。

快速入门

在 buildscript 的 classpath 中引入 Booster 插件,然后启用该插件:

buildscript {    ext.booster_version = '0.4.3'    repositories {        google()        mavenCentral()        jcenter()    }    dependencies {        classpath "com.didiglobal.booster:booster-gradle-plugin:$booster_version"        classpath "com.didiglobal.booster:booster-task-all:$booster_version"        classpath "com.didiglobal.booster:booster-transform-all:$booster_version"    }}apply plugin: 'com.android.application'apply plugin: 'com.didiglobal.booster'

然后通过执行 assemble task 来构建一个优化过的应用包:

$ ./gradlew assembleRelease

构建完成后,在 build/reports/ 目录下会生成相应的报告:

build/reports/├── booster-task-compression│   └── release│       └── report.txt├── booster-transform-lint│   └── release│       ├── com│       └── org├── booster-transform-shared-preferences│   └── release│       └── report.txt├── booster-transform-shrink│   └── release│       └── report.txt├── booster-transform-thread│   └── release│       └── report.txt└── booster-transform-toast    └── release        └── report.txt

最后关于作者

作者目前在深圳,13年java转Android开发,在小厂待过,也去过华为,OPPO等,去年四月份进了腾讯一直到现在。等大厂待过也面试过很多人。深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。

我花了一年时间整理出一份腾讯T4级别的Android架构师全套学习资料,特别适合有3-5年以上经验的小伙伴深入学习提升。

主要包括腾讯,以及字节跳动,华为,小米,等一线互联网公司主流架构技术。如果你有需要,尽管拿走好了。至于能学会多少,真的只能看你自己

全套体系化高级架构视频;七大主流技术模块

部分展示;java内核视频+源码+笔记

免费分享

点击获取资料文档;

《腾讯T4级别Android架构师技术脑图+全套视频》​link.juejin.im

为什么免费分享?

我不想有很多开发者朋友因为门槛而错过这套高级架构资料,错过提升成为架构师的可能。国内程序员千千万,大多数是温水煮青蛙的现状,靠着天天加班,拿着外人以为还不错的薪资待遇。

请记住自身技术水平才是我们的核心竞争力,千万别把年轻和能加班当做本钱。

2023年全国赛C题《 电容电感测量装置》设计报告 参考下面网站的方案参考LCR测试仪,基本工作原理为给DUT加上正弦激励信号,然后测得该DUT两端的电压和流过DUT的电流,即可通过计算得到DUT的性质和参数。对于一个理想电容,电流相位应该超前电容两端电压90°。然而实际的电容存在损耗,可以等效为一个理想电容Cp​和一个理想电阻Rp​的并联,因此电流超前电压的相位将小于90°,这个角度差即为损耗角。假设DUT两端电压V˙Vcosωt,流过DUT的电流为I˙Isinωt−φ。 阅读详情

相关推荐

计算机图形学入门30:动画与模拟介绍

计算机图形学入门,动画与模拟,物理模拟,质点弹簧系统,运动学,粒子系统,动作捕捉。

YanisWu的博客 1485

滴滴开源 Booster:移动 APP 质量优化框架

桔妹导读:近期,滴滴在 GItHub 发布了第 18 个开源项目 Booster:一款专门为移动应用设计的易用、轻量级且可扩展的质量优化框架。一起来了解详情吧。——▍简介...

DiDi_Tech的博客 914

macOS 12.7.6部署Ollama+Dify避坑指南

本文介绍了在macOS 12.7.6系统下部署Ollama和Dify的详细步骤及避坑指南。主要内容包括:1)关闭系统完整性保护(SIP)以允许修改系统目录;2)安装特定版本的Docker(2.1.0.5)和docker-compose(v2.38.2)以避免兼容性问题;3)配置Ollama服务并下载nomic-embed-text和deepseek-r1:7b模型;4)针对macOS调整Dify的docker配置文件,包括延长超时时间、修改存储路径、增加资源限制等关键设置。文中提供了完整的命令操作步骤和配置

Hi20240217的博客 3101

滴滴 App 的质量优化框架 Booster,开源了!

android.view.WindowManagerBadTokenException: at android.view.ViewRootImpl.setView(ViewRootImpl.java)at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java)at android.view.WindowManagerImpl.addView(WindowManagerImpl.java4)at android.widget.Toa

2401_84010884的博客 1026

ROS2 Humble + TurtleBot4仿真环境搭建与避坑实战

本文详细介绍了ROS2 Humble与TurtleBot4仿真环境的搭建与避坑实战,包括环境配置、依赖安装、仿真调试和性能优化等关键步骤。通过保姆级教程和实用技巧,帮助开发者快速搭建稳定的机器人仿真环境,提升开发效率。特别推荐使用Ubuntu 22.04原生系统以避免常见问题。

weixin_30897233的博客 399

UFS 功能描述:UFS boot

UFS 启动过程介绍:启动配置,启动代码下载过程和安全性

m0_51720747的博客 1601

Android应用内存分析与优化 - 工具篇之Booster

本文介绍了滴滴开源的Booster工具,该工具旨在优化移动应用的性能、稳定性和包体积。Booster通过提供性能检测、多线程优化、资源压缩等功能,能够显著提升应用稳定性并减小包体积。

三翼鸟数字化平台的技术实践分享 1524

【第一章】核心思维:那个在此刻“消失”的 CPU

摘要:RTOS本质是"有状态的抢占"而非"多任务",单核MCU通过时间片分时复用实现任务切换。裸机编程的线性思维在RTOS中不再适用,开发者需接受代码随时被打断的现实。RTOS通过保存/恢复CPU寄存器组(上下文)实现任务切换,每个任务拥有独立栈空间。非原子操作(如全局变量自增)会导致竞态条件,必须使用临界区或互斥锁保护。RTOS编程需要建立并发思维,关注代码原子性、可重入性和栈空间分配。

一路往蓝-Anbo 的博客 103

移动APP质量优化框架 - Booster

简介 Booster 是一款专门为移动应用设计的易用、轻量级且可扩展的质量优化框架,其目标主要是为了解决 APP 复杂度的提升而带来的性能、稳定性、包体积等问题。 为什么是 Booster? 质量优化是所有应用开发者都要面临的问题,对于 DAU 千万级的 APP 来说,万分之一的崩溃率就意味着上千的用户受到影响,对于长时间在线的司机来说,司机端 APP 的稳定性关乎着司机的安全和收入,所以更是不容...

Android 开发架构 1243

ADB加密实例

主要介绍如何给adb命令增加加密访问

四儿家的小祖宗的博客 2910

【科研绘图系列】R语言绘制代谢物与临床表型相关性的森林图

本研究通过森林图展示了特定代谢物与三种临床比较之间的相关性分析结果。这种方法不仅直观地展示了每个代谢物的效应大小和不确定性,还允许我们比较不同代谢物在不同临床比较中的影响。森林图的结果表明,某些代谢物在特定临床比较中显示出显著的相关性,这可能为理解疾病的代谢机制提供了重要线索。

专注生信领域 564

滴滴Booster移动APP质量优化框架 学习之旅

推荐阅读: 滴滴Booster移动App质量优化框架-学习之旅 一 Android 模块Api化演练 不一样视角的Glide剖析(一) 一、Booster简介 Booster是滴滴最近开源一个的移动应用质量优化框架项目,专门为移动应用而设计的简单易用、轻量级、功能强大且可扩展的质量优化工具包,其通过动态发现和加载机制提供可扩展的能力。不过目前优化的功能点不过。 Booste...

weixin_30471065的博客 380

基于 Qt C++ 的智能工厂数字孪生系统

你想要实现一个基于 Qt C++ 的智能工厂数字孪生系统,核心是 **Qt 3D** 场景搭建 + **实时数据驱动** 设备模型。下面我将为你提供一个完整的解决方案,包含 **核心思路、实现步骤、完整代码示例** 和 **注意事项**。| **渲染层** | 3D 场景搭建、设备模型加载、实时动画渲染、用户交互。| **业务逻辑层** | 数据处理(滤波、转换)、设备状态管理、动画逻辑控制。| **数据层** | 实时采集设备数据(如传感器、PLC、MES 系统),提供数据接口。

寒寒豆豆软件公司的博客 193

滴滴开源框架Booster/DoraemonKit/DroidAssist,Transform Api

> 滴滴开源框架 1.质量优化框架Booster-https://github.com/didi/booster 滴滴在 Github 上开源了一个 Android App 的质量优化工具 Booster,通过动态发现和加载机制,提供了可扩展的能力。等于是一款移动应用的质量优化框架。 从特性上笼统来说,Booster 可以做到性能检测和优化、包体积瘦身、代码注入等。。 Boo...

ShareUs的专栏 2712

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

滴滴 App 质量优化黑科技,为了稳定都做了什么?

一. 序 当 App 达到一定体量的时候,肯定是要考虑质量优化。有些小问题,看似只有 0.01% 触发率,但是如果发生在 DAU 过千万的产品中,就不是小问题了。 滴滴这个独角兽的 DAU 早已过千万,自然有一些独到的优化方案。最近滴滴在 Github 上开源了一个 Android App 的质量优化工具Booster,通过动态发现和加载机制,提供了可扩展的能力。等于是一款移动应用的质量优化框架...

Android 开发架构 1044

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

滴滴 App 质量优化黑科技,都做了什么

点击上方“开发者技术前线”,选择“星标”每天14.00 在看 | 真爱作者: 承香墨影 | 来源:公众号 承香墨影一. 序当 App 达到一定体量的时候,肯定是要考虑质...

开发者技术前线-DevolperFront 1066

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

全面的iOS与前端应用性能测试工具列表及资源大全

本文详细列出了iOS和前端应用的性能测试工具,涵盖移动端、Web端、PC端等多个领域,包括抓包工具、自动化框架、性能监控平台等,并附有学习资料,为测试工程师提供全面参考。

2501_91600889的博客 323

Android 可能你想要的APK瘦身笔记

Android进阶学习全套手册Android对标阿里P7学习视频BATJ大厂Android高频面试题最后,借用我最喜欢的乔布斯语录,作为本文的结尾:人这一辈子没法做太多的事情,所以每一件都要做得精彩绝伦。你的时间有限,所以不要为别人而活。不要被教条所限,不要活在别人的观念里。不要让别人的意见左右自己内心的声音。最重要的是,勇敢的去追随自己的心灵和直觉,只有自己的心灵和直觉才知道你自己的真实想法,其他一切都是次要。

2401_83916326的博客 1023
上一篇: 那些java半路转Android开发者现状;后悔转行,java开发最吃香
下一篇: 腾讯程序员月薪7万,小编感觉自己像码畜...
Android_2012_
博客等级 码龄8年 7粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值