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就是宅急送,一个电话。
分享到:
相关推荐
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平台上安装...
它可以在自己内部编译ADT项目和CDT项目,其中包含生成器以生成JNI接口,链接的头文件以突出显示Java(SDK)和C ++(NDK)的语法 用法 假定您已经具有: Android SDK的安装和设置 Android NDK的安装和设置您应该能够...
Android_JNI_Helloworld Android Studio的安装项目以使用NDK 创建一个Android项目 添加ndk目录: ndk.dir = / pathTo / Android / ndk 使用Android Studio模板添加JNI文件夹 右键单击项目名称(应用程序)->新建->...
Android studio 编译第一个NDK程序的详细教程的代码,附上Android studio编写第一个NDK工程的过程详解文章的链接https://blog.csdn.net/weixin_37639900/article/details/89680670
Android ndk开发的工具包,类似Android开发所用的sdk
这是一个我通过学习和整理的一个资料,关于在Android上进行sdk开发、ndk开发、jni开发相关的介绍。
博客名称 : 【Android NDK 开发】在 C 代码中获取 Android 系统信息 ( NDK 项目创建 | NDK 配置 | 获取 Android 系统版本号 ) 博客地址 : https://hanshuliang.blog.csdn.net/article/details/102933704
JNI编程_一些技巧、Android_NDK开发实例、Android_RIL层剖析(官方翻译)、Android的Message机制(简单小结)、Android的主题和风格介绍、Android日历完整实现、Android网络开发详解、Google Android SDK开发范例大全...
基于 Android NDK 的学习之旅-----JNI LOG 打印 eclipse工程文件
B01_JNI开发要点_雕龙小技 B02_JNI的多线程机制 B03_NDK与OpenGL 3D绘图框架 B04_介绍SDK-Service与核心服务 B05_实机演练_撰写第一个Core Service B06_远程服务的Proxy-Stub设计...附录BX01_使用Android NDK开发工具
Time for action – installing Android SDK and NDK on Windows Setting up Mac OS X Time for action – preparing Mac OS X for Android development Installing Android development kits on Mac OS X Time ...
兼容EGNOS SDK Core v3.0.0 Android 5 此版本的EGNOS SDK基于官方的GSA,可在以下网址找到: ://egnos-portal.gsa.europa.eu/developer-platform/egnos-toolkits/egnos-sdk/download-egnos-sdk。已重构为Eclipse ...
Android C++高级编程:使用NDK_Onur Cinar, 于红PDF电子书下载 带书签目录 完整版 原书名:Pro Android C++ with the NDK 原出版社: Apress 作者: (美)Onur Cinar 译者: 于红 佘建伟 冯艳红 丛书名: 移动开发...
前言 这几天专门研究了下JNI编程,在...我使用的是android studio 2.3.3版本,搭建ndk开发环境比较简单,打开File—-Settings—-Appearance&Behavior—-System Settings—-Android SDK,选择SDK Tools,将CMake,LLDB,
java前端源码下载带有 Android Studio 的原生 ...行更改为指向YOUR_OPENCV_SDK/sdk/native/jni/include 同步gradle 运行应用程序 如何从头开始创建原生 OpenCV 项目 这是我制作这个项目的方式。 如果您
AndroidSerialPort ...涉及到的 jni 开发可以参考:【Android 应用开发】Android 开发 之 JNI入门 - NDK从入门到精通 jni 开发遇到的坑:https://github.com/jp1017/Android-Collection/issues/10
此仓库讨论如何将OpenCVNonfree模块(SURF和SIFT)与Android JNI和NDK结合使用。 本教程将向您展示在OpenCV for Android NDK项目中构建非自由模块(SIFT和SURF)的快速方法。 您可以按照本教程来设置自己的项目。 ...
Android中JNI的使用方法,JNI的开发使用方法,SDK开发
适用于Android NDK的OpenCV ...将的OpenCV Android SDK库路径更改为my/path/to/OpenCV-android-sdk/sdk/native/jni/OpenCV.mk 将中的所有文件移动到您的设备 这很烦人,但是没有很好的解决方案,因为OpenCV需要一个