1

我有一个使用自动工具构建共享库的遗留代码。这些库需要在 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-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 导出未签名的包)版本号
从文件名中删除。这会导致错误:

无法加载库:link_image [1721]:30 无法为“lib-wrapper.so”加载所需的库“lib-b.so.2”

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

如何在 APK 构建期间强制保留版本号?

修改遗留构建系统是不可能的(除非它是必须的),因为相同的设置用于构建 x86 库/执行程序。

谢谢你。

4

1 回答 1

0

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

于 2012-03-08T20:17:38.067 回答