第二章:Android之NDK配置与简单使用
2015-06-17 17:10
246 查看
使用Android开发App不只是使用Java,还可以使用C/C++,这就是我们要使用NDK的目的 -- 为了能让Java识别所要调用的C/C++。
甚至在编写C/C++程序时,有时为了各种原因用到(一般是嵌套或者调用)asm(汇编),
从形式上来看 这是跨语言的表现,但是实质上来说,此种做法是利用了编译器的可识别性和可编译性,也就是说C/C++的编译器本身就能够编译asm的内容。
众所周知,JVM是不能直接编译和运行C/C++的,因此,NDK的诞生就是为了解决这个问题。
其实NDK就是运用了早已存在的JNI技术,只不过增加了不同硬件平台的编译器(arm,x86,amd等),使得运行在这些硬件平台的软件能够调用C/C++程序。
系统位数:
windows:电脑->属性。。。)
Linux: uname -m(不带*_64输出的就是32)
硬件类型:
查看你的PC的CPU类型
windows可以查看管理工具
Linux 执行 lshw 或者查看 /proc/cpuinfo
笔者下载的NDK包:android-ndk32-r10-linux-x86.tar.bz2 (可以看出是:Linux 32位 x86)
到任意路径(建议放到 /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-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配置与简单使用
前言
对于有过开发跨语言经历的朋友而言,使用不同语言同时在一个项目中使用不算什么奇怪的事情,甚至在编写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的安装配置和基本测试,其最重要的目的是使交叉编译以适应移动平台的不同硬件。相关文章推荐
- [Android问答] px、dp和sp,这些单位有什么区别?
- Android学习 9-> 表格布局TableLayout和网格布局GridLayout
- Android双向滑动菜单完全解析,教你如何一分钟实现双向滑动特效
- Android学习笔记——Handler(二)
- Android滑动菜单特效实现,仿人人客户端侧滑效果,史上最简单的侧滑实现
- Android照片墙完整版,完美结合LruCache和DiskLruCache
- [安卓]Android onTouch事件解析
- android 监听数据库ContentObserver使用说明
- android webview配合Html5数据操作
- android myclass
- android开发环境搭建
- androidstudio使用指南(持续更新)
- Android5.0最新特性一览,看看有没有你需要的
- Android DiskLruCache完全解析,硬盘缓存的最佳方案
- Android基础知识_Activity生命周期
- WP8.1 VS iOS VS Android全方面大比拼
- Android开源项目分类汇总
- (译)Android高效加载大图、多图解决方案,有效避免程序OOM
- IntelliJ IDEA /Android Studio显示文档
- 关于android manager 不能更新的问题