Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android JNI在应用程序中检测到错误:调用JNI GetMethodID时出现挂起异常java.lang.ClassNotFoundException:DIND';我找不到课_Android_Android Ndk R5 - Fatal编程技术网

Android JNI在应用程序中检测到错误:调用JNI GetMethodID时出现挂起异常java.lang.ClassNotFoundException:DIND';我找不到课

Android JNI在应用程序中检测到错误:调用JNI GetMethodID时出现挂起异常java.lang.ClassNotFoundException:DIND';我找不到课,android,android-ndk-r5,Android,Android Ndk R5,我得到以下错误: JNI在应用程序中检测到错误:调用JNI GetMethodID时出现挂起的异常java.lang.ClassNotFoundException:在路径:DexPathList[[zip文件”/system/framework/sample.jar]],NativelLibraryDirectory=[/vendor/lib,/system/lib]]上未找到类“package.name.class” 以下是有关错误的详细信息: `jmethodID MethodId;

我得到以下错误:

JNI在应用程序中检测到错误:调用JNI GetMethodID时出现挂起的异常java.lang.ClassNotFoundException:在路径:DexPathList[[zip文件”/system/framework/sample.jar]],NativelLibraryDirectory=[/vendor/lib,/system/lib]]上未找到类“package.name.class”

以下是有关错误的详细信息:

`jmethodID MethodId;
    JNIEnv * env;
    int nStatus = gVM->GetEnv((void**)&env, JNI_VERSION_1_6);
    int nResult = attachStatus(nStatus, &env);
    LOG_HM("::attach status = %d::\n", nResult);
    if (nResult == ATTACH_FAILED) {
        LOG_HM("Attach failed");
        return ;
    }

jclass classClass = env->GetObjectClass(gTotalUsageClass);
    auto classLoaderClass = env->FindClass("java/lang/ClassLoader");
    auto getClassLoaderMethod = env->GetMethodID(classClass, "getClassLoader",
                                             "()Ljava/lang/ClassLoader;");
    gClassLoader = env->CallObjectMethod(gTotalUsageClass, getClassLoaderMethod);
    gFindClassMethod = env->GetMethodID(classLoaderClass, "findClass",
                                    "(Ljava/lang/String;)Ljava/lang/Class;");

    jclass totalUsage = static_cast<jclass>(env->CallObjectMethod(gClassLoader, gFindClassMethod, env->NewStringUTF("com/a/a/TotalUsageInfo")));

    TotalUsageInfo *info = NULL;
    jobject jUsageInfo = NULL;

        jlong noOfProc = 0;
        jlong memTotal = 0;
        jlong memFree = 0;
        jlong cache = 0;
        jlong buffer = 0;
        jlong cpuUtil = 0;
        //jclass totalUsage = env->FindClass("com/a/a/TotalUsageInfo");
        if (totalUsage == NULL) {
            LOG_HM("Class TotalUsageInfo not Found \n");
            nResult = FAIL;
            detachThread(nResult);
            return;
        }
        else {
             LOG_HM("Class TotalUsageInfo Found \n");
        }

        jmethodID constructor = env->GetMethodID(totalUsage, "<init>", "(JJJJJJ)V");
        if (NULL == constructor) {
            LOG_HM("JNIGetTotalUsageInfo::TotalUsageInfo constructor not found\n");
            nResult = FAIL;
            detachThread(nResult);
            return ;
        }`
`jmethodID;
JNIEnv*env;
int nStatus=gVM->GetEnv((void**)和env,JNI_版本1_6);
int nResult=附件状态(nStatus和env);
日志(“::附加状态=%d::\n”,nResult);
如果(nResult==连接失败){
LOG_HM(“连接失败”);
返回;
}
jclass classClass=env->GetObjectClass(gTotalUsageClass);
自动类装入器class=env->FindClass(“java/lang/ClassLoader”);
自动getClassLoaderMethod=env->GetMethodID(classClass,“getClassLoader”,
“()Ljava/lang/ClassLoader;”;
gClassLoader=env->CallObjectMethod(gTotalUsageClass,getClassLoaderMethod);
gFindClassMethod=env->GetMethodID(classLoaderClass,“findClass”,
“(Ljava/lang/String;)Ljava/lang/Class;”;
jclass totalUsage=static_cast(env->CallObjectMethod(gClassLoader,gFindClassMethod,env->NewStringUTF(“com/a/a/TotalUsageInfo”));
TotalUsageInfo*info=NULL;
jobject jUsageInfo=NULL;
jlong noOfProc=0;
jlong memTotal=0;
jlong memFree=0;
jlong缓存=0;
jlong缓冲区=0;
jlong cpuUtil=0;
//jclass totalUsage=env->FindClass(“com/a/a/TotalUsageInfo”);
if(totalUsage==NULL){
日志(未找到类TotalUsageInfo);
nResult=失败;
拆卸螺纹(nResult);
返回;
}
否则{
LOG_HM(“找到类TotalUsageInfo”);
}
jmethodID constructor=env->GetMethodID(totalUsage,”,“(jj)V”);
if(NULL==构造函数){
日志\u HM(“未找到JNIGETTOTOTALUSAGEINFO::TotalUsageInfo构造函数\n”);
nResult=失败;
拆卸螺纹(nResult);
返回;
}`

<代码> > p>为了调用<代码> GETMaoDoD< /Cord>,您需要将C++线程正确地连接到主java线程。像这样:

bool attachThreadToJVM(JNIEnv **env)
{

    bool ret = false;

    if(globalJavaVm != NULL) {
        JavaVMAttachArgs vmAttachArgs;
        vmAttachArgs.version = JNI_VERSION_1_6;
        vmAttachArgs.name = NULL;
        vmAttachArgs.group = NULL;
        jint attachRet = globalJavaVm->AttachCurrentThread(env, &vmAttachArgs);

        if(attachRet == 0)
        {
            ret = true;
        }
    }

    return ret;
}

这是坠机日志。我试图从本地C++线程回调到java模块。我已经通过调用AttachCurrentThread连接到主线程,但是当我从本机线程调用GetMethodID函数时,仍然会出现此崩溃。传递给GetMEthodID的jclass不是空的。如果您能提供中断的确切行,这将非常有用,这里有些东西看起来可疑。我想你的问题在于方法的精确性。但不是100%确定。如果您提供一个更准确的断点,这会有所帮助。您的本机库似乎还没有根据日志构建。查看此链接以构建本机库-@KeyurThumar我有一个类似的问题,我的本机库已构建。真正的原因是C++线程没有被适当地连接到java主线程……你必须提到JNI中的活动包名称。请参阅此链接。在该链接中,请参见如何编写该方法。具有活动名称的方法(包括包名称)
bool attachThreadToJVM(JNIEnv **env)
{

    bool ret = false;

    if(globalJavaVm != NULL) {
        JavaVMAttachArgs vmAttachArgs;
        vmAttachArgs.version = JNI_VERSION_1_6;
        vmAttachArgs.name = NULL;
        vmAttachArgs.group = NULL;
        jint attachRet = globalJavaVm->AttachCurrentThread(env, &vmAttachArgs);

        if(attachRet == 0)
        {
            ret = true;
        }
    }

    return ret;
}