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函数等等(可加快调用效率和速度);

    但行好事,莫问前程;你若盛开,蝴蝶自来;你若坚强,命运自会给你打赏。
  • 相关阅读:
    postman的使用方法详解!最全面的教程
    免费使用的加速器
    Windows添加启动项的两种方法
    Python版本微信跳一跳,软件配置
    Inno Setup教程
    Go开发环境安装配置
    Linux下安装Phantomjs
    Python的url解析库--urlparse
    Python处理HTML转义字符
    Python使用base64编码的问题
  • 原文地址:https://www.cnblogs.com/songjie-xuan/p/7412802.html
Copyright © 2011-2022 走看看