6

サード パーティ製の Android 用共有ライブラリを使用する必要があります。ライブラリの soname とファイル名は、Linux で一般的な libxx.so.1.2.3 の形式で同じです。lib ファイルの名前を libxx.so に変更し、ndk-build を使用して libmyjni.so 内の libxx.so をリンクします。私の Java コードでは、libmyjni.so の関数を呼び出す前に、次のようにロードします。

    System.load("/data/local/tmp/libxx.so.1.2.3");
    System.loadLibrary("myjni");

libxx.so.1.2.3 を手動で /data/local/tmp/ にコピーする必要があります。上記のロードの後、libmyjni.so で関数を呼び出すことができます。

コード「System.loadLibrary("myjni");」では、システムは常にどこかから libxx.so.1.2.3 を取得しようとしています。現実の世界では、インストール中に libxx.so.1.2.3 を Android デバイスの特定の場所にコピーするにはどうすればよいですか? System.load() できるようにします。

または、Android には、自作の lib を /system/lib/ にインストールする公式の方法がありますか?

libxx.so.1.2.3 の形式が libxx.so の場合、 System.loadLibrary("xx") を使用してロードできます。

4

1 に答える 1

7

これが最終的に私がしたことです。libxx.so.1.2.3をそのままにして、Javaですべてのことを行います。

Android アセットに libxx.so.1.2.3 を配置します。MainApp.OnCreate() で、ファイルをプライベート ファイル フォルダーにコピーし、そこから読み込みます。

    AssetManager am = applicationContext.getAssets(); 
    in = am.open(OPENSSL_SO_LIB_NAME); // source instream

    File privateStorageDir = applicationContext.getFilesDir();
    String libPath = privateStorageDir.getAbsolutePath();  // copy the lib to here ...

    System.load(libPath + "/" + SO_LIB_NAME);
于 2012-07-11T13:55:33.627 に答える