android JNI_OnLoad()函数

没有完全原创,参考下面链接的大部分内容:

http://blog.csdn.net/zhenyongyuan123/article/details/5862054

http://blog.sina.com.cn/s/blog_7a2ffd5c01013vrv.html

本文仅作学习使用。

 

实现JNI中本地函数注册有两种方式:

1.采用默认的本地函数注册流程。

2.自己重写JNI_OnLload()函数。

当Android的VM执行到C组件(*so)里的System.loadLibrary()函数时,首先会去执行C组件里的JNI_OnLoad()函数,其用途有二

一、告诉java VM此C组件使用哪一个JNI版本。

如果你没有提供JNI_OnLoad()函数,VM会默认使用最老得JNI1.1版本。

二、可以藉由JNI_OnLoad()来获取JNIEnv.JNIEnv代表java环境,通过JNIEnv*指针就可以对java端的代码进行操作。

如(可参考android_media_MediaPlayer.cpp):

jint JNI_OnLoad(JavaVM* vm, void* reserved)
{
    JNIEnv* env = NULL;
    jint result = -1;

    if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
        ALOGE("ERROR: GetEnv failed\n");
        goto bail;
    }
    assert(env != NULL);

    ......

    if (register_android_mtp_MtpDatabase(env) < 0) {
        ALOGE("ERROR: MtpDatabase native registration failed");
        goto bail;
    }

   ......

    /* success -- return valid version number */
    result = JNI_VERSION_1_4;

bail:
    return result;
}

实例一:C++调用java中的方法

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值