windos jni之NDK环境配置
来源:互联网 发布:win8笔记本网络受限 编辑:程序博客网 时间:2024/05/27 20:27
AndroidNDK ( Native Development Kit)实际上属于 JNI (Java Native Interface )的一部分, JNI就是允许 Java 代码和其他语言写的代码进行交互。Android 基于 Java平台,自然也是支持这个特征了,因此Android NDK 就是支持在 Android平台上使用 Java 语言调用采用C/C++ 编译的库文件的一系列工具
NDK 的下载页面为:http://developer.android.com/sdk/ndk/index.html ,当前最新版本为r8 ,如下图所示
前面我们说过Android SDK支持三种平台,这里相应的Android NDK也是分为三种平台Windows、Linux和 Mac OS X。其中Mac OS X后面的括号中给出Intel。说明仅支持英特尔的硬件平台,即在英特尔的电脑上安装的Mac OS X系统才能使用该NDK,早期的苹果电脑使用的是非英特尔的硬件平台,所以这个对于苹果电脑用户而言需要是注意的。Linux平台后面的括号中给出x86,说明只支持运行在x86体系上的Linux平台。当然Windows平台早期还支持Alpha处理器,后来的版本就只支持x86体系了。鼠标点击链接后就开始下载相应的版本了。对Windows平台有特殊情结的可以使用Windows版本的NDK,当然需要Linux系统的模拟环境,最常用的就是Cygwin。苹果迷就直接用Mac OS X版本的NDK就行了。大多数用户,我们还是推荐使用Linux平台的NDK,下面我们就以Linux平台的NDK来配置NDK的开发环境。对于Linux环境,Google官方推荐平台是Ubuntu,我们这里用的是CentOS6.2版本,Linux不同版本对于开发来说大同小异,下面我们就以CentOS6.2来进行配置NDK。
下载Linux 平台的NDK文件解压缩后看到的目录结构如下所示:
toolchains:具体进行编译时的工具,包括对三种架构arm、mips和x86的支持
以hello-jni例子中Android.mk文件为例,如下图所示
当然,NDK既支持C语言环境,也支持C++语言环境,不过对C++的特性支持要少一些,具体可以看文档中对C++支持的相关说明。另外在Android.mk和Application.mk中都可以加入对C/C++进行编译的一些编译选项,以例子san-angeles中的Android.mk文件为例,如下图所示:
和前面的相比,这里上边多了LOCAL_CFLAGS,它的右边就是编译选项,这个例子中包括两个ANDROID_NDK和DISABLE_IMPORTGL,每个选项前加上-D作为标识符。下边多了LOCAL_LDLIBS,它的右边是编译中用到的库,每个库名前加上-l作为标识符。
two-libs:两个库的使用,first为静态库,second为动态库,并且second库调用first库
我们以NDK开发包中自带的例子hello-jni来进行演示和说明。进入jni目录下,运行ndk-build就可以进行编译了,如下图所示:
在Eclipse中加载该例子,由于该例子最开始不是Eclipse项目,需要创建新项目,选择从源代码方式创建,如下图所示:
创建后,如下图所示:
Jni 目录下文件hello-jni.c 如下图所示:
从上面两幅图可以看到,hello-jni在Java环境中的类HelloJni中声明的函数名为stringFromJNI,前面要用到修饰符native,类HelloJni所在的包名为com.example.hellojni,需要用函数System.loadLibrary加载lib库libhello-jni.so,采用static修饰符确保只加载一次。然后按正常函数使用就行了。而在NDK这边,即C语言这层,函数命名要遵循Java_包_类_函数的命名方式,中间用下划线_进行连接,如上面所示,在包com.example.hellojni中的类HelloJni声明为stringFromJNI,则在C/C++文件中定义的函数名为Java_com_example_hellojni_HelloJni_stringFromJNI,注意区分大小写。函数可以传参数,本例子中没有传入参数,只是有返回参数,返回参数的数据类型为jstring,即Java中的String类型。对于C/C++中与上面的Java环境打交道的数据类型可以参照JNI,具体可访问官方网站http:// java.sun.com/docs/books/jni/。对于函数Java_com_example_hellojni_HelloJni_stringFromJNI中的两个参数env和thiz是系统必须的,如果需要输入参数,必须再增加参数。这个例子运行的结果就是在文本控件(TextView)上面显示Hello from JNI by C !,如下图所示:
我们对上面的例子hello-jni 稍微改动,改名为 hello-jni-ex,为了以示区别把类名和包名也稍微修改了一下。C++ 语言这种方法灵活性更好,当然,具体采用哪一种根据自己的喜好选择。 Hello-jni-ex 如下图所示
程序运行结果如下图所示
V void void
Z jboolean boolean
I jint int
J jlong long
D jdouble double
F jfloat float
B jbyte byte
C jchar char
S jshort short
数组则以"["开始,用两个字符表示
[I jintArray int[]
[F jfloatArray float[]
[B jbyteArray byte[]
[C jcharArray char[]
[S jshortArray short[]
[D jdoubleArray double[]
[J jlongArray long[]
[Z jbooleanArray boolean[]
Ljava/net/Socket; Socket jobject
- windos jni之NDK环境配置
- windos jni之NDK环境配置
- JNI之------NDK开发环境的配置
- JNI 之 Eclipse下NDK环境配置
- Android JNI 开发之NDK环境配置
- Android JNI 开发之NDK环境配置
- android(NDK+JNI)---NDK开发 环境配置
- Android JNI开发之NDK环境配置(eclipse)
- JNI 之 Eclipse配置NDK
- AndroidStudio如何配置NDK/JNI开发环境
- AndroidStudio如何配置NDK/JNI开发环境
- AndroidStudio如何配置NDK/JNI开发环境
- AndroidStudio如何配置NDK/JNI开发环境
- AndroidStudio配置NDK/JNI开发环境细节
- AndroidStudio如何配置NDK/JNI开发环境
- AndroidStudio配置NDK/JNI开发环境
- Android Studio NDK JNI编译环境 配置
- 初识JNI之-Android Ndk环境搭建
- javascript中的function不存在重载的概念
- Qt4之改变鼠标指针形状 .
- 较详细的介绍JNI
- Java的类加载器
- 黑莓ECLIPSE3.5开发环境不识别资源文件导致编译不通过解决方案附文件(系统语言问题)
- windos jni之NDK环境配置
- 六、挂在网络跟文件系统并向nand flash烧写文件系统
- C#调用C++Dll封装时遇到的一系列问题
- TCustomADODataSet组件的一些错误
- C# ThreadPool 的改进
- 自动化测试新途径- 上帝之眼 sikuli
- XML
- POJ 3710 Christmas Game (Tarjan求连通分量+树形博弈删边游戏)
- Hibernate 常见异常处理(转帖)