我正在尝试通过JNI从C ++调用Kotlin函数。
Kotlin函数位于附加到Xamarin应用程序的Android绑定库的一部分的类中。
C ++代码位于同一Xamarin应用程序的本机库中。
我用以下代码行调用FindClass():
jclass classObj = m_env->FindClass("de/companyname/packagename/MyKotlinClass");
m_env是指向JNI环境的有效指针(例如,我可以成功找到标准Java库类)。 上面的代码行失败
java.lang.ClassNotFoundException:在路径:DexPathList [[directory“。”],nativeLibraryDirectories = [/ vendor / lib,/ system / lib]]上找不到类“ de / companyname / packagename / MyKotlinClass” / p>
在签名的apk的classes.dex文件中,我可以看到具有正确路径的MyKotlinClass。但是以某种方式,JNI找不到它。
这是因为Kotlin类是包含在Android绑定库中的AAR的一部分吗? 我该怎么做才能让JNI找到我的班级?
答案 0 :(得分:0)
我找到了一个解决方案,方法是从C ++代码调用FindClass(),C ++代码包含在Android绑定库的AAR中。然后,我可以使用dlopen从我的主要C ++模块调用此C ++。
这对我来说是一个很好的解决方案,因为我可以控制AAR的内容。如果您有第三方AAR,我认为将单独的C ++ .so文件添加到Android绑定库中也可以使用,但我尚未测试过这种情况。