第二章:Android之NDK配置与简单使用

来源:互联网 发布:字模软件 编辑:程序博客网 时间:2024/05/22 14:11

使用Android开发App不只是使用Java,还可以使用C/C++,这就是我们要使用NDK的目的 -- 为了能让Java识别所要调用的C/C++。

第二章 NDK配置与简单使用

前言

对于有过开发跨语言经历的朋友而言,使用不同语言同时在一个项目中使用不算什么奇怪的事情,

甚至在编写C/C++程序时,有时为了各种原因用到(一般是嵌套或者调用)asm(汇编),

从形式上来看 这是跨语言的表现,但是实质上来说,此种做法是利用了编译器的可识别性和可编译性,也就是说C/C++的编译器本身就能够编译asm的内容。

众所周知,JVM是不能直接编译和运行C/C++的,因此,NDK的诞生就是为了解决这个问题。

其实NDK就是运用了早已存在的JNI技术,只不过增加了不同硬件平台的编译器(arm,x86,amd等),使得运行在这些硬件平台的软件能够调用C/C++程序。

获取NDK

1、选择正确的系统类型和对应的版本

首先你得知道你的硬件类型和系统位数,

系统位数:

windows:电脑->属性。。。)

Linux: uname -m(不带*_64输出的就是32)

硬件类型:

查看你的PC的CPU类型

windows可以查看管理工具

Linux 执行 lshw 或者查看 /proc/cpuinfo

笔者下载的NDK包:android-ndk32-r10-linux-x86.tar.bz2 (可以看出是:Linux 32位 x86)

2、安装压缩包

解压: tar jxvf android-ndk32-r10-linux-x86.tar.bz2 -C $path到任意路径(建议放到 /opt 或者eclipse的安装目录附近),解压后目录名称可以自定义(维持原样亦可)

为了在任意路径下能够使用NDK中的命令,需要将NDK解压后的路径加入到环境变量PATH中,同时为了修改方便将这个路径定义为一个变量(在/etc/profile文件的最后添加),即:

export ANDROID_NDK_PATH=$apth/android-ndk-r10

export PATH=$PATH:$ANDROID_NDK_PATH:$ANDROID_SDK_PATH/tools

测试安装成功与否

进入NDK的解压目录:cd $ANDROID_NDK_PATH/samples/hello-jni

执行:ndk-build

若输出:

...

[x86] Gdbserver      : [x86-4.6] libs/x86/gdbserver
[x86] Gdbsetup       : libs/x86/gdb.setup
[x86] Install        : libhello-jni.so => libs/x86/libhello-jni.so

...
则说明安装成功

后记:

默认情况下ndk会交叉编译所有支持的硬件平台,也就是jni目录下的Application.mk 文件中是 APP_ABI := all
如果仅需要支持某一种类型的,比如 x86 ,则只需要 修改其值为 APP_ABI := x86 

其余的还有:armeabi-v7a,armeabi,mips

如何使新建工程,能够被正确编译,模板格式可以参考hello-jni这个目录结构,还有需要配置jni目录下的Android.mk与Application.mk(都是文本类文件)

小结

本章介绍了NDK的安装配置和基本测试,其最重要的目的是使交叉编译以适应移动平台的不同硬件。


0 0