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

时间:2015-04-30 14:00:17

标签: java android java-native-interface apk native

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

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

我们考虑使用扩展方法,但我们不知道是否可能。 我们希望将所有本机库打包为zip并将其作为扩展上传到google,然后在运行时使用loadLibrary方法来加载相应的库。有可能吗?

随意建议您认为可能适合的任何其他解决方案。

感谢。

2 个答案:

答案 0 :(得分:0)

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

但是,您可以做的是在扩展文件中包含您的.so库,创建一个Starter活动,在首次运行时将这些SO提取到系统路径,然后启动您的应用程序,调用:

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

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

您可以创建SOLoaderActivity,它将成为您的应用启动的Activity。首次运行时,活动将提取.so,并将首选项写入SharedPreferences。之后,它只检查首选项,如果设置了pref,则启动其他Activity。

我不确定loadLibrary如何处理完整路径,但System.load可以执行此操作。

答案 1 :(得分:0)

我认为将所有不同的.so文件打包成一个拉链是不明智的。您可以选择仅下载,解压缩和加载一个相关库 - 所有这些都在运行时。

但如果你自动化他们的构建,那么管理“多个apks”并不是什么大事,就像所描述的那样here