`
1320438999
  • 浏览: 127509 次
  • 性别: 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 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