zoukankan      html  css  js  c++  java
  • Android NDK入坑之旅(一):JNI的简单介绍

    1.JNI简介

    JNI全称为Java Native Interface;

    从Java1.1开始,JNI就成为java平台的一部分,它允许Java代码和其他语言写的代码(如C&C++)进行交互;

    并非从Android发布才引入JNI的概念的。

    2.什么是NDK?

    NDK全称为native development kit本地语言(C&C++)开发包;

    NDK提供了一些交叉编译工具链和Android自带的库;

    这些Android的库可以让开发者在编写本地语言的程序时调用;

    而NDK提供的交叉编译工具链就对已经编写好的C&C++代码进行编译,生成库。

    3.JNI的基本调用流程

    1).Android应用层以Java为基础,.java文件在被编译成.dex文件后必须要通过Dalvik虚拟机( Virtual Machine)来执行;

    2).执行过程中如果需要用到本地方法(即C/C++函数库),Dalvik则去加载C/C++本地函数库(System.loadLibrary("libName"););

    注意:由于C/C++本地函数库并不运行在Dalvik虚拟机中,所以效率和速度都相对较快;

    3).Dalvik虚拟机加载C/C++函数库成功之后会自动地寻找库里面的JNI_OnLoad函数(关于JNI_OnLoad函数后面会有详细说明);

    4).虚拟机释放C/C++函数库时,与JNI_OnLoad函数相对应的JNI_OnUnLoad函数会被调用,用以处理善后清除工作。

    4.关于JNI_OnLoad函数的一些说明

    1).告知Dalvik虚拟机该C/C++函数库使用哪一个JNI版本;

    2).库中没有该函数时默认使用JNI1.1版本;

    3).新版JNI在功能上有很多的扩展,想要使用这些新功能必须在JNI_OnLoad()函数中声明JNI的版本:

    1 result = JNI_VERSION_1_4;

    4).库中没有JNI_OnLoad()函数时,Android调试信息会给出"No JNI_OnLoad found"的提示;

    5).C/C++函数库加载完成后首先调用JNI_OnLoad()方法,可以在该方法中进行一些初始化工作,如注册JNI函数等等(可加快调用效率和速度);

    但行好事,莫问前程;你若盛开,蝴蝶自来;你若坚强,命运自会给你打赏。
  • 相关阅读:
    nowcoderD Xieldy And His Password
    Codeforces681D Gifts by the List
    nowcoder80D applese的生日
    Codeforces961E Tufurama
    Codeforces957 Mahmoud and Ehab and yet another xor task
    nowcoder82E 无向图中的最短距离
    nowcoder82B 区间的连续段
    Codeforces903E Swapping Characters
    Codeforces614C Peter and Snow Blower
    Codeforces614D Skills
  • 原文地址:https://www.cnblogs.com/songjie-xuan/p/7412802.html
Copyright © 2011-2022 走看看