java vm ext.cc,JNI在应用程序中检测到错误:调用JNI GetMethodID,有未决异常java.lang.ClassNotFoundException:找不到类...

I am getting the following error:

JNI DETECTED ERROR IN APPLICATION: JNI GetMethodID called with pending exception java.lang.ClassNotFoundException: Didn't find class "package.name.class" on path: DexPathList[[zip file "/system/framework/sample.jar"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]

JNI DETECTED ERROR IN APPLICATION: JNI GetMethodID called with pending exception java.lang.ClassNotFoundException: Didn't find class "package.name.class" on path: DexPathList[[zip file "/system/framework/XposedBridge.jar"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]

26771-26918/package.name.class A/art: art/runtime/java_vm_ext.cc:410] at java.lang.Class dalvik.system.BaseDexClassLoader.findClass(java.lang.String) (BaseDexClassLoader.java:56)

26771-26918/package.name.class A/art: art/runtime/java_vm_ext.cc:410] at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String, boolean) (ClassLoader.java:511)

26771-26918/package.name.class A/art: art/runtime/java_vm_ext.cc:410] at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String) (ClassLoader.java:469)

Here is more about the error:

`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(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, "", "(JJJJJJ)V");

if (NULL == constructor) {

LOG_HM("JNIGetTotalUsageInfo::TotalUsageInfo constructor not found\n");

nResult = FAIL;

detachThread(nResult);

return ;

}`

解决方案

In order to call GetMethodID, you need to properly attach your C++ thread to the main Java thread. Like this:

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;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值