第二章:Android之NDK配置与简单使用
使用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的安装配置和基本测试,其最重要的目的是使交叉编译以适应移动平台的不同硬件。
第二章:Android之NDK配置与简单使用相关推荐
- 浅入浅出 Android 安全:第二章 Android Linux 内核层安全
第二章 Android Linux 内核层安全 来源:Yury Zhauniarovich | Publications 译者:飞龙 协议:CC BY-NC-SA 4.0 作为最广为人知的开源项目之一 ...
- lua-protobuf 新手入门篇-第二章.Unity lua-protobuf 环境配置
第一章.编译lua-protobuf支持库(Windows插件-Win10编译) 第二章.Unity & lua-protobuf 环境配置 第三章.二进制proto读取功能,与,lua-pr ...
- 第二章 Android内核和驱动程序(转)
这一章我们来介绍Android系统的核心部分-Android内核.我们说Android系统是基于Linux系统的,最根本的原因就在于Android采用了Linux内核. 2.1 Android内核特性 ...
- Android之NDK开发的简单实例
NDK全称为Native Development Kit,是本地开发工具集.在Android开发中,有时为了能更好的重用以前的C/C++的代码,需要将这些代码编译成相应的so,然后通地JNI以供上层J ...
- spring boot @value_spring+vue全栈开发实战-第二章Spring Boot 基础配置-笔记0302-2020
Spring Boot 基础配置 1. Web 容器配置 2.Properties 配置 3.类型安全配置属性 1. Web 容器配置 a.常规配置 在 Spring Boot 项 目 中,可以内置 ...
- WindowsServer实训项目——第二章:安装和配置WindowsServer
一.实训目的 1.熟练使用VMware 2.掌握VMware的详细配置与管理 3.掌握使用VMware进行Windows Server网络操作系统的安装 二.项目背景 公司新购进一台服务器,硬盘空间为 ...
- 第二章 ELKstack部署及配置
一:elasticsearch部署: 1.1:环境初始化: 最小化安装 Centos 7.2 x86_64操作系统的虚拟机,vcpu 2,内存4G或更多,操作系统盘50G,主机名设置规则为linux- ...
- Java语言程序设计(基础篇) 第二章
第二章 基本程序设计 2.2 编写简单的程序 1.变量名尽量选择描述性的名字(descriptive name). 2.实数(即带小数点的数字)在计算机中使用一种浮点的方法来表示.因此,实数也称为浮点 ...
- PD3.1详解 第二章(EPR)
PD3.1详解 第二章(EPR) 第一章节简单的介绍了如何进入EPR模式,这里主要逐步说明具体的细节: 一. 如果需要进入EPR 那么所用的线必须要满要求,我们知道PD3.0中我们必须要有emark线 ...
最新文章
- postfix+mysql 发件服务
- SAP PM 初级系列5 - 工作中心相关的配置
- JNDI学习总结(1)——JNDI入门简介
- Python探索记(01)——HelloWorld及Python的注释
- 北哥大话Yii2缓存机制 - File缓存
- php开启mysqlnd,如何启用mysqlnd的PHP?
- c语言程序输入n个数字排序,输入n个数字然后进行排序,用C语言编写。注意是n个数啊,不是确定的个数。...
- ES5-19 变量声命周期、垃圾回收原理、arguments
- ASP.NET AJAX 学习笔记
- ViewController的生命周期你真的懂了吗?
- 读取SAE J1939协议数据流
- 微信小程序05 事件绑定与事件传参
- 激光雷达障碍物检测与追踪实战——基于欧几里德聚类的激光雷达障碍物检测
- 私域流量客服社群运营员工工作绩效表格方案计划手册指南宝典
- HTML的relative与absolute区别
- 新建销售群开场语句_销售会议开场白台词
- DIV+CSS+JavaScript技术制作网页(旅游主题网页设计与制作)云南大理 (1)
- S32K144调试记录(二)
- - **体感试衣镜等功能代码工程分享**
- 锂电池电量百分比计算_锂离子电池容量计算之电压法