推特竞品Threads App是如何制作的?


Threads 是 Instagram 团队推出的一款新应用,用于“分享文本更新和加入公共对话”。也许这已经在计划中了一段时间了,也许 Meta / Instagram 团队认为人们可能正在寻找一款通过文本分享更新的新应用程序。

Meta 投入了大量的内部资源来优化移动性能。
其中许多应用程序都加载了 Emerge Insights,Meta 移动应用程序经过了高度优化。Meta 使用的一些模式并非典型的最佳实践,但 Meta 拥有能够很好地实现这一目标的基础设施和工程能力。

线程 Android 应用程序
分析链接版本: 289.0.0.77.109 下载大小: 72.3MB _


  • 与其他 Meta 应用程序一样,Threads 作为通用 APK 提供。AAB 被认为是最佳实践,但 Meta 积极优化其通用 APK — 混淆资源、自定义打包共享库以及使用Redex
  • 令人惊讶的是,Threads 正在传送调试代码。Threads 有调试包,如和。 com.instagram.debug.devoptions.sandboxselector com.instagram..debug.quickexperiment
  • 他们在应用程序的某些部分使用 React Native -InstagramBundle.js.hbc.spk.xz可能是Hermes字节码的压缩版本 ( js.hbc)
  • 有一个大.spo文件,看起来像是不同本机库的编译版本。附带有一个元数据文件:arm64-v8a/librtc.so 11336240 bda527a307edd868700fccfab15481f403d3f39363289d5d6a717579f284bed7 arm64-v8a/libgojni.so 11330024 616915938eb1face6aa3392aedab8bddce280f2b84423377ac65896a6b3faad7 arm64-v8a/libarfxgraphicsmerged.so 9710600 afb00aa881a63b20371e447dbbad61fefcf4df2c23c922a9e44e2171d7a649ad ... 我们的猜测是.spo文件是所有本机库的合并版本,第二个条目是偏移量/大小,第三个条目是校验和
  • 从 @richz(Threads 工程师)的帖子来看,Threads 主要使用 Jetpack Compose 作为其 UI。与整个 dex 大小相比,dex 的组成部分相对较小(约 130 KB)。这可能意味着他们能够高效地使用 Compose 和/或共享 Instagram 的代码,从而使使用量看起来比实际情况要少。

与 Instagram 应用程序的相似之处
Threads 似乎与Instagram 应用程序(v289.0.0.25.49)共享很多内容。Threads 和 IG 的情况与上述类似。两个应用程序之间也是相同的。鉴于 Threads 与 Instagram 高度集成,这些应用程序共享代码是有道理的。 InstagramBundle.js.hbc.spk.xz/assets/dsp

线程 iOS 应用程序
分析链接版本: 289.0 安装尺寸: 244.2 MB

iOS 上的 Threads 有两点突出:

  1. Threads 有 0 个动态库,而Facebook 应用程序大量使用动态框架。
  2. Threads 拥有我们见过的最大的插件之一。BarcelonaShareExtension是 81 MB。就上下文而言,最大的Instagram插件 -为 23.5 MB。大小为 5.6 MB InstagramNotificationExtensionInstagramShareExtension

有趣的是,InstagramFBSharedFramework与 Thread 的BarcelonaShareExtension 有很多相同的元素。

一些值得注意的共享元素

  • FilterAsset.bundle
  • ig_signals_cupid_better_recall_v1.mlmodelc&ig_signals_cupid_v2.mlmodelc
  • 资产目录几乎一模一样

与 Android 应用程序一样,他们似乎能够在 Threads 和 Instagram 之间共享大量代码,以帮助加快开发速度。Threads 团队希望快速行动,从 Instagram 获取任何可能的代码并将其推送到需要的地方。

查看线程启动时间
虽然我们的大部分 X 射线都被混淆了,但我们能够使用ETTrace来查看线程启动时间

使用 ETTrace 生成线程启动的火焰图
如果您想亲自查看 Thread 的启动时间,可以下载此JSON 文件并将其上传到ETTrace

我们正在使用模糊的构建,因此您只能从堆栈跟踪中获得这么多信息。我们确实看到有大量的预主时间(从收集的跟踪中大约 50 MS)。

还有一个WKWebView在应用程序启动时初始化的过程,速度相当慢。这表明他们的登录体验不是原生的,并且他们正在显示网络视图,或者他们在后台使用它来进行跟踪。

下图Threads 启动中 `WKWebView` 的亮点


长话短说
通过查看公共 Meta 构建,我们只能收集到这么多信息,但看起来 Threads 在这两个平台上都大量借鉴了 Instagram。看看这种情况是否会改变将会很有趣。