C\C++ 程序员从零开始学习Android - 个人学习笔记(一) - 计划和书籍

目的

  在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红宝书了,直接OPENGL-ES

2.3.1 计算机图形学

   没想好,或者说太多了-_-。

2.3.2 3D引擎

  android上能用的一些3D引擎,能用轮子就用轮子。

  


你可能感兴趣的:(Android)