zoukankan      html  css  js  c++  java
  • JNI和NDK

    作者:十岁的小男孩

    QQ:929994365

    心之安处即是吾乡

    前言

      本文试图通过解答以下三个问题来达到学习JNI和NDK的目的。是什么?有什么用?怎么用?文章内容前三节来自下面第一个链接的博主共享,很详细的解答前两个问题,第二个链接是安卓官网的教程,回到了第三个问题即在实际工程中怎么用。第三个链接是极客学院的资料。本文记录本人阅读与开发过程,力求不失原意,但推荐阅读原文。下一篇博文将重点学习native声明的方法在底层c/c++中具体实现。

    https://blog.csdn.net/carson_ho/article/details/73250163

    https://developer.android.google.cn/studio/projects/add-native-code

    http://wiki.jikexueyuan.com/project/jni-ndk-developer-guide/

    目录

    1. JNI介绍

    1.1 简介

    • 定义:Java Native Interface,即 Java本地接口
    • 作用: 使得Java 与 本地其他类型语言(如C、C++)交互

      即在 Java代码 里调用 C、C++等语言的代码 或 C、C++代码调用 Java 代码

    • 特别注意:

      1. JNIJava 调用 Native 语言的一种特性
      2. JNI 是属于 Java 的,与 Android 无直接关系

    1.2 为什么要有 JNI

    • 背景:实际使用中,Java 需要与 本地代码 进行交互
    • 问题:因为 Java 具备跨平台的特点,所以Java 与 本地代码交互的能力非常弱
    • 解决方案: 采用 JNI特性 增强 Java 与 本地代码交互的能力

    1.3 实现步骤

    1. Java中声明Native方法(即需要调用的本地方法)
    2. 编译上述 Java源文件javac(得到 .class文件)
    3. 通过 javah 命令导出JNI的头文件(.h文件)
    4. 使用 Java需要交互的本地代码 实现在 Java中声明的Native方法

      Java 需要与 C++ 交互,那么就用C++实现 JavaNative方法

    5. 编译.so库文件
    6. 通过Java命令执行 Java程序,最终实现Java调用本地代码

    2. NDK介绍

    2.1 简介

    • 定义:Native Development Kit,是 Android的一个工具开发包

      NDK是属于 Android 的,与Java并无直接关系

    • 作用:快速开发CC++的动态库,并自动将so和应用一起打包成 APK
      即可通过 NDKAndroid中 使用 JNI与本地代码(如C、C++)交互
    • 应用场景:在Android的场景下 使用JNI

      Android开发的功能需要本地代码(C/C++)实现

    • 特点

    示意图

    • 额外注意

    示意图

    2.2 使用步骤

    1. 配置 Android NDK环境
    2. 创建 Android 项目,并与 NDK进行关联
    3. Android 项目中声明所需要调用的 Native方法
    4. 使用 Android需要交互的本地代码 实现在Android中声明的Native方法

      比如 Android 需要与 C++ 交互,那么就用C++ 实现 JavaNative方法

    5. 通过 ndk - bulid 命令编译产生.so库文件
    6. 编译 Android Studio 工程,从而实现 Android 调用本地代码

    3. NDK与JNI关系

    示意图

    4. 怎么用?

      本节内容的学习是通过阅读安卓官网的教程,本文暂且不赘述,读者自行到官网学习,以下链接:https://developer.android.google.cn/studio/projects/add-native-code

     

  • 相关阅读:
    mysql之drop、truncate和delete的区别
    mysql之表结构,表空间,段,区,页,MVCC(待整理)
    mysql之子查询、视图、事务及pymysql等
    mysql之单表查询、多表查询
    解决跨域问题!
    项目--2
    项目--1
    后端接口书写
    VUE-组件
    VUE基本写法
  • 原文地址:https://www.cnblogs.com/missidiot/p/9716902.html
Copyright © 2011-2022 走看看