Android最大共享库大小

时间:2013-02-14 14:17:31

标签: android memory-management shared-libraries

我正在尝试将一些Linux代码移植到Android。我意识到代码将涉及几个jni引用的.so共享库,其大小超过20 mb。

我想知道每个.so是否有最大尺寸?

此外,我的应用程序可以拥有.so文件的最大总大小,因为.so文件实际上是内存映射的吗?

我用Google搜索并发现几乎没有,所以描述这个的资源会非常有用

2 个答案:

答案 0 :(得分:5)

据我所知,.so文件的大小没有限制。我见过几个Android应用程序,其中使用了超过20MB的共享库。

但是,在Android中,您的进程中加载​​的.so文件数量有限制。限制通常设置为128.请参阅http://androidxref.com/4.2_r1/xref/bionic/linker/linker.cpp#286

具体数量可能因设备制造商而异,因为它们通常会改变常数。您可能认为该数字非常大,但请注意,即使您没有加载自己的任何共享库,也会在您的进程中加载​​许多内置的共享库。

我不能告诉你20个共享库将会或不会超过限制。它取决于设备。如果您担心,可以将这20个库合并为一个巨大的库文件。

答案 1 :(得分:1)

这是Android动态链接器共享库数量的限制。 但我发现自4.3以来最近删除了限制。 在4.2.2中,有一个SO_MAX,请参阅note of linker.cpp in 4.2.2。 但在4.3中,SO_MAX已删除,请参阅note of linker.cpp in 4.3