0

我正在努力从 Gnustl迁移到 LibC++,并且在 Android 中从 gnustl 迁移到 LibC++ 后,我观察到总体大小增加了 8-10% 。我们添加的一些可以解释大小的附加依赖项是,

• 在每个so 中静态链接来自libc++ 的附加libunwind.a。

• 重写typeInfo 类,尤其是由于检查typeInfo == 运算符的行为不同。

但即使在这两个变化之后,我也不明白是什么导致了整体尺寸的增加。我最初怀疑 LibC++ 的引入以某种方式禁用了调试符号剥离,但这也不是真的,我已经通过显式禁用-Wl,--gc-sections & -ffunction-sections -fdata-sections 进行了验证,这进一步增加了生成的 SO 和 APK。

由于许多其他人已经经历了这个循环,所以我想问一下,其他人是否也观察到了使用 LibC++ 时增加大小的这些副作用?

谢谢/

4

1 回答 1

0

我的建议是使用 Android Studio 的分析工具分析您的 APK:为此,在 Android Studio 中只需转到 Build -> Analyze APK -> 选择任何已构建的 APK 文件,最后查看 APK 中包含的每个文件的大小:

分析APK示例

然后将其与使用 Gnustl 的 APK 进行比较

通常最增加 APK 大小的是本机 .so 文件。可能 libc++ 的本机文件比 Gnustl 的大。或者更可能的是 libg++ 为 Gnustl 没有的一些 CPU 架构添加了 .so 文件。我的意思是,更多的目录可能会出现在 lib 目录中。

如果是第二种情况,您可以在 Google Play 上发布 APK 时使用 Android App Bundle,以确保设备只下载最合适的 .so 文件而不是其他文件。是什么大大减少了已安装应用程序的总大小。

于 2019-06-27T08:33:00.240 回答