我有一个使用autotools构建共享库的遗留代码。这些库需要在Android应用程序中使用,所以我为它创建了一个简单的Java类和JNI包装器(作为共享的.so库)。
我已经有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导出未签名的包)版本号
从文件名中删除。这会导致错误:
无法加载库:link_image [1721]: 30无法为'lib-wrapper.so'
加载所需的库'lib-b.so.2'
因为APK包含文件lib-b.so
。
如何在APK构建期间强制保留版本号?
修改遗留构建系统是不可能的(直到它是必须的),因为相同的设置用于构建x86库/ exec。
谢谢。
答案 0 :(得分:0)
android链接器无法识别不以“.so”结尾的共享库。您需要更改旧版构建系统创建的文件名。