2012-02-13 96 views
0

我有一个使用autotools构建共享库的遗留代码。这些库需要在Android应用程序中使用,所以我为它创建了一个简单的Java类和JNI包装器(作为共享的.so库)。Building APK从文件名中删除本地库版本号

我已经有了正确执行遗留编译系统的Android.mk脚本,为Java程序构建本地库并将其链接起来。

的输出文件如下:

libs/armeabi/lib-a.so.0 
libs/armeabi/lib-b.so.2 
libs/armeabi/lib-wrapper.so 

lib-wrapper.so取决于这两个库lib-alib-b。请注意,传统的autotools设置会将版本号添加到共享库文件名中 - 该文件名作为依赖项嵌入在lib-wrapper.so中。

# arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-readelf -d ./lib-wrapper.so 
Dynamic section at offset 0x7608 contains 28 entries: 
    Tag  Type       Name/Value 
0x00000001 (NEEDED)      Shared library: [lib-b.so.2] 
0x00000001 (NEEDED)      Shared library: [lib-a.so.0] 

问题:APK期间

(从Eclipse中如出口未签名的包。)构建的版本号
从文件名剥离。这会导致错误:

Cannot load library: link_image[1721]: 30 could not load needed library 'lib-b.so.2' for 'lib-wrapper.so'

因为APK包含文件lib-b.so

如何在APK构建过程中强制保留版本号?

因为使用相同的设置来构建x86库/ exec,所以修改遗留构建系统是不可能的(直到它是必须的)。

谢谢。

+0

嗨,你有没有找到一个解决方案,而不改变构建系统? – robotniko 2013-11-13 16:11:50

+0

不是。我们添加了一些脚本来手动重命名文件。但是我在一年之内没有触及过这个..现在用gradle,也许它已经解决了。 – 2013-11-14 09:42:58

回答

0

android链接程序无法识别不以“.so”结尾的共享库。您需要更改旧版构建系统创建的文件名。