浅析2DX-Lua原理(一)

  • 题外

目前我的团队正使用2DX的另一个实现quick-cocos2dx来制作下一款产品,又一次得益于开源社区.提到开源 作为受益者们 很多都缺乏对自由软件认知.下面针对安卓平台记录我的一些理解,如你有更深的认识 或者 发现我的误区欢迎指点.(以下分析可能存在谬误)

  • 题内 – android机器结构

由于2DX本质是使用C/C++编写 所以在安卓平台上必须使用到NDK,NDK是一种基于原生程序接口的软件开发工具。通过此工具开发的程序直接以本地语言运行,而非虚拟机。因此只有java等基于虚拟机运行的语言的程序才会有原生开发工具包。NDK与JAVA的关系 对比AIR来说 相当于ANE与AS.只是速度和深度他们都不在一个水平上.通过下图展示的是android整个系统的大题结构:

就android机器而言:

  1. 最开始是我们见到的硬件,屏幕,机壳,电池,等我们所能摸到看到的.
  2. 再往上的是GPU CPU 各种电路板 等我们在表面看不到的.
  3. 再往上到了驱动层(可能驱动层和硬件层之间还有一层)
  4. 再往上到了Linux内核层
  5. 硬件抽象
  6. 再往上到了用户层,这层主要包括了android虚拟机 和 系统原生编程接口.包括OpenGL
  7. android虚拟机再往上最靠近的是安卓开发Framework
  8. 再往上就是我们实际屏幕看到的应用了.

可能说上面的这些和本文的主题不复合,但是我觉得作为(伪)android开发,无论你是应用开发者 还是驱动开发者 还是游戏开发者,应该对每天接触的东西有个本质的了解.了解一下又不不是让人人去研究驱动开发,说到这里我比较认同”每个人都应该学编程”的观点.

  • 题内 – 系统原生语言

2dx通过C/C++(openGL本身是C库)调用openGL实现对GPU的各种渲染 进而把CPU解放出来 让游戏本身流畅的运行在android设备中.根据前面的android系统原理我们知道,android虚拟机通过NDK(JNI)实现对原生语言的支持.(这里的原生语言 是指开发系统本身的语言 我们知道 任何一个系统 几乎都是C/C++开发的..当然据我所了解 还有几个比较小众的系统 是用16位汇编开发的,所谓操作系统 其实并不是单单指今天大行其道的WINDOWS LINUX MAC OS,就我的理解而言操作系统本身就是一个虚拟机.虚拟机本质上是定制一套规则让进入虚拟机的人或者应用程序一起遵守.就像道德与法律,其实我们大家本身就活在一个超级大且无比复杂 且隐形的虚拟机中.这个虚拟机运行在我们周遭环境这个大硬件上.按照这个观点很容易让人觉得一切皆是操作系统啊.)

NDK本质上是使用了JNI()Java Native Interface),所以下篇我将简单分析JNI的原理.

参考文档

2 评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注