1

Java リフレクションを使用して Android ネイティブ ライブラリをロードしようとしていますが、実行時にライブラリが見つかりません。通常、私はネイティブライブラリをロードします:

System.loadLibrary("mylib");

すべてが期待どおりに機能します。loadLibrary今、次のように、リフレクションでメソッドを呼び出そうとします:

Class<?> system = Class.forName("java.lang.System");
Method loadLibrary = system.getDeclaredMethod("loadLibrary", String.class);
loadLibrary.invoke(null, "mylib");

しかし、実行時に私は得る:

Caused by: java.lang.UnsatisfiedLinkError: Library mylib not found; tried [/system/lib64/libmylib.so, /vendor/lib64/libmylib.so]
    at java.lang.Runtime.loadLibrary0(Runtime.java:1001)
    at java.lang.System.loadLibrary(System.java:1530)
    at java.lang.reflect.Method.invoke(Native Method)

リフレクションloadLibraryのように、間違ったパスでライブラリを探しているようです。これら/system/lib64:/vendor/lib64java.library.pathプロパティのパスですが、apk の中は見ていません。もちろん、ライブラリは最終的な apk に含まれており、適切な ABI の適切な場所にあります。

ノート

使えない

System.load("absolute-path-to-lib/mylib.so");

私がこれを呼び出している場所からパスを利用できないため、パスを取得するためのパスがないかContextApplicationまだ利用できません。

loadLibrary現在の apk で検索を強制する方法はありますか? ありがとうございました!

4

0 に答える 0