1

私のアプリケーションでは、DexClassLoader次のように外部 apk のクラスをロードするために使用しています。

DexClassLoader dexClassLoader = new DexClassLoader("path/to/someApkfile.apk", myOptimizedDirectory, null, myContext.getClassLoader());
Class<?> MyClass =  dexClassLoader.loadClass("its.package.name.MyClass");

次に、次のようにリフレクションを使用してメソッドを呼び出します。

Object myInstance = MyClass.newInstance();
MyClass.getDeclaredMethod("foo").invoke(myInstance);

ここに方法がありますfoo

public void foo() {
 System.Load("path/to/arch/specific/native/lib/libname.so");
 // I know that this native library loaded successfully because JNI_OnLoad is called.

 // here is the problem
 int result = myNativeMethod("arg");
}

そしてここにmyNativeMethod

private native int myNativeMethod(String arg);

ログメッセージは次のとおりです。

mMessages: uncaught exception
    java.lang.UnsatisfiedLinkError: No implementation found for int its.package.name.MyClass.myNativeMethod(java.lang.String) (tried Java_its_package_name_MyClass_myNativeMethod) ...

ネイティブ コードのメソッド シグネチャは正しく、何も問題はないと確信しています。

また、ネイティブ ライブラリが正常に読み込まれたと確信しているのに、なぜ と表示されるのNo implementation foundですか?

どんな助けでも大歓迎です。

4

1 に答える 1