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/lib64
はjava.library.path
プロパティのパスですが、apk の中は見ていません。もちろん、ライブラリは最終的な apk に含まれており、適切な ABI の適切な場所にあります。
ノート
使えない
System.load("absolute-path-to-lib/mylib.so");
私がこれを呼び出している場所からパスを利用できないため、パスを取得するためのパスがないかContext
、Application
まだ利用できません。
loadLibrary
現在の apk で検索を強制する方法はありますか? ありがとうございました!