构建APK从文件名中删除本机库版本号

时间:2012-02-13 14:20:16

标签: android native apk version-numbering nativelibrary

我有一个使用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-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库/ exec。

谢谢。

1 个答案:

答案 0 :(得分:0)

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