2014-02-27 28 views
0

我有一个企业应用程序,我手动部署(不使用Google Play),它使用一些.so库进行映射(ArcGIS)。但是,libs文件夹中的.so文件(arm,armv7a,x86)将.apk大小从3mb扩展到21mb。我并不特别想要删除.so文件中的一个(取消对该体系结构的支持),或者每个体系结构都有一个.apk文件。从.apk分离.so库。

任何人都可以想到一种方式,我可以更新我的应用程序,而不包括每个更新.apk中的.so文件吗?

回答

0

是的,您可以让应用程序的Java部分手动将相应的.so文件下载到应用程序的内部存储文件夹中,并将它们标记为可执行文件。

然后,您将不得不使用System.load()和.so文件的完整路径名(而不是System.loadLibrary())和修剪后的库名加载它们。

这里最大的问题是,你现在负责自己匹配ABI,更重要的是,提供自己的保护,防止被骗到安装修改或冒名顶替的库,这可能会在你的应用程序的名义上做一些邪恶的事情,使用它的权限。

当然,您必须确保在安装它们之前不要尝试调用任何本机方法。

你也可以考虑提供的.so文件作为二进制资产在其各自的骨架的apk具有共享用户ID(和匹配证书)作为主要的apk

或者你可以简单地让特定平台.apk的每个目标,只包含一个.so,并让你的分发系统选择正确的(尽管这对升级问题没有帮助)。

+0

谢谢,将有一个在那 – user3330836

+0

去了你的第一个方法(保持.so使用System.load()分离和加载)。不幸的是,ArcGIS会在内部加载库,所以即使我手动加载库,当ArcGIS尝试加载.so iteslf时,我仍会崩溃并刻录。尝试将.so复制到应用程序/设备lib文件夹,但没有雪茄(只读) – user3330836

+0

您可以制作一个小的虚拟文件夹(在每个ABI中)以供加载,或者您可以尝试捕捉故障是致命的 - 它通常不是),或者你可以修改你拥有的这个库的形式,即使它不是源代码。 –