NDK

JNI和NDK编程

走远了吗. 提交于 2020-02-05 07:31:44
Java JNI的本意是Java Native Interface(Java本地接口),它是为了方便Java调用C、C++等本地代码所封装的一层接口。通过Java JNI,用户可以调用C、C++所编写的本地代码。 NDK是Android所提供的一个工具集合,通过NDK可以在Android中更加方便地通过JNI来访问本地代码,比如C或C++。NDK还提供了交叉编译器,开发人员只需要简单的修改mk文件就可以生成特定CPU平台的动态库。 使用NDK的好处: 1.提高代码的安全性。由于so库反编译比较困难,因此NDK提高了Android程序的安全性。 2.可以很方便的使用目前已有的C/C++开源库 3.便于平台间的移植。通过C/C++实现的动态库可以很方便的在其他平台上使用。 4.提高程序在某些特定情形下的执行效率,但是并不能明显提升Android程序的性能。 JNI和NDK开发所用到的动态库的格式是以.so为后缀的文件 一、JNI 的开发流程 1.在Java中声明native方法 2.编译Java源文件得到class文件,然后通过javah命令导出JNI的头文件 3.实现JNI方法 4.编译so库并在Java中调用 二、NDK的开发流程(NDK的开发是基于JNI的) 1.下载并配置NDK 2.创建一个Android的项目,并声明所需的native方法 3

JNI和NDK

喜夏-厌秋 提交于 2020-02-05 05:23:17
JNI: Java Native Interface Java调用本地代码接口 NDK : Native development Kit 安卓提供的本地开发包,用于编译成.so文件 (linux平台的库文件) ABI :Application binary interface 应用程序二进制接口 ,.os文件以lib开始,以abi结尾,以便各自Cpu调用对应的so文件 一、JNI流程 1、新建本地方法类,以native关键字标识,例如 public class JniTest { public native String getText(); public native Void setText(String text); } 2、使用javac生成class文件,然后使用javah生成.h文件(此处主要,由于.h文件中的函数名需要包名和方法名,所以javah的参数必须是完整的带包名的 例如 javah com.test.jni.JniTest) 3、新建.c或者.cpp文件实现.h文件的函数 4、然后使用gcc 编译成so文件,需要linux环境。Android开发者可用NDK包中的ndk-build命令代替 二、NDK流程 1、新建本地方法类,以native关键字标识,例如 public class JniTest { public native String getText(

Eclipse NDK 配置

时光怂恿深爱的人放手 提交于 2020-02-05 04:55:20
一、关于NDK: NDK全称:Native Development Kit。 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实例的实现: 对于Windows环境下NDK的开发,如果使用的NDK是r7之前的版本,必须要安装Cygwin才能使用NDK,所以为Eclipse需要配置的builder,其实是执行Cygwin,然后传递ndk-build作为参数。在NDKr7开始,Google的Windows版的NDK提供了一个ndk-build.cmd的脚本,这样,就可以直接利用这个脚本编译

Eclipse NDK 配置

别等时光非礼了梦想. 提交于 2020-02-05 03:55:29
转自 Eclipse NDK 配置 一、关于NDK: NDK全称:Native Development Kit。 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实例的实现: 对于Windows环境下NDK的开发,如果使用的NDK是r7之前的版本,必须要安装Cygwin才能使用NDK,所以为Eclipse需要配置的builder,其实是执行Cygwin,然后传递ndk-build作为参数。在NDKr7开始,Google的Windows版的NDK提供了一个ndk-build.cmd的脚本,这样

Eclipse NDK 配置

房东的猫 提交于 2020-02-05 03:52:38
一、关于NDK: NDK全称:Native Development Kit。 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实例的实现: 对于Windows环境下NDK的开发,如果使用的NDK是r7之前的版本,必须要安装Cygwin才能使用NDK,所以为Eclipse需要配置的builder,其实是执行Cygwin,然后传递ndk-build作为参数。在NDKr7开始,Google的Windows版的NDK提供了一个ndk-build.cmd的脚本,这样,就可以直接利用这个脚本编译

Android之NDK开发初探

北慕城南 提交于 2020-02-05 03:52:18
总的来说ANDROID的NDK远不及其应用开发的SDK完善(虽然经过一番不算复杂的折腾发现NDK用起来很方便),而且它本身也不推荐使用这种做法,至少目前也不将此作为重点。但是某些中间层面系统测试(主要如多媒体和OpenGL ES的测试和演示等)必须通过本地代码实现,因此NDK应当是必由之路。 最近尝试了一下,目前将JNI部分基本理顺(而后续则需要链接相关的ANDROID本地库,如OpenCore系统)。 网上这方面相关介绍也有不少,但是多不太完整,此处权作工作记录。 1 NDK使用 1.1 配置NDK 本处讨论在Windows下使用cygwin处理NDK的Windows版本。Linux下的使用方法基本一致。根据unix系系统的规范,所有讨论中涉及名称的字符串均大小写敏感。这里仅NDK的配置和C代码编译须用cygwin,此后的ANDROID调试等均可使用普通的命令行操作。 参考链接: http://developer.android.com/sdk/ndk/1.5_r1/index.html 收到NDK后首先在NDK的主目录(其中包含apps, build, docs, …文件夹)下,输入命令: build/host-setup.sh 用来配置NDK工具(例如编译器的使用,目标平台等),最终生成out/host/config-host。由于out必须在主目录中

Android NDK开发轻松入门

孤街浪徒 提交于 2020-02-05 03:49:35
简介 : AndroidNDK 是能使 Android 应用开发者把从 c/c++ 编译而来的本地代码嵌入到应用包中的一系列工具的组合。 注意 : AndroidNDK 只能用于 Android1.5 及以上版本中。 I. Android NDK 目标 : Android 虚拟机允许你的应用在源码中通过 JNI 调用本地代码(c/c++)中实现的方法们。概括起来,这表示: --你的应用的java源代码中要声明一个或多个方法,这些方法前面需有 'native' 关键字,这表明它们被本地代码实现。如: native byte[] loadFile(String filePath); -- 你必须提供本地的共享库(.so),库中包含这些方法的实现。这个库将会打包你的应用的 .apk 中。这个库的命名必须符合标准的 Unix 命名规则,也就是: lib<something>.so 这种形式。并且还要包含一个标准的 JNI 入口。例如: libFileLoader.so -- 你的应用必须显式的加载本地库。例如,要在应用启动时加载,只需简单地在代码中增加如下语句: static { System.loadLibrary("FileLoader"); } 注意写库的名字时你不需要使用 'lib' 前缀和 '.so' 后缀。 AndroidNDK 只是 AndroidSDK 的一个组件,它帮助你

NDK的讲义

老子叫甜甜 提交于 2020-02-05 03:48:29
介绍: Android SDK是一个允许Android应用开发人员使用C或C++源文件编译并嵌入到本机源代码中的应用程序包的一组工具。 重要说明: Android NDK只能用于android 1.5以上版本 1. Android NDK的目的: Android虚拟机允许你的应用程序源代码通过JNI调用在本地实现的源代码,简单的说,这就意味着: 你的应用程序将声明一个或多个用’native’关键字的方法用来指明它们是通过本地代码实现的 例如:native byte[] loadFile(String filePath) 你必须提供包含实现这些方法的共享库(就是.so),将共享库打包到你的应用程序包apk中,这些库文件必须根据标准的Unix约定来命名为 lib<something>.so,并且是需要包含一个标准的JNI的接口,例如 libFileLoader.so 你的应用程序必须明确的装载这些库文件(.so文件),比如,在程序的开始装载它,只需要简单的添加几句源代码: 1 static { 2 System.loadLibrary(“FileLoader”); 3 } 注意:这里你不必再将前缀lib和后缀.so写入。 Android NDK对于Android SDK只是个组件,它可以帮你: 生成的JNI兼容的共享库可以在大于Android1.5平台的ARM CPU上运行

Android学习——第一个NDK程序

荒凉一梦 提交于 2020-02-05 03:38:20
  在前面的学习中,我们已经讲解了关于NDK编程的环境搭建流程,简单的使用我们也通过官网本身自带的例子进行说明了。可是相信大家一定还存在这么的一个疑惑:“如果我要自己利用NDK编写一个Android应用,具体应该怎么做?有什么要求”。OK,别担心,下面就让我们一起来利用NDK来编写一个简单的Android应用。 1 创建一个新的Project 1) 通过以下命令创建一个新的Android Project (详细的使用方法,大家可以回去重新参考博文《 Android学习第二天-android常用命令 》) android create project -n myfirstndk -t 1 -p ./myfirstndk -k cn.uc.myjni -a MainActivity 当Project创建成功后,我们可以通过查看文件夹发现它的大体架构如下图:    2 开始Coding 1) 进入该项目的MainActivity.java所在的目录下,新建一个定义本地方法的类 NumberSum.java ,输入以下代码: 1 package cn.uc.myjni; 2 3 public class NumberSum { 4 5 // 声明一个本地方法 6 public native int add (int a, int b); 7 8 // 加载名为 libnumber_sum

jni入门 eclipsecygwin+ndk

别等时光非礼了梦想. 提交于 2020-02-05 03:34:35
声明:本文转载自 http://blog.sina.com.cn/s/blog_7aa2703601010jrx.html 一、安装CDT、NDK CDT是一个在Eclipse下可以搞C++代码的插件。 NDK 提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so 和java 应用一起打包成apk。 怎么在eclipse装这两个我就不多说了。大家按照以前装adt和sdk的方法来搞就好了。不过有一点是要注意的:因为cygwin是在window上模拟linux的控制台环境,所以对于访问文件的路径是不能带有空格的,貌似也不能带中文。所以ndk的解压后存放的路径必须不能包括空格或中文,比如这种“D:\Program Files\android-ndk-windows”在cygwin是不能识别成功的。 二、安装cygwin 然后是cygwin,我给大家发的那个cygwin压缩包是有安装说明的,大家按照说明一步一步来就可以安装成功。 三、配置NDK环境变量 上述三样安装成功后,就是配置NDK环境变量的问题了。 1、 首先找到cygwin的安装目录,找到一个home\<你的用户名>\.bash_profile文件,我的是:E:\cygwin\home\Administrator\.bash_profile。(注意:我安装的时候我的home文件夹下面神马都没有,解决 的办法