我有一個使用autotools構建共享庫的遺留代碼。這些庫需要在Android應用程序中使用,所以我爲它創建了一個簡單的Java類和JNI包裝器(作爲共享的.so庫)。Building APK從文件名中刪除本地庫版本號
我已經有了正確執行遺留編譯系統的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中如出口未簽名的包。)構建的版本號
從文件名剝離。這會導致錯誤:
Cannot load library: link_image[1721]: 30 could not load needed library 'lib-b.so.2' for 'lib-wrapper.so'
因爲APK包含文件lib-b.so
。
如何在APK構建過程中強制保留版本號?
因爲使用相同的設置來構建x86庫/ exec,所以修改遺留構建系統是不可能的(直到它是必須的)。
謝謝。
嗨,你有沒有找到一個解決方案,而不改變構建系統? – robotniko 2013-11-13 16:11:50
不是。我們添加了一些腳本來手動重命名文件。但是我在一年之內沒有觸及過這個..現在用gradle,也許它已經解決了。 – 2013-11-14 09:42:58