我的代码中出现以下错误。我无法解决它。 java.lang.ClassNotFoundException:在路径上找不到类“com.graphics.package1。 javaClass1 $ innerClass ”:DexPathList [[directory“。”],nativeLibraryDirectories = [/ vendor / lib,/系统/ lib中]]
我尝试过不同的签名,例如com / graphics / package1 / javaClass1 $ innerClass com / graphics / package1 / javaClass1 / innerClass等但是,它没有解决问题
Java代码如下
xyz.java
package com.graphics.package1;
public class javaClass1 {
==========
public class innerClass {
public int a;
public float b;
}
public innerClass getJavaClass() {
innerClass new_innerClass = new innerClass();
new_innerClass.a = 2;
new_innerClass.b = 10.5;
return new_innerClass;
}
以下是我的jni代码(.cpp)代码。这会调用应返回类的java函数。我已经简化了代码,以便您更容易理解。
typedef struct {
int a;
float b;
} CppStruct;
bool checkException(JNIEnv* env) {
if (env->ExceptionCheck()) {
env->ExceptionDescribe(); // writes to logcat
env->ExceptionClear();
return true;
}
return false;
}
bool getClass(CppStruct* cppStruct, int num) {
jboolean result = false;
int status = g_JavaVM->GetEnv((void **) &envLocal, JNI_VERSION_1_6);
if (status < 0) {
status = g_JavaVM->AttachCurrentThread(&envLocal, NULL);
if (status < 0) {
return false;
}
}
if (envLocal == NULL) {
return false;
}
if (g_clazz == NULL) {
return false;
}
**// Fine the inner class of java javaClass1. This fails with exception.**
jclass jcppStructClass = envLocal->FindClass("com/graphics/package1/**javaClass1$innerClass**");
if (checkException(envLocal)) {
__android_log_print(ANDROID_LOG_ERROR, "TAG",
"Exception occurred in jcppStructClass");
}
**// next is to call the java method to get the java class object. This has not reached here but please guide here too.**
jmethodID methodID_getJavaClass = envLocal->GetMethodID(g_clazz,
"getJavaClass", "()Lcom/graphics/package1/javaClass1/innerClass;");
if (methodID_getJavaClass != NULL) {
jobject jCoreStatusClassObject = envLocal->CallStaticObjectMethod(g_clazz, methodID_getJavaClass, num);
if (checkException(envLocal)) {
__android_log_print(ANDROID_LOG_ERROR, "TAG",
"Exception occurred in CallStaticObjectMethod");
}
// I will fill cppStruct but, I know this will also fail because of the signature
g_JavaVM->DetachCurrentThread();
return true;
} else
return false;
}