Android Jni中JNI_OnLoad的地位和使用

在jni中,或者android系统源代码中,最常用到的是通过JNI_OnLoad(...)方法,对方法进行注册,而不会像前面的测试demo,生成.h头文件,然后写一个.c的去实现.h中的方法,JNI_OnLoad的引入更加注重c++的使用,至少偏向c++,android系统源代码也是如此,到了下面往往是c++做了一个过渡,但是再进一步深入,最终还是c实现的,比如网络协议等,这一点可以看出实际上用到
摘要由CSDN通过智能技术生成


在jni中,或者android系统源代码中,最常用到的是通过JNI_OnLoad(...)方法,对方法进行注册,而不会像前面的测试demo,生成.h头文件,然后写一个.c的去实现.h中的方法,JNI_OnLoad的引入更加注重c++的使用,至少偏向c++,android系统源代码也是如此,到了下面往往是c++做了一个过渡,但是再进一步深入,最终还是c实现的,比如网络协议等,这一点可以看出实际上用到了c++面向对象编程对c做了封装,然后提供给java,而java也是面向对象的语言,对于衔接起了非常重要的作用.

在应用层加载so的时候,虚拟机首先回去/自动执行JNI_OnLoad(...),所以在这里注册所有的方法/函数就好了,加载到虚拟机中,等待上面调用!

下面验证一下,新建一个android工程如下:

<1> : 新建android工程,目录树如下:

<2> : 下面的文件内容如下:

DurianOnLoad.java :

/**  
* @Title: DurianOnLoad.java
* @Package com.durian.jnionload.lib
* @Description: TODO
* @author zhibao.liu from durian organization
* @date 2015-12-25 下午04:46:13
* @version V1.0  
*/
package com.durian.jnionload.lib;

/**
 * @ClassName: DurianOnLoad
 * @Description: TODO
 * @author zhibao.liu Freelancer
 * @email warden_sprite@foxmail.com
 * @date 2015-12-25 下午04:46:13
 *
 */
public class DurianOnLoad {

    public native float getDurianLibVersion();
    public native int DurianAdd(int a,int b);
    public native int DurianEqual(int a);
    public native float DurianEqualF(float a,float b);
    static{
        System.loadLibrary("durianjni");
    }
    
}

durianUtils.h

#include <jni.h>
/* Header for class com_durian_jnienv_lib_DurianJni */

#ifndef _Included_com_durian_jnienv_lib_DurianUtils
#define _Included_com_durian_jnienv_lib_DurianUtils
#ifdef __cplusplus
extern "C" {
#endif
#include<string.h>
#include<stdlib.h>
#include <android/log.h>
#define LOG_TAG "durian"
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__)
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)
#define LOGW(...) __android_log_print(ANDROID_LOG_WARN,LOG_TAG,__VA_ARGS__)
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,LOG_TAG,__VA_ARGS__)
#defi
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值