2012-02-13 77 views
0

我有一個使用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-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中如出口未簽名的包。)構建的版本號
從文件名剝離。這會導致錯誤:

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,所以修改遺留構建系統是不可能的(直到它是必須的)。

謝謝。

+0

嗨,你有沒有找到一個解決方案,而不改變構建系統? – robotniko 2013-11-13 16:11:50

+0

不是。我們添加了一些腳本來手動重命名文件。但是我在一年之內沒有觸及過這個..現在用gradle,也許它已經解決了。 – 2013-11-14 09:42:58

回答

0

android鏈接程序無法識別不以「.so」結尾的共享庫。您需要更改舊版構建系統創建的文件名。