我有一个使用自动工具构建共享库的遗留代码。这些库需要在 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 库/执行程序。
谢谢你。