在我的应用程序中,我正在使用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
?
任何帮助将不胜感激。
答案 0 :(得分:0)
我不确定,但是当尝试使用Object.getClassLoader()获取对象的ClassLoader并尝试获取未找到的Object的方法时,我遇到了类似的问题。我通过使用“ ClassLoader.getSystemClassLoader()”而不是“ parent”参数使用“ myContext.getClassLoader()”解决了这个问题。