1

autotoolsを使用して共有ライブラリを構築するレガシーコードがあります。これらのライブラリはAndroidアプリケーションで使用する必要があるため、単純なJavaクラスとそのJNIラッパーを(共有.soライブラリとして)作成しました。

レガシービルドシステムを適切に実行し、JavaプログラムのネイティブライブラリをビルドしてリンクするAndroid.mkスクリプトをすでに持っています。

出力ファイルは次のとおりです。

libs/armeabi/lib-a.so.0
libs/armeabi/lib-b.so.2
libs/armeabi/lib-wrapper.so

lib-wrapper.solib-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-b.so.2'を'lib-wrapper.so'に読み込めませんでした

APKにはファイルが含まれているためですlib-b.so

APKのビルド中にバージョン番号を強制的に保持するにはどうすればよいですか?

x86ライブラリ/execのビルドに同じセットアップが使用されるため、レガシービルドシステムを変更することは(必須になるまで)かなり不可能です。

ありがとうございました。

4

1 に答える 1

0

Android リンカーは、「.so」で終わらない共有ライブラリを認識しません。従来のビルド システムによって作成されたファイル名を変更する必要があります。

于 2012-03-08T20:17:38.067 に答える