给自己的android扫盲文 - 1
1. 你得知道,android开发打一开始就是java的事,没其它语言什么事情,就是说google提供的android sdk中的api都是java的api
2. 至于强大的跨平台语言,你懂的,非c/c++莫属,说java是跨平台,那是扯淡,没java虚拟机看你能跑java不, 而c/c++语言是将程序直接编译成本地机器码,这与java这种语言是完全不一样的
那么问题来了,我开发游戏要使用跨平台的语言比如说C++,但是android是用java开发的,我用C++写的代码没法在android下面编译,运行. 将C++程序员拒之门外, google不会做这么蠢的事情
好,第一个问题就是,如何在android下面编译并运行C++写的代码呢
答案就是:在android下面使用ndk编译c/c++
在这里有一些东西要我要给自己科普一下
在java的平台上有一个叫jni的东西,它的功能就是允许java代码与其它语言写的代码进行交互
在NDK r5之前,你想在android下面使用c/c++进行开发,只能写成动态链接库,然后在java中以jni来调用这些库
NDK r5之后,你就可以使用纯C/C++来开发android程序了,这是2011年的事情了
到今天2015年初,有一个问题很多人都搞不懂,为什么在android上面非要搞一个jvm呢,本来嵌入式开发cpu和内存都是很宝贵的资源,而在这方面的控制C/C++做的比JAVA好
至于原因,个人觉得吧,现在硬件厂商实在是太多了,你在PC上面开发程序一般都是跑在同种操作系统下面的,而操作系统屏蔽了这些硬件之间的差异,但是android并没有在系统这一级别屏蔽硬件之间的差异,而是通过JVM来屏蔽硬件之间的差异,也就是说在android系统上面再搞一个jvm系统,也难怪它有一点点慢了
不过最新的android系统已经支持直接使用C/C++编译成本地语言运行,而不在jvm上面运行了,我觉得android还是很有搞头的
好了,现在回头,说说NDK, 前面说了在android使用NDK来将C++代码编译成库,然后由java通过jni来调用这些库
那什么是NDK呢,google官方给的解释就是SDK前面加上Native,那么叫NSDK咯,他想了想,还是叫NDK比较好,这只是称谓而已
那什么是NDK呢,它是一套工具集,允许你用C++语言实现应用的一部分
OK, 我们来创建一个android项目
所有的本地代码都会存储到一个叫jni的文件夹中,打开它来看看吧
有一个Android.mk 文件, 它是用来构建项目的
有一个Application.mk 文件, 它是用来存储编译参数的(虽然它不是必须的)
再创建个ndk-build文件来显示编译过程(同样也不是必须的)
参考文档
http://www.importnew.com/8038.html
http://www.importnew.com/8052.html
http://www.cnblogs.com/qq78292959/category/304331.html <这个是android ndk翻译系列>
最新文章
- django的序列化
- 时间类型(DataTime)赋空值
- Kooboo中怎么新增一个关联的Details 动态页面。
- IList, ICollection ,IEnumerable AND IEnumerator in C#
- golang RWMutex读写锁分析
- 在C#中interface与abstract class的区别
- nodejs应用:文件上传
- IIC协议理解(转)
- 002 python准备做题的一些准备
- Java使用RabbitMQ之公平分发
- MFC笔记5
- Duplicate Manager Pro for Mac(重复文件查找工具)破解版安装
- python-selenium,关于页面滑动的操作
- 包与常用模块:time,sys。
- PHP+Ajax+plupload无刷新上传头像代码
- html中一些莫名的空格
- java环境配置错误集锦
- tomcat多域名配置(转)
- ubuntu 14 root 账户 启用与ssh登录
- Linux的cut命令
热门文章
- 2012Hulu校园招聘笔试题
- r语言 function 指定多个返回值
- Python 私有方法和引用计数初讲
- 关于Unity中FPS第一人称射击类游戏制作(专题十)
- Opengl绘制我们的小屋(二)第一人称漫游
- SAP 以工序为基准进行发料 机加工行业 Goods Issue to Routing
- 【转载】K-NN算法 学习总结
- 第三百六十三节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的mget和bulk批量操作
- Spring JDBC调用存储过程
- unity-----------------------------关于WheelCollider设置或小车运动的注意事项