ネイティブ共有ライブラリ ( libnativeext.so ) を使用して Android アプリを作成しました。
アプリの Java クラス内で、System.loadLibrary("nativeext") を使用して libnativeext.soをロードします。すべてうまくいきます。ネイティブ コードがコンパイルされ、libnativeext.soが/libs/armeabi/フォルダーに配置されます。したがって、最終的な first.apk ファイルには/lib/armeabi/libnativeext.soが含まれ、デバイスにインストールされ、すべて正常に動作します。
次に、プロジェクトをjavaext.jarにエクスポートします。
この時点で、 javaext.jarにはlibnativeext.soが/libs/armeabi/に含まれています。
新しいプロジェクト (second-proj) にjavaext.jarを含め、java ビルド パスにjavaext.jarへのパスを追加します。プロジェクトは、 javaext.jarのネイティブ ライブラリに関する警告のみでビルドされます。日食の設定で警告を無効にします。
しかし、私が得たデバイスでは:
second.apk には/libs/armeabi/libnativeext.soが含まれているため、奇妙です。私は電話に行き、電話/data/data/myapp/lib/のフォルダーが空であることを理解します! もちろん System.loadLibrary は libnativeext.so を見つけることができません。
私は自分で解決策を見つけましたが、見た目が非常に醜いので、より良い方法を見つけたいと思っています。
既存の second-proj/libs/フォルダー内に armeabi を作成し、その中にlibnativeext.soを配置します。
2 番目のプロジェクト:
/libs/armeabi/libnativeext.so
/libs/javaext.jar
プロジェクトをビルドするとき、second.apk の中を調べます。
/lib/armeabi/libnativeext.so <---新しいもの
/libs/armeabi/libnativeext.so
そして、このバージョンは電話で完璧に動作します。
したがって、インストール中に /libs/armeabi/ のライブラリは無視され、/lib/armeabi/ のライブラリのみが電話にインストールされると思います。
質問は次のとおりです: apk bulder に *.so を *.jar から正しい *.apk フォルダーに強制的にコピーさせる方法は?