动态注册报错
在新版本中 java中定义如下:
package com.sprd.newndk;
public class NdkUtil {
static {
System.loadLibrary("changeCase");
}
public native String helloWord();
}
在cpp定义如下:
#include <jni.h>
#include <string>
jstring native_hello(JNIEnv* env, jobject thiz) {
return env->NewStringUTF("Hello jni");
}
static JNINativeMethod gMethods[] = { { "helloWord",
"()Ljava/lang/String", (void *) native_hello}};
JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void* reserved) {
JNIEnv* env = NULL;
jint result = JNI_FALSE;
//获取env指针
if (vm->GetEnv((void**) &env, JNI_VERSION_1_6) != JNI_OK) {
return result;
}
if (env == NULL) {
return result;
}
//获取类引用
jclass clazz = env->FindClass("com/sprd/newndk/NdkUtil");
if (clazz == NULL) {
return result;
}
//注册方法
if (env->RegisterNatives(clazz, gMethods,
sizeof(gMethods) / sizeof(gMethods[0])) < 0) {
return result;
}
//成功
result = JNI_VERSION_1_6;
return result;
}
在调试中报错,请老师帮忙看看
正在回答 回答被采纳积分+1
#include <jni.h>
#include <string>
#include <android/log.h>
extern "C"
JNIEXPORT jstring JNICALL
native_hello(JNIEnv *env, jobject instance) {
// TODO
return env->NewStringUTF("Hello jni");
}
static JNINativeMethod gMethods[] = {{"helloWord",
"()Ljava/lang/String", (void *) native_hello}};
JNIEXPORT jint JNI_OnLoad(JavaVM* vm, void* reserved)
{
JNIEnv* env;
jint result = JNI_FALSE;
if (vm->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_6) != JNI_OK) {
return -1;
}
jclass clazz = env->FindClass("com/sprd/newndk/NdkUtil");
if (clazz == NULL) {
return result;
}
if (env->RegisterNatives(clazz, gMethods,
sizeof(gMethods) / sizeof(gMethods[0])) < 0) {
return result;
}
// Get jclass with env->FindClass.
// Register methods with env->RegisterNatives.
return JNI_VERSION_1_6;
}
- 参与学习 人
- 提交作业 147 份
- 解答问题 687 个
本专题介绍了Android开发核心组件:广播、服务及全局应用。教会你如何使用AIDL、Thread、Socket、蓝牙解决进程线程间通信问题。利用Glide等实现异步加载及NDK原生代码开发。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星