牛逼!抖音开源又一力作

微信扫一扫,分享到朋友圈

牛逼!抖音开源又一力作

大家好,我是Lab哥。

大家都喜欢玩抖音,知道抖音是一个非常好的技术团队,除了做App,他们也开源了一些方案,比如今天的 BoostMultiDex

BoostMultiDex是一个用于 Android 低版本设备(4.X 及以下,SDK < 21)快速加载多 DEX 的解决方案。

背景

我们知道,Android低版本(4.X及以下,SDK < 21)的设备,采用的Java运行环境是Dalvik虚拟机。它相比于高版本,最大的问题就是在安装或者升级更新之后,首次冷启动的耗时漫长。

这是非常影响用户的使用体验的。尤其在海外,像东南亚以及拉美等地区,还存有着很大量的低端机。4.X以下低版本用户虽然比较少,但对于抖音及Tiktok这样有着亿级规模的用户的APP,即使占比10%,数目也有上千万。因此如果想要打通下沉市场,这部分用户的使用和升级体验是绝对无法忽视的。

这个问题的根本原因就在于,安装或者升级后首次MultiDex花费的时间过于漫长。为了解决这个问题,我们挖掘了Dalvik虚拟机的底层系统机制,对DEX相关处理逻辑进行了重新设计,最终推出了BoostMultiDex方案,挽救低版本Android用户的升级安装体验。

技术要点

BoostMultiDex方案的技术实现要点如下:

  1. 利用系统隐藏函数,直接加载原始DEX字节码,避免ODEX耗时

  2. 多级加载,在DEX字节码、DEX文件、ODEX文件中选取最合适的产物启动APP

  3. 单独进程做OPT,并实现合理的中断及恢复机制

更重要的是,BoostMultiDex已经在抖音/TikTok亿级全球用户上验证通过,可以说涵盖了各个国家、各种复杂情况的Android机型,目前业界其他大型APP都很难涉及到如此广泛的规模。由此,我们也解决了各种奇怪的兼容性问题,最大程度上确保了技术方案的稳定性。

快速接入

build.gradle的dependencies中添加依赖:

dependencies {
... ...
// For specific version number, please refer to app demo
implementation 'com.bytedance.boost_multidex:boost_multidex:${ARTIFACT_VERSION}'
}

与官方MultiDex类似,在Application.attachBaseContext的最前面进行初始化即可:

public class YourApplication extends Application {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
BoostMultiDex.install(base);
... ...
}

编译构建

如果想自行编译打包,需要使用R16B版本的NDK以支持armeabi架构,如果不需要,可以直接在boost_multidex/build.gradle中去掉此依赖。

执行以下命令即可构建本地aar包:

./gradlew :boost_multidex:assembleRelease

产物为 boost_multidex/build/outputs/aar/boost_multidex-release.aar

性能对比

以上是在抖音上测得的实际数据,APK中共有6个Secondary DEX,显而易见,BoostMultiDex方案相比官方MultiDex方案,其耗时有着本质上的优化,基本都只到原先的11%~17%之间。 也就是说BoostMultiDex减少了原先过程80%以上的耗时。 另外我们看到,其中有一个机型,在官方MultiDex下是直接崩溃,无法启动的。使用BoostMultiDex也将使得这些机型可以焕发新生。

性能对比如下:

点击阅读原文查看

项目地址: https://github.com/bytedance/BoostMultiDex

———-  END  ———-

重磅!后厂技术官-技术交流群已成立

扫码可添加后厂技术官助手, 可申请加入后厂技术官大群和细分方向群,细分方向已涵盖: Java、Python、机器学习、大数据、人工智能 等群。

一定要备注: 开发方向+地点+学校/公司+昵称 (如Java开发+北京+快手+阿信) ,根据格式备注,可更快被通过且邀请进群

▲长按加群

推荐阅读

•  Fastjson在阿里内网被喷成一坨屎了? 作者回应..

•  NOI金牌得主、姚班毕业生张昆玮放弃谷歌高薪回乡教二本,网友:很羡慕他

•  今生不再见, VS Code !

•  任正非:华为没有 996,更没有 007!

•  苹果为什么不封杀 Flutter 呢?

推荐一个技术号

Github实验室, 由国内一线大厂专家、985博士、硕士组成的团体运营。 主要分享和研究业界实用、有趣的开源项目,学习资源,开发工具,学术交流。

关注就无套路送你一份5000页Java面试最强合集PDF。

最近面试BAT,整理一份面试资料 大厂Java面试通关指北 ,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。

获取方式:点“ 在看 ”,关注公众号并回复  BAT  领取,更多内容陆续奉上。

如有收获,点个在看,诚挚感谢 明天见(。・ω・。)ノ♡

Python新手入门基础

上一篇

中秋最圆月出现在10月2日凌晨,最佳赏月时间公布

下一篇

你也可能喜欢

牛逼!抖音开源又一力作

长按储存图像,分享给朋友