JNI与NDK简介

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_39424143/article/details/89645858
JNI
  • (java native interface) 是一种规范,用JNI这个规范来开发新的代码,是为了方便Java调用C\C++等一系列本地代码封装的一层接口, 实现Java和本地代码的双向交互

  • 使用原因:

    • Java具有跨平台性,与本地交互存在困难
NDK
  • 是一个工具集合协助我们来开发C/C++的动态库,可以自动的将.so文件与Java程序打包, 通过NDK可以在Android上更加方便的通过JNI来访问本地代码,此外还提供交叉编译器,开发人员只需要修改mk文件就可以生成特定的CPU平台的动态库

  • 优点:

    • 在平台之间移植其应用。

    • 进一步提升设备性能,以实现低延迟时间,或运行计算密集型应用,如游戏或物理模拟。

    • 重复使用自己或其他开发者的 C 或 C++ 库。

  • 要为应用编译和调试原生代码,需要以下组件:

    • Android 原生开发工具包 (NDK):这套工具允许您为 Android 使用 C 和 C++ 代码。

    • CMake:一款外部构建工具,可与 Gradle 搭配使用来构建原生库。如果您只计划使用 ndk-build,则不需要此组件。

    • LLDB:一种调试程序,Android Studio 使用它来调试原生代码。

  • 工作原理:

1.主要组件在构建应用时,应该已经了解以下组件:
原生共享库:NDK 从 C/C++ 原生源代码构建这些库或 .so 文件。
原生静态库:NDK 也可构建静态库或 .a 文件,而您可将其关联到其他库。
Java 原生接口 (JNI):JNI 是 Java 和 C++ 组件用以互相沟通的接口。
应用二进制界面 (ABI):ABI 可以非常精确地定义应用的机器代码在运行时如何与系统交互。NDK 根据这些定义构建 .so 文件。不同的 ABI 对应不同的架构:NDK 为 32 位 ARM、AArch64、x86 及 x86-64 提供 ABI 支持。
清单:如果编写的应用不包含 Java 组件,必须在清单中声明 NativeActivity 类。原生 Activity 和应用的“使用 native_activity.h 接口”部分进一步详细介绍如何执行此操作。
 2.流程:
设计应用,确定要在java中实现的部分,以及要以原生代码形式实现的部分。
创建一个Android项目。
在JNI目录中创建一个描述原生库的Android.mk文件,包括名称、标志、链接库和要编译的源文件。
或者,也可以创建一个配置目标ABI、工具链、发行/调试模式和STL的Application.mk文件。
ABI:所有非弃用的 ABI
工具链:Clang
模式:发行
STL:系统
将原生来源置于项目的 jni 目录下。
使用 ndk-build 编译原生(.so、.a)库。
构建 Java 组件,生成可执行 .dex 文件。
将所有内容封装到一个 APK 文件中,包括 .so、.dex 以及应用运行所需的其他文件。

Google Android developer

猜你喜欢

转载自blog.csdn.net/qq_39424143/article/details/89645858