`
1320438999
  • 浏览: 129924 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

Android之JNI和NDK的那些事

 
阅读更多

NDK(Native Development Kit)“原生”也就是二进制

android常用的开发方式是java封装的库,而这些库的底层实现是由C/C++实现,如媒体,图形库等

java调用这样实现就需要用JNI(Java Native Interface)

平时用的也就是google给我们封装的好的库,即便是底层实现用的不是Java,但都有统一的Java接口


而NDK的作用是“我们自己写本地代码”(C/C++),自己用JNI封装成Java接口

比如我们想做个计算,二这不是Java的强项,可以用C/C++来写实现,返回一个运算结果就行了

NDKr5已经实现了不用写一行Java代码开发程序了,只不过还是用到了虚拟机,细节被封装隐藏起来了而已


对于JNI和NDK很多Android开发初学者没有搞明白这个问题

JNI是Java调用Native机制,是Java语言自己的特性全称为 Java Native Interface,类似的还有微软.Net Framework上的p/invoke,可以让C#或Visual Basic.Net可以调用C/C++的API,所以说JNI和Android没有关系,在PC上开发Java的应用,如果运行在Windows平台使用 JNI是是经常的,比如说读写Windows的注册表。

NDK是Google公司推出的帮助Android开发者通过C/C++本地语言编写应用的开发包,包含了C/C++的头文件、库文件、说明文档和示例 代码,我们可以理解为Windows Platform SDK一样,是纯C/C++编写的,但是Android并不支持纯C/C++编写的应用,同时NDK提供的库和函数功能很有限,仅仅处理些算法效率敏感的 问题,所以Android123推荐初学者学好Java后再学习JNI。



NDK其实多了一个把.so和.apk打包的工具,这个是很重要的。

而JNI开发并没有打包,只是把.so文件放到文件系统的特定位置。

如果是做应用开发,则需要NDK工具,不然你开发的应用程序怎么给用户用呢?难道帮他重新编译文件系统?

其他至于实现,java调用本地C/C++函数,及其编写方式,我觉得JNI和NDK没有什么区别。

还有一个我个人理解,NDK开发C/C++只能能使用NDK自带的有限的头文件,而使用JNI则可以使用文件系统中带的头文件,比如utils/Log.h

而后者的资源更多,当然NDK正在努力开发中,以便支持更丰富的接口。

问:NDK 是什么

1、NDK 是一系列工具的集合。

  • NDK提供了一系列的工具,帮助开发者快速开发 C (或 C++ )的动态库,并能自动将 so java 应用一起打包成 apk 。这些工具对开发者的帮助是巨大的。
  • NDK集成了交叉编译器,并提供了相应的 mk 文件隔离 CPU 、平台、 ABI 等差异,开发人员只需要简单修改 mk 文件(指出 哪些文件需要编译 编译特性要求 等),就可以创建出 so
  • NDK可以自动地将 so Java 应用一起打包,极大地减轻了开发人员的打包工作。

2、NDK 提供了一份稳定、功能有限的API头文件声明。

Google明确声明该API 是稳定的,在后续所有版本中都稳定支持当前发布的 API。从该版本的 NDK 中看出,这些 API 支持的功能非常有限,包含有: C 标准库( libc )、标准数学库( libm )、压缩库( libz )、 Log 库( liblog )。


问:NDK带来什么

1、NDK 的发布,使“Java+C”的开发方式终于转正,成为官方支持的开发方式。

  • 使用NDK ,我们可以将要求高性能的应用逻辑使用 C 开发,从而提高应用程序的执行效率。
  • 使用NDK ,我们可以将需要保密的应用逻辑使用 C 开发。毕竟, Java 包都是可以反编译的。
  • NDK促使专业 so 组件商的出现。(乐观猜想,要视乎 Android 用户的数量)

2、NDK 将是Android平台支持C开发的开端。

NDK提供了的开发工具集合,使开发人员可以便捷地开发、发布C 组件。


分享到:
评论

相关推荐

    Android Studio JNI/NDK 编程

    JNI(Java Native Interface)是Java平台的一部分,提供了一个框架,使得Java代码可以调用本地(非Java)代码,而NDK(Native Development Kit)是Google提供的工具集,用于在Android平台上编译和调试C/C++代码。...

    Android Studio JNI_NDK开发实例

    Android Studio JNI_NDK开发实例是Android应用开发中的一个重要领域,涉及到Java与原生代码(C/C++)的交互。JNI(Java Native Interface)是Java平台的一部分,它允许Java代码和其他语言写的代码进行交互。NDK...

    android eclipse jni(ndk) 开发环境的搭建

    ### Android Eclipse JNI (NDK) 开发环境搭建详解 #### 一、引言 随着移动互联网的迅猛发展,Android平台的应用开发变得越来越重要。而JNI(Java Native Interface)与NDK(Native Development Kit)作为连接Java层...

    android jni和NDK简单案例(.so库调用)

    Android JNI(Java Native Interface)和NDK(Native Development Kit)是Android平台开发中的重要组成部分,它们允许开发者在Java代码中调用C/C++原生代码,实现高性能计算、利用硬件加速或者集成第三方C/C++库。...

    Android NDK JNI 经典实例

    Android NDK JNI 经典实例Android NDK JNI 经典实例Android NDK JNI 经典实例Android NDK JNI 经典实例Android NDK JNI 经典实例Android NDK JNI 经典实例Android NDK JNI 经典实例

    Android NDK jni常用的API

    Android NDK jni 常用的API Android NDK 开发时需要的常用的 JNI API 可以分为以下几类: 获取版本信息 * `jint GetVersion(JNIEnv *env);`:获取 JNI 函数版本信息,返回值为 jint 类型,在 C/C++ 中 jint 为 32...

    android JNI运行NDK编译成的可执行文件

    总结来说,Android的JNI和NDK结合使用,可以让开发者充分利用C/C++的性能优势,编写本地代码并生成可执行文件。尽管直接运行可执行文件在Android上并不常见,但在特定情况下,它可以提供必要的功能和效率提升。在...

    尚硅谷Android高级开发技术之JNI和NDK开发

    而本套教程正是在Android开发中的核心重点开发技术(JNI/NDK),我们知道,Android的底层是Linux且Java的性能并不如C/C++好,所以在开发一些需要超高性能的App的时候就需要通过JNI来直接调用Android底层框架所提供的...

    Android之so文件、JNI和NDK

    综上所述,Android SDK提供了Java开发环境,NDK和JNI则扩展了原生代码的支持,使得开发者能够充分利用C/C++的优势,创建高效、安全且具有广泛兼容性的应用。在实际开发中,结合使用这三个工具可以大大提高开发效率和...

    Android-ndk-jni AES加解密 C++

    总之,Android NDK和JNI为我们在Android应用中实现AES加解密提供了一个高效且灵活的平台。结合像`tiny-AES-c-master`这样的轻量级库,我们可以轻松地在原生代码中实现加密功能,同时保持应用的性能和安全性。

    Android-jnindk编程

    在Android开发中,JNI(Java Native Interface)和NDK(Native Development Kit)是两个关键的组件,它们允许开发者使用C、C++等原生代码来编写部分应用,以实现高性能计算、利用硬件加速或者调用特定库。本篇文章将深入...

    android-jni-ndk

    Android NDK 是一款让开发者能够在Android应用中使用C和C++原生代码的开发工具集。它提供了一套工具,允许开发人员将本地编译的C和C++库嵌入到Android应用程序中,以实现性能优化或重用现有的C/C++代码。NDK的使用...

    AndroidStudio环境下的jni调用(NDK)

    AndroidStudio环境下的jni调用(NDK),这个教程可以让完全不会AndroidStudio的人学会jni调用。完全步骤话,非常简单。

    android_jni_ndk视频下载地址

    传智博客主讲,android jni ndk相关视频。百度网盘地址分享。

    jni之ndk hello world

    "jni之ndk hello world"是一个典型的入门教程,旨在帮助开发者理解如何在Android应用中使用JNI和NDK编写原生代码。 首先,让我们详细解释JNI。JNI是Java平台的一个接口,它定义了一组API,让Java代码能够调用本地...

    JNI NDK 开发指南

    JNI(Java Native Interface)是...《JNI NDK 开发指南》这本书可能涵盖了这些知识点,详细讲解了如何在Android应用中有效地利用JNI和NDK进行开发。阅读这本书,将帮助你从基础到进阶,全面掌握JNI和NDK的使用技巧。

    Android开发jni_ndk视频教程

    NDK开发,适合Android开发入门教程,视频教程,快速上手

    Android使用JNI调用Python so解释器

    在Android平台上,JNI(Java Native Interface)是一种技术,允许Java代码和其他语言写的代码进行交互。JNI在许多场景下被广泛使用,例如优化性能、访问特定硬件功能或利用已有的C/C++库。在这个特殊的场景中,我们...

    android ndk jni so库生成

    本篇我们将深入探讨如何使用Android NDK和JNI来生成本地动态链接库(so库)。 首先,我们需要了解NDK的基本工作流程。当你在Java代码中声明一个本地方法(如`native void someNativeFunction();`),Android Studio会...

Global site tag (gtag.js) - Google Analytics