将AS的stringFromJNI修改为动态注册

本文介绍如何在Android Studio中将原本静态注册的stringFromJNI方法改为动态注册,详细步骤包括修改JNI方法、更新Java代码以及配置Android.mk或CMakeLists.txt文件,以实现更灵活的 native 方法管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

jstring stringFromJNI(JNIEnv* env,jobject thiz){
   return env->NewStringUTF("123465");
}

/*
 * 方法对应表
 */
//"Java 层的方法层","方法签名","对应的 native 层的方法指针"
static JNINativeMethod gMethods[]={
        {"stringFromJNI","()Ljava/lang/String;",(void*)stringFromJNI}//绑定
};

/*
 * 为某一类注册本地方法
 */
static int registerNativeMethods(JNIEnv* env, const char* className,JNINativeMethod* gMethods,int numMethods){

    jclass clazz;
    clazz=env->FindClass(className);

    if(clazz==NULL){
        return JNI_FALSE;
    }
    if(env->RegisterNatives(clazz,gMethods,numMethods)<0){
        return JNI_FALSE;
    }
    return JNI_TRUE;
}


/*
 * 为类注册本地方法
 */
static int registerNatives(JNIEnv* env){
    const char* kClassName="com/example/jnionload/MainActivity";//指定要注册的类

    return registerNativeMethods(env, kClassName, gMethods, sizeof(gMethods)/ sizeof(JNINativeMethod));
}


/*
 * System.loadLibrary("lib")时调用
 * 如果成功返回JNI版本,失败返回-1
 */
JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm,void* reserved){

    JNIEnv* env=NULL;

    //获取JNIEnv
    jint result=-1;
    if((vm->GetEnv((void **) &env, JNI_VERSION_1_6))!=JNI_OK){
        return -1;
    }
    assert(env!=NULL);
    if(!registerNatives(env)){
        return -1;
    }
     return JNI_VERSION_1_6;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值