2

これはフォローアップの質問です: Android NDK : Compiling different libraries for different architectures

私の問題は、NDK でコンパイルされた 2 つの c++ JNI ライブラリがあることです。1 つは小規模でアーキテクチャに依存するもので、もう 1 つはアーキテクチャ間で同じ大きなライブラリです。.apk を小さくするために、大きなライブラリのコピーを 1 つだけにします。次のようなフォルダー構造を試しました。

lib/armeabi/libbig.so
lib/armeabi/libsmall.so
lib/armeabi-v7a/libsmall.so

ただし、v7 デバイスで実行すると、UnsatisfiedLinkError が発生しました。デバイスの libs フォルダーを確認したところ、libsmall.so のみがインストールされていました。私の質問は、一部のライブラリをアーキテクチャに依存せず、他のライブラリをアーキテクチャに依存させることは可能ですか? このようなもの:

lib/armeabi/libsmall.so
lib/armeabi-v7a/libsmall.so
lib/all/libbig.so
4

1 に答える 1

2

v7a ブーストが非常に重要な場合は、v7 以外のデバイスのサポートを簡単に削除できると思います。ABI ごとに個別の APK をビルドしてアップロードするオプションもあります: https://developer.android.com/google/play/publishing/multiple-apks.html

最後に、次のようにライブラリを再配置できます。

lib/armeabi/libbig.so           --> lib/armeabi/libbig.so
lib/armeabi/libsmall.so         --> lib/armeabi/libsmall.so
lib/armeabi-v7a/libsmall.so     --> lib/armeabi/libsmall-v7a.so

このように、Java アプリはSystem.loadLibrary()に「small」または「small-v7a」を選択する必要があります。

于 2013-10-15T11:09:29.900 に答える