C\C++ 程序员从零开始学习Android - 个人学习笔记(一) - 计划和书籍
2012-01-18 19:21 CreateLight 阅读(2056) 评论(1) 编辑 收藏 举报
目的
在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引擎,能用轮子就用轮子。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述