目的
在Android上开发高性能的3D游戏/应用
背景
有一定C++基础,无相关工作经验
2年C工作经验
2年移动开发经验(MTK/SPRD)
无任何java基础
计划
1,了解Android
2,根据1的信息制定详细的学习计划
3,实施
1,了解Android
1.1 现状
市场份额稳定增长,版本众多,目前以2.1 - 2.3为主。最新版本是4.0。
1.2 架构
见下图:
应用开发者使用java语言进行开发,调用Android SDK提供的API来进行实际的硬件操作(绘图、网络、按键/触摸响应等)。
APPLICATION FRAMEWORK对上提供开发APP的接口,对下调用Core Libraries和LIBRARIES来实现相应功能。
APPLICATION FRAMEWORK和Core Libraries为java编写,LIBRARIES为C\C++编写。
最底层是Linux内核,基础版本是2.6,虽然与Linux社区有各种争论,但两边的开发者(Linux主线和Android)依然尽可能保持同步。
1.3 Android-java和java的区别
这里使用Android-java这个自造词可能不太准确,姑且如此罢,能理解就行。学习一门语言通常学三个部分:语法、库、运行时系统。对比Android-java和java
1, 语法(语言特性),A-java满足JDK1.6的所有特性。
2,库,A-java实现了J2SE标准类库的一个子集,实现了大部分API,但UI部分主要是自己实现,没有使用J2SE中的相关类库。对awt,只实现了java.awt.font,完全没有实现swing.。另外Android自己提供了大量针对移动开发的类库。
3,运行时系统:A-java使用Dalvik-VM,而非标准的JVM。
Android APP运行于Dalvik虚拟机之上,每个APP运行时都启动一个独立的Linux进程,这个进程运行一个Dalvik-VM实例,APP在此之上运行。
Dalvik-VM和标准JVM(Oracle)区别主要在于:
a,Dalvik-VM基于寄存器实现,而JVM基于栈实现。在ARM这种多寄存器的RISC架构上,寄存器实现可以拥有更好的性能。
b,Dalvik-VM的可执行(加载)二进制文件使用了自定义的.dex,而不是.class;JAVA-SRC -> CLASS -> .dex,.dex包含了多个.class,因此可以有效的处理多个.class文件的冗余,从而使得安装包(APK,本质上是ZIP,包含.dex、资 源、元数据文件等)体积有显著的减少。
2 学习计划
对于没有java背景的同学,是先学java,再学android好呢;还是一上来就直接学android,然后根据所需不时的补充java知识好呢?
就个人经验而言,先打好基础往往会事半功倍,所以选择先学java。
我们的目标是开发好的APP,那么什么是好的APP呢? 这里抛开APP产品(创意)不谈,只谈技术方面:
a,速度快、占用资源少对于任何应用都是很棒的因素,对于移动应用更不用说;因此算法、底层这部分的知识要有。
b,设计,一般都是从维护的角度来讲,高内聚、低耦合、尽可能少的依赖、可读性等等等等,对于(小型)移动APP,这些不一定是最重要的;对于上规模的应用(移动网游),这些一如既往的重要。所以这方面只能自己权衡。
c,快速发布。无论抢占市场还是试水市场,这都是必需的。这可能意味着你会基于某种框架(自写或第三方)来做特定类型的应用,可能意味着你有自己的代码生成器,因此框架的学习(和寻找)以及掌握某种脚本语言是有用的。
d, 人机接口,UI,这部分还是找人合作比较好。。
具体计划如下:
2.1 java基础(1 - 1.5月)
2.1.1 语言基础
《java核心编程》卷一、卷二,跳过awt、swing部分,基本语法和核心类库的学习。
2.1.2 设计基础
《java编程思想》,巩固语言基础的同时,学习OO的基本设计。
《Effctive java》,惯用法、最佳实践。
《设计模式解析》或另外一本《头先》,书不厚,好歹要搞OO了,多少了解一下。虽说OO抑或非OO,其设计原则本质一致,日常用之而不知其名的情况亦不少,但系统的学一下还是有好处的,四人帮的书还是暂不考虑了。
时间有限,其它的大部头的OO著作暂不考虑。
2.1.3 底层
《深入java虚拟机》、《Java虚拟机规范(Java SE 7)》(感谢国内java人士的无私翻译》。由于移动设备的特性,由于个人喜好,所以选择学习这一部分,这部分最好和前面两部分结合起来学,相互印证,自有乐趣在其中。
2.2 Android基础(1个月)
2.2.1 SDK基础
不求全,首先学习基本框架,然后根据所需(3D)学习SDK相关部分。
视频 + 官方SDK文档 + 国内杂书打底。
《精通Android 3》 - 评价不错,好吧,其实是因为作者是老外。
2.2.2 框架基础
暂无资料推荐,必要的一些东西还是要学习一下,为了性能。
2.2.3 Linux相关
暂不考虑。
2.3 3D基础(1个月)
如果要做的很棒,这块的学习和积累是很漫长的,具体可参见刘未鹏同学关于计算机图形学方面的推荐书单,以下是一个快速上手计划。
2.3.1 OPENGL-ES
OPENGL-ES
2.3.1 计算机图形学
没想好,或者说太多了-_-。
2.3.2 3D引擎
android上能用的一些3D引擎,能用轮子就用轮子。