如何自学 Android

摘要: 看到不少人提问非科班该如何学习编程,其实科班也基本靠自学。有句话叫“师傅领进门修行靠我的”,再厉害的老师能教你的东西都是颇有限的,真正的修行仍是要靠本身。我本科是学数学的,虽然研究生是计算机专业,但研究生每每是作研究工做,并不会接触编程这么基本的东西,关于编程相关我都是靠自学。java

看到不少人提问非科班该如何学习编程,其实科班也基本靠自学。有句话叫“师傅领进门修行靠我的”,再厉害的老师能教你的东西都是颇有限的,真正的修行仍是要靠本身。我本科是学数学的,虽然研究生是计算机专业,但研究生每每是作研究工做,并不会接触编程这么基本的东西,关于编程相关我都是靠自学。对于Android这一块,是参加工做还开始接触,开始本身学习的。linux

学习级别,不少人都每每划分红入门、初级、中间..骨灰级等。这里就简单地划分为两级:基础篇和进阶篇。另外,本文涉及到的全部书籍都是Gityuan 在学习过程当中所读过的比较经典的一些书籍,才推荐给你们。android

1、基础篇git

看书的姿态:学习过程每每你们都须要看书,网上一搜,每每会有一大推的书推荐给你们去阅读,面对这么多书,该如何选择,如何阅读的呢,对于同一个层级的书籍选择一本精读,其他的粗读、略读便可,大同小异,对于精读的书籍须要反复的阅读。程序员

1.1 Java篇github

Java是Android的基础,建议初学者必定要先学习Java基本知识,进而再学习Android,按部就班,切莫心急,只有扎实的基础才能建造牢固的上层建筑。算法

Java书籍编程

Thinking in Java: 中文版《Java编程思想 》,这是一本很是经典的Java书籍,不少人都说这个书不适合初学者,我记得本身当初看的第一本Java书即是这本书。看完第一遍对Java有了总体的理解,但不少细节没有彻底理解,查了资源又看了第二遍,对Java有了更深地理解。再后来一段时间后,能力也有所提高,再拿起这本书又看了第三遍,发现对面向对象有了更深一步的理解,这本书就是适合反复的阅读。设计模式

Effective Java:Java进阶书,这本书采用“条目”的方式来展开的,总提出了78条Java具体的建议,对Java平台精妙之处的独到看法,还提供优秀的代码范例。做为Java进阶之书,对Java水平的提高大有裨益。浏览器

Java concurrency in Practice:中文版《Java并发编程实战》,本书采用按部就班的讲解方式,从并发编程的基本理论讲起,再讲述告终构化并发应用,性能与测试,最后将显式锁、原子变量、非阻塞算法这些高级主题。对于Java并发这一块算得上是一本很棒的书。

Java Performance:中文版《Java性能优化权威指南》,Java之父James Gosling推荐的一本Java应用性能优化的经典之做,包含算法结构、内存、I/O、磁盘使用方式,内容通俗易懂,还介绍了大量的监控和测量工具。关于优化都是属于较深的领域,对Java有必定基础后,颇有必要了解看看。

Java虚拟机,这是做为进阶Java高手必需有所了解:

The Java Language Specification,官方Java文档(英文版)

The Java® Virtual Machine Specification,官方Jvm文档(英文版)

《深刻理解java虚拟机》:这是国内关于Java虚拟机讲得很是全面的一本书,从Java GC到Java虚拟机内部实现以及优化策略,做为Java高手很是值得一看的书籍。

本文的重点是讲如何学习Android,因此姑且把Java基础与进阶的书都放到Android学习的基础篇里。做为Android开发者来讲,彻底没有必要一开始都对Java理解得那么深,只有要看一两本Java基本书,掌握Java面向对象的思想的核心要义即万物皆为对象,掌握Java基本语法,基本就能够开启Android的学习之路。在后续对Android也有必定理解后,再慢慢不断提高Java和Android水平。

有朋友私信我觉着这个java书难度有点高,多是本人在看Java书籍以前,还看过些许C和C++的入门书的缘故,因此看的第一本书《Java编程思想》。若是你真的是零基础,第一次接触编程,想以Java做为本身的入门语言,那么你能够先看看《Java语言程序设计》(基础篇) 或者《Java从入门到精通》,做为初学者险掌握Java基本语法,平时遇到不熟悉的方法,多查看API文档便可,慢慢地就熟悉了。

1.2 Android基础篇

有了必定的Java基础(不须要精通Java),就能够开始入门Android。建议初学Android者,必定要先搭建本身的开发环境,先准备jdk和Android Studio环境。再看书的过程,一边看知识点一边写示例程序,一来加深印象,二来提升动手能力。

《疯狂Android讲义》:做者李刚,这是我看过的第一个Android书籍,目前有第三版了,我当时看的是第二版基于Android 4.2,书中有大量的实例,记得当时每看完一个实例就跟着敲了一遍,大概花了一周时间把这本书看完并把大部分的实例代码都亲手敲了一遍。

《第一行代码》:做者郭霖,网上有很多人都推荐这本书做为Android入门书,但我当时没有看过。这是图灵系列图书,前段时间图灵的编辑看到个人博客gityuan.com,因而联系到我问是否有兴趣出书,便提到郭霖的《第一行代码》也是他们出版社推出的,而后就给我邮寄了一本。我大概扫了一扫这本书,内容的确比较基础,做者文笔不错,书中还穿插了很多打怪涨经验升级的片断,比较风趣,初学者能够看看。

Android的基本书籍,只需一两本便可,没有必要看太多基础书籍,不一样能力就该有不一样的追求,这里就再也不介绍其余基础书籍。 另外,Android开发过程当中老是须要各类开发环境、工具的下载,再这里推荐一个不错的网站AndroidDevTools.cn,收集整理了 Android开发、设计等相关的各类工具大集合,很是全面,并且速度也不错哦,最重要的不用就可下载到最新的工具。

1.3 Android一手资料

何为Android一手资料?那就是Google官方给出的资料,这里每每是英文版的,养分价值极高。其实你只要英文还凑合+工具,强烈建议你直接看Android官网的资料,千万别被英语所吓倒,由于不少专业名称,你们一看就明白好比Activity/Service等这些代码名称自己就是英语,剩下地都就很是基础语法,不懂能够随时翻译,我通常都是用Chrome浏览器+Google翻译插件,哪里不会点哪里,妈妈不再用担忧个人英语了。

言归正传,若是你能看完并理解下列的内容,那么你彻底能够没有必要再看前面介绍的书籍,而且对于Android已有至关熟悉了。

developer.android.com:Android开发官网,下面列举经常使用的资料:

另外由胡凯发起了Android培训课程中文版;对官方文档进行翻译;

Android training:Android培训文档;

Android API指南:Android组件、Manifest配置文件,动画/图像等相关介绍;

Android Tools:性能、测试、Android Studio等各类工具说明文档;

source.android.com:介绍Android开源码相关的内容;

Android Performance Patterns:2015年Google陆续在Youtube上发布的Android性能优化的视频,目前已更新第4季。

国内Google组织,优酷上发布了相应的 (中文)Android 性能模式 第四季;

另外由胡凯发起了Android性能优化典范中文版文档;对官方视频进行翻译并整理;

android-developers.blogspot.com:Android官方博客,有一些比较不错的feature,博客会第一时间呈现。

1.4 Android资源整理

到这里,那么你已经具有开发App的本领。平时须要本身动手多写写App,另外就是看看别人优秀的App是如何写的,下面列举一些开源库、工具以及App:

android-arsenal.com:做者vbauer整理收集Github中各类开源库与工具,并提供搜索功能,是国外整理得最全面的库;

Android 开源项目汇总:做者Trinea整理的各类开源库,是国内整理得最全面的库;

codeKK 开源项目源码分析:从源码的角度,分析Android较流行的优秀开源框架;

codota.com:这是一个代码搜索引擎,收集的是各类API的优秀示例Java代码。

固然还有不少优秀的博客和网站值得推荐… //TODO

2、进阶篇

做为程序员,不去阅读源码,仅仅看API文档,只是浮于表象,这是远远不够的。.真正最能锻炼能力的即是直接去阅读源码,不只限于阅读Andoid系统源码,也包括阅读各类优秀的开源库。

2.1 阅读源码的重要性

借用Linux之父Linus Torvalds的一句名言:Read the fucking source code。无论是阅读Andoid系统源码仍是优秀的开源框架,对能力那都会有一个巨大的提高;首先,能学习到优秀的代码风格和设计思想;能真正作到“知其然,还需知其因此然”;能指导本身更加灵活的使用API,能更加快速地找到系统bug的根源。

2.2 阅读源码的准备

Java基础:上层framework以及App层都是采用Java语法;

C/C++基础:Android的jni/native层代码采用C++,Linux 采用C;

Linux:Android内核基于Linux的,了解Linux相关知识对深刻掌握Android仍是颇有必要。

Git:Android源码采用git和repo进行管理;

Make:Android源码采用Make系统编译,源码系统中会看到不少Android.mk之类的文件;

Source Insight:这绝对是看源码的神器;能够在Java、C++、C代码之间无缝衔接;

Eclipse:熟悉经常使用快捷键,工欲善其事必先利其器;虽然Source Insight很方便,但因为对Eclipse的熟悉感,对于framework Java层面的代码,我仍是更习惯用Eclipse来看,对于Native代码以及linux代码则采用Source Insight来看;

Android Studio:这是Google官方支持的App开发环境,关于Android Studiod使用教程;

Google Drawings:这是画图工具,Gityuan博客中的文章都是采用Google Drawing完成,好比Binder开篇文中的图。

StarUML:这是类图,Gityuan博客文章的类图和流程图都是采用StarUML完成,好比理解Android进程建立流程文中时序图。

2.3 阅读源码的姿态

阅读源码毫不是从源码工程按顺序一个个的文件,从首行看到尾行。正确而高效地阅读源码的姿态应该是以某一个主线为起点,从上层往底层,不断地追溯,在各个模块、文件、方法之间来回跳转,反复地阅读,理清整个流程的逻辑。同时带着思考去看源码,尝试去揣测做者的用意,去理解代码的精妙之处,去思考代码可能存在的缺陷,去总结优秀的代码设计思想。下面说说我在阅读Android源码过程常涉及的库。

阅读Android源码:

下面是我以Android开机过程为主线,展开一系列的文章 Android开篇中的一副流程图,在公司内部分享时我曾屡次如下图为流程整个Android架构,以下图:

screenshot

Android系统源码

android.googlesource.com:Google官方源码,国内没法直接访问,对于一个程序员来讲能力是很是有必要的。Android源码中包含的库很是之多,下面列举我在看Android源码过程当中涉及较多,也是比较常看的一些库:

android/platform/packages/apps:Android自带的app,好比Email,Camera, Music等,对于应用开发工程师主要关注的目录;

android/platform/frameworks/base: Java framework,这是framework工程师看得最多的目录;

android/platform/frameworks/native:Native framework;

android/platform/art:Art虚拟机;

android/kernel/common:Android内核,这是驱动工程师最关注的模块;

android/platform/system/core :核心系统;

android/platform/libcore:平台的lib库; 另外,对于朋友来讲,还能够经过上Github经过Android主页 下载Android源码,这些都是定时从Google官方源码的镜像同步而来的。

2.4 优秀资源

牛顿曾说过:“若是我看得更远一点的话,是由于我站在巨人的肩膀上”,这句话很具备实用价值,看完前面的介绍,你千万不要一上来就一头扎进源码的世界,当心你会进入二次元世界,处于混沌状态,最后崩溃乃至放弃求知之路,必定要合理利用现有的优秀资源。

Android 系统源码分析

Innost的专栏

邓凡平前辈所写博客,条例有序,覆盖了Android系统大部份内容;

《深刻理解Android》 (卷I,卷II,卷III)

老罗的Android之旅

罗升阳前辈所写博客,从各个层面介绍Android系统;

《Android系统源代码情景分析 》

Gityuan源码分析

对于邓凡平和罗升阳两位前辈的博客基于Android 2.x或4.x,目前Android已发展到Android 6.0。无论Android如何变化,其核心思惟变化并无很大,因此两位前辈的博客仍是颇有值得学习和参考的地方。话又说回来,Android通过了几个大版本的迭代,不管是从代码结构仍是总体逻辑仍有很多变化。故博主计划写一关于Android 6.0源码系列的博文。

Gityuan做为Android界新秀,能力尚不及不少前辈,但有一颗乐于分享的心,有一份痴于Android的品质,有一种坚持的态度,已经并一直还在努力奋斗的道路上…

2.5 进阶书籍

《深刻理解Linux内核》

《深刻Linux内核架构》

《Linux内核设计与实现》

《Linux设备驱动程序》

《重构·改善既有代码的设计》

《编程珠玑(卷1,卷2)》

《设计模式》

《设计模式之禅》

《人月神话》

前4本书都是关于Linux,若是你不是须要从事Linux相关开发,只想提高对Android总体的理解,那么只需看一到两本,对Linux的进程、内存、IO以及驱动有所了解,对CPU调度、进程间通讯有所熟悉就基本能够。另外,优秀的书还有不少,这里只介绍/列举我看过的书,目前还在看一些优秀的书,后续再更新。

3、其余

最后,再说说关于学习编程的番外篇:

好奇心比雄心走得更远:不少人对将来空有满腔的雄心壮志,每每不如对技术要有一份好奇心,一份探索欲,再加上一份执着的人。

要有open的心态:曾经的我也只是把本身的所思所得都放入本身的云笔记,不多整理,这其实不利于技术发展,有空应该多整理本身零散的知识点,以为不错的点能够拿出来写成博客,那是对能力的又一层提高。另外,在低头作技术的同时,还应该有空抬头看世界,不能闭门造车。

天道酬勤:学历只能表明过去,能力表明如今,潜力表明将来! 你不把本身逼一把,你压根不知道本身有多优秀,只要努力去学习,去挖掘潜力,进而提高自我技术修为,将来再也不是梦!共勉之!

解决问题的方式:遇到问题,必定要先尝试本身解决,解决不了再请教他人。这是对本身的一个锻炼,也是对他人的一个尊重,能够有多种途径自行搜索:

百度一下,不少时候仍是能有所帮助的,不要过度强调google,彻底抛弃百度,毕竟中文看起来比较快;

先中文关键词google一下;再英文关键词google一下;

stackoverflow.com、知乎等技术问答网站内直接搜索;

查看官方文档;

若是有源码,尝试直接看源码,看可否解决;

有空能够多逛逛github,多看看Google官方文档,多关注社区,定会收获很多;

固然,最最重要的是能静得下心,锲而不舍地专研技术。

====================================分割线================================
文章转载自 开源中国社区[http://www.oschina.net]

相关文章
相关标签/搜索