`
aliusa
  • 浏览: 84060 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Android_SDK_NDK_JNI

 
阅读更多
Android SDK、NDK、JNI的简单介绍
1、SDK

(software development kit)软件开发工具包。被软件开发工程师用于为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件的开发工具的集合。因此!Android SDk 指的既是Android专属的软件开发工具包


2、JNI

Java Native Interface (JNI)标准是java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI 是本地编程接口,它使得在 Java 虚拟机 (VM) 内部运行的 Java 代码能够与用其它编程语言(如 C、C++ 和汇编语言)编写的应用程序和库进行交互操作
当然一般需要进行如下操作流程:
1) 编写java程序:这里以HelloWorld为例。为了实现在 java代码中调用c函数printf。
  代码1:

class HelloWorld {
  public native void testHelloWorld();
  static {
  System.loadLibrary("hello");
  }
  public static void main(String[] args) {
  new HelloWorld().testHelloWorld();
  }
  }

声明native方法:如果你想将一个方法做为一个本地方法的话,那么你就必须声明改方法为native的,并且不能实现。
Load动态库:System.loadLibrary("hello");
这里一般是以static块进行加载的。同时需要注意的是System.loadLibrary()的参数“hello”是动态库的名字。
2) 编译
javac HelloWorld.java
3) 生成扩展名为h的头文件 javah ?
JNIEXPORT void JNICALL Java_HelloWorld_testHelloWorld (JNIEnv *, jobject);
这 个h文件相当于我们在java里面的接口,这里声明了一个 Java_HelloWorld_testHelloWorld (JNIEnv *, jobject)方法,然后在我们 的本地方法里面实现这个方法,也就是说我们在编写C/C++程序的时候所使用的方法名必须和这里的一致)。
4) 编写本地方法实现和由javah命令生成的头文件里面声明的方法名相同的方法
      代码2:

#include "jni.h"
  #include "HelloWorld.h"
      #include other headers
JNIEXPORT void JNICALL Java_HelloWorld_testHelloWorld(JNIEnv *env, jobject obj)
{
    printf("Hello world!\n");
  return;
}

注 意代码2中的第1行,需要将jni.h(该文件可以在%JAVA_HOME%/include文件夹下面找到)文件引入,因为在程序中的JNIEnv、 jobject等类型都是在该头文件中定义的;另外在第2行需要将HelloWorld.h头文件引入。然后保存为 HelloWorldImpl.c就ok了。
5) 生成动态库
   这里以在Windows中为例,需要生成dll文件。在保存 HelloWorldImpl.c文件夹下面,使用VC的编译器cl成。 cl -I%java_home%\include -I%java_home%\include\win32 -LD HelloWorldImp.c -Fehello.dll 注意:生成的dll文件名在选项-Fe后面配置,这里是hello,因为在HelloWorld.java文件中我们loadLibary的时候使用的名 字是hello。
另外需要将-I%java_home%\include -I%java_home%\include\win32参数加上,因为在第四步里面编写本地方法的时候引入了jni.h文件。

3、NDK

NDK全称:Native Development Kit。
NDK是一系列工具的集合。
* NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk。这些工具对开发者的帮助是巨大的。
* NDK集成了交叉编译器,并提供了相应的mk文件隔离CPU、平台、ABI等差异,开发人员只需要简单修改mk文件(指出“哪些文件需要编译”、“编译特性要求”等),就可以创建出so。
* NDK可以自动地将so和Java应用一起打包,极大地减轻了开发人员的打包工作。
其实:
NDK就是能够方便快捷开发.so文件的工具。JNI的过程比较复杂,生成.so需要大量操作,而NDK就是简化了这个过程。
打个不恰当比方:JNI 需要自己买菜、洗菜、炒菜、煮饭,很麻烦;NDK就是宅急送,一个电话。
分享到:
评论

相关推荐

    Android--JNI-Device.zip_Android jni_android_jni_jni android

    Android SDK提供了工具和库来支持JNI开发。 3. **JNI开发流程**: - 定义`native`方法:在Java类中声明`native`关键字修饰的方法。 - 编译头文件:使用`javah`命令生成C/C++的头文件,该头文件包含了Java方法的C/...

    android-jni.zip_Android jni_android_jni_jni android

    JNI在Android开发中扮演着不可或缺的角色,尤其是在进行性能优化、利用硬件加速、调用C/C++库或者使用第三方SDK时。下面将详细阐述Android JNI的相关知识点。 一、JNI简介 JNI是Java平台标准的一部分,它为Java...

    CameraClient_大华java_大华android_jni_android_poetoj9_

    本文将详细讲解如何利用"CameraClient_大华java_大华android_jni_android_poetoj9_"这个项目中的资源,在Android平台上实现大华摄像头的拉流功能。 首先,`NetSDK.jar`是大华提供的Java接口库,包含了与摄像头通信...

    Android SDK NDK API 对应关系

    ### Android SDK、NDK与API Level对应关系详解 #### 一、引言 在Android开发过程中,SDK(Software Development Kit)和NDK(Native Development Kit)是开发者们经常接触到的概念,而API Level则是用于标识不同...

    ANDROID-NDK.zip_NDK_android_android ndk

    在Android应用开发中,NDK(Native Development Kit)与SDK(Software Development Kit)相辅相成,SDK主要负责Java层的开发,而NDK则为开发者提供了在Android平台上进行原生代码编程的能力。 **环境搭建** 1. **...

    Android-NDK.zip_NDK_android_android ndk

    NDK是Android SDK的一个补充,它并非替代SDK,而是与之协同工作,使得开发者能够混合使用Java和原生代码来构建应用。 **NDK的优势** 1. **性能优化**:对于计算密集型或图形密集型的应用,如游戏和科学计算,使用C/...

    android-sdk-NDK17.2.4988734.rar

    这里的"android-sdk-NDK17.2.4988734.rar"是一个特定版本的NDK压缩包,版本号为17.2.4988734,包含了编译、调试和优化Android原生代码所需的各种库、工具和头文件。 NDK的核心功能主要包括以下几个方面: 1. **...

    pro_android_cpp_with_the_ndk.pdf

    1.1.3 在Windows平台上下载并安装AndroidSDK 1.1.4 在Windows平台上下载并安装Cygwin 1.1.5 在Windows平台上下载并安装AndroidNDK 1.1.6 在Windows平台上下载并安装Eclipse 1.2 AppleMacOSX 1.2.1 在Mac平台上安装...

    myjni.rar_android_jni_native

    这个"myjni.rar_android_jni_native"压缩包包含了学习Android JNI开发的基本资源。 首先,`.classpath`文件是Eclipse或类似的IDE用于管理项目类路径的配置文件,其中包含了项目的库和源代码目录。在JNI开发中,它...

    android-sdk-NDK18.1.5063045.rar

    《Android SDK NDK18.1.5063045详解》 Android SDK NDK(Native Development Kit)是Android开发中不可或缺的一部分,它允许开发者使用C和C++编写性能敏感的部分,或者利用已有的C/C++库来构建应用程序。NDK18.1....

    hello-libs_jni_android_源码

    【标题】"hello-libs_jni_android_源码"是一个示例项目,专注于在Android平台上使用JNI(Java Native Interface)技术。JNI是Java平台的一部分,它允许Java代码和其他语言写的代码进行交互。这个项目旨在帮助开发者...

    android_ndk_linux-r64位下载

    2. **平台SDK**:针对不同Android API级别的头文件和库,允许开发者针对不同Android版本进行编译。 3. **JNI接口**:Java和本地代码之间的桥梁,使得Java代码可以调用C/C++函数。 4. **构建系统**:如Build System,...

    android-ndk(android-ndk-r25b-linux.zip)

    在Android中,JNI是Android应用与NDK之间的重要桥梁,使得Java应用程序可以调用C/C++编写的本地库,同时C/C++代码也能调用Java的方法。 2. **NDK的优势**: - **性能优化**:对于计算密集型任务,例如图形处理、...

    eclipse找不到java源码-EclipseAndroid_NDK_SDK:该存储库包含一个代表AndroidNDK+SDK混合项目的坚实

    它可以在自己内部编译ADT项目和CDT项目,其中包含生成器以生成JNI接口,链接的头文件以突出显示Java(SDK)和C ++(NDK)的语法 用法 假定您已经具有: Android SDK的安装和设置 Android NDK的安装和设置您应该能够...

    aarch64-linux-android-4.9.zip_NDK AARCH64_aarch64 ndk_android_nd

    总结,Android NDK AARCH64的开发涉及到多方面的技术,包括环境配置、JNI接口设计、原生代码编写与调试、性能优化以及安全与兼容性考虑。熟练掌握这些知识点,将有助于开发者构建高效、稳定且跨平台的Android原生...

    android-sdk-NDK21.0.rar

    Android SDK和NDK是开发Android应用的关键工具,它们在构建原生代码和本地库时起着至关重要的作用。本文将详细介绍这两个组件以及如何利用它们进行高效开发。 Android SDK(Software Development Kit)是谷歌提供的...

    Android_Jni 操作指南

    这包括安装Android SDK、NDK(Native Development Kit),以及设置好Android Studio的相关路径。NDK提供了一系列工具,用于编译和链接C/C++代码。 3. **创建JNI项目** 创建一个新的Android Studio项目,并在项目的...

    android_jni操作指南.zip

    1. SDK和NDK:使用JNI需要安装Android SDK和NDK。SDK用于Java开发,而NDK提供了编译和链接C/C++代码的工具链。 2. 配置环境变量:确保`ANDROID_NDK`、`JAVA_HOME`等环境变量正确设置,以便编译过程能顺利进行。 三...

Global site tag (gtag.js) - Google Analytics