• Android Studio JNI/NDK 编程简介(一)


    首先说一下概念及相关的东西:

    JNI :

    JNI是Java Native Interface的缩写,它提供了若干的API实现了Java和其他语言的通信(主要是C&C++)。从Java1.1开始,JNI标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言,尤其是C和C++而设计的,但是它并不妨碍你使用其他编程语言,只要调用约定受支持就可以了。使用java与本地已编译的代码交互,通常会丧失平台可移植性。但是,有些情况下这样做是可以接受的,甚至是必须的。例如,使用一些旧的库,与硬件、操作系统进行交互,或者为了提高程序的性能。JNI标准至少要保证本地代码能工作在任何Java 虚拟机环境下。

    JNI的副作用

    一旦使用JNI,JAVA程序就丧失了JAVA平台的两个优点:
    1、程序不再跨平台。要想跨平台,必须在不同的系统环境下重新编译本地语言部分。
    2、程序不再是绝对安全的,本地代码的不当使用可能导致整个程序崩溃。一个通用规则是,你应该让本地方法集中在少数几个类当中。这样就降低了JAVA和C之间的耦合性。

    JNI的设计目的

    标准的java类库可能不支持你的程序所需的特性。或许你已经有了一个用其他语言写成的库或程序,而你希望在java程序中使用它。
    你可能需要用底层语言实现一个小型的时间敏感代码,比如汇编,然后在你的java程序中调用这些功能。

    看到这里你应该明白了,其实JNI 就是一层接口;
    举个例子,如果大家做过做过 html5 编程 有时 js 需要调用 Android 本地资源,也需要封装一层 js 接口的,类似,就是封装一层接口让别人可以使用;


    NDK:

    Android NDK 是在SDK前面又加上了“原生”二字,即Native Development Kit,因此又被Google称为“NDK”。

    众所周知,Android程序运行在Dalvik虚拟机中,NDK允许用户使用类似C / C++之类的原生代码语言执行部分程序。
    NDK包括了
    • 从C / C++生成原生代码库所需要的工具和build files。
    • 将一致的原生库嵌入可以在Android设备上部署的应用程序包文件(application packages files ,即.apk文件)中。
    • 支持所有未来Android平台的一系列原生系统头文件和库
    为何要用到NDK?
    概括来说主要分为以下几种情况:
    1. 代码的保护,由于apk的java层代码很容易被反编译,而C/C++库反汇难度较大。
    2. 在NDK中调用第三方C/C++库,因为大部分的开源库都是用C/C++代码编写的。
    3. 便于移植,用C/C++写的库可以方便在其他的嵌入式平台上再次使用。


    看了以上说明 大家就明白了,如果你只是做应用级别的开发,可能根本 用不到这些,所以也不用担心 ;

    这些主要用于嵌入式编程或智能家居或模拟仿真等领域;

  • 相关阅读:
    小程序中自定义组件
    rem是如何实现自适应布局的?
    基于vue前端状态管理模式
    vue项目使用keep-alive的作用
    JS移动元素的方法
    es6 promise then对异常处理的方法
    async/await 中await接收的promise的问题
    angularjs ngRoute demo
    angularjs $watch demo
    Html5 Geolocation demo
  • 原文地址:https://www.cnblogs.com/sharecenter/p/5620983.html
Copyright © 2020-2023  润新知