我有一个使用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-a
和lib-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,所以修改遗留构建系统是不可能的(直到它是必须的)。
谢谢。
嗨,你有没有找到一个解决方案,而不改变构建系统? – robotniko 2013-11-13 16:11:50
不是。我们添加了一些脚本来手动重命名文件。但是我在一年之内没有触及过这个..现在用gradle,也许它已经解决了。 – 2013-11-14 09:42:58