【发布时间】:2012-03-04 22:43:05
【问题描述】:
我有一个使用自动工具构建共享库的遗留代码。这些库需要在 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 库/执行程序。
谢谢。
【问题讨论】:
-
您好,您是否找到了不改变构建系统的解决方案?
-
不。我们添加了一些脚本来手动重命名文件。但是我已经有 1 年没碰过了所以.. 现在有了 gradle,也许它已经解决了。
标签: android apk native version-numbering android-native-library