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.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から署名されていないパッケージをエクスポートする)、ファイル名からバージョン番号
が削除されます。これにより、エラーが発生します。
ライブラリを読み込めません:link_image [1721]:30は必要なライブラリ'lib-b.so.2'を'lib-wrapper.so'に読み込めませんでした
APKにはファイルが含まれているためですlib-b.so
。
APKのビルド中にバージョン番号を強制的に保持するにはどうすればよいですか?
x86ライブラリ/execのビルドに同じセットアップが使用されるため、レガシービルドシステムを変更することは(必須になるまで)かなり不可能です。
ありがとうございました。