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

0

我不确定,但在尝试使用 Object.getClassLoader() 获取对象的 ClassLoader 并尝试获取未找到的对象方法时,我遇到了类似的问题。我通过对“父”参数使用“ClassLoader.getSystemClassLoader()”而不是“myContext.getClassLoader()”解决了这个问题。

于 2018-08-19T10:43:35.043 回答