由于大量本机库,APK 大小超过 50MB

APK size exceed 50MB due to large amount of native libraries

我们的应用程序支持 7 种不同的架构。 我们在 java 代码中使用了一个本地库。 当我们构建单个 APK 时,它的大小达到 50MB 限制,因为我们有 7 个本机库实例打包到 APK 中。 编译后库的每个实例大约10MB。

我们不想使用多个 APK 的方法来解决它,因为超过 1 个 APK 很难管理。

我们想过用扩展的方法,但不知道是否可行。 我们想将所有本机库打包成一个 zip 并将其作为扩展上传到 google,然后在运行时使用 loadLibrary 方法来加载适当的库。可能吗?

欢迎提出您认为可能合适的任何其他解决方案。

谢谢。

我认为不可能在不在应用程序的 apk 或设备(包括扩展)中的 .so 上调用 loadLibrary。

不过,你可以做的是将你的 .so 库包含在一个扩展文件中,创建一个 Starter activity 将这些 SO 提取到第一个 运行 的系统路径中,然后开始你的应用程序,调用:

 System.loadLibrary("/path/to/your/lib/yourlib.so");

您可以使用资产文件夹,将.so 视为资产,并将其解压到给定路径。

您可以创建 SOLoaderActivity,它成为您的应用启动的 Activity。首先 运行,activity 提取 .so,并将首选项写入 SharedPreferences。之后,它只检查首选项并在设置首选项后启动您的另一个 Activity。

我不确定 loadLibrary 如何处理完整路径,但 System.load 可以做到。

我认为将所有不同的 .so 文件打包到一个 zip 中是不明智的。您可以选择仅下载、解压缩和加载一个相关库 - 全部在运行时进行。

但是管理 "multiple apks" 并不是什么大问题,如果您将他们的构建自动化,就像 here 所描述的那样。