Android Studio JNI:ClassNotFoundException的循环 我创建了一个基于Android的NDK和本教程()的C++ Android应用程序。 我创建了一个叫做HTTP的C++类,它创建了SoSkices来执行简单的HTTP请求(主要是为了学习目的)。C++应用程序是自己工作的。 我将其编译为JNI(使用Swig),并生成了适当的JNI代码和Java“代理”文件,我可以使用这些文件调用代码 我原来的C++构造函数有这个签名: Http::Http(const char*ip\u地址,int端口)

Android Studio JNI:ClassNotFoundException的循环 我创建了一个基于Android的NDK和本教程()的C++ Android应用程序。 我创建了一个叫做HTTP的C++类,它创建了SoSkices来执行简单的HTTP请求(主要是为了学习目的)。C++应用程序是自己工作的。 我将其编译为JNI(使用Swig),并生成了适当的JNI代码和Java“代理”文件,我可以使用这些文件调用代码 我原来的C++构造函数有这个签名: Http::Http(const char*ip\u地址,int端口),android,android-studio,android-ndk,java-native-interface,Android,Android Studio,Android Ndk,Java Native Interface,1) 在我的AndroidStudio应用程序中,我有一个名为MainActivity的活动。包含MainActivity和生成的JNIJava类的包是com.zuzile。我的默认构造函数如下所示SWIGEXPORT jlong JNICALL Java_com_zuzile_exampleJNI_new_1Http(JNIEnv*jenv,jclass jcls,jstring jarg1,jint jarg2)其中“exampleJNI”是我的Java类,它包含本机方法公共最终静态本机lo

1) 在我的AndroidStudio应用程序中,我有一个名为MainActivity的活动。包含MainActivity和生成的JNIJava类的包是com.zuzile。我的默认构造函数如下所示
SWIGEXPORT jlong JNICALL Java_com_zuzile_exampleJNI_new_1Http(JNIEnv*jenv,jclass jcls,jstring jarg1,jint jarg2)
其中“exampleJNI”是我的Java类,它包含本机方法
公共最终静态本机long new_Http(字符串jarg1,int jarg2)

2) 在生成适当的JNI和相应的Java类之后,我使用NDK成功地将JNI代码编译成一个.so文件。我可以通过调用
System.loadLibrary(“httpreq”)加载.so文件。
httpreq是我编译的模块的名称

3) 当我试图通过调用Http(“某个IP地址”、“一个端口”)来使用我的模块时,我得到以下错误:
java.lang.ClassNotFoundException:com.zuzile.MainActivity
(作为调试器的输出)

如果我从MainActivity.java中删除
Http(…)
声明,我的应用程序将完全加载而不会崩溃。但是,当我使用我生成的本机代码时,它表示找不到com.zuzile.MainActivity


C/C++的接口,你不能直接把C++类映射到JAVE类。您可以只调用映射的方法


在您的例子中,Http(“某个IP地址”、“一个端口”)表示java构造函数,但您没有名为“Http”的java类,对吗

嗯,我有一个Http Java类。Http Java类用作“代理”或网桥。我的Http Java类调用我的实际JNI类文件。我的结构如下:1)编译到J.Ni代码到.so 2)的HTTPJNI java库,它有适当的签名/名称来调用.so库,步骤1)3,它类似于我的原始C++类,但是它在内部从步骤2调用httpjnjava java类。