注:
当初学习Android开发的总结,当时写得很细致,很多细小的东西都写进去了,篇幅很大,建议有需要的同学根据目录来跳转。
技术这东西更新很快,一些内容可能有更好地解决方式或工具了,这里我不再另行标注说明了。请理解。
阅读对象
初次接触Java/Android编程,希望开始Java/Android旅程,却又无从下手,茫茫然不知所措,希望得到指点和帮助而且学习欲望足够强烈并最终希望成为Android系统上层维护开发工程师的通讯人才。请打开此书,相信定能解答很多你在入门学习当中的疑惑。完全的小白读者,作者的建议阅读顺序是从头到尾依次阅读;有一些基础但感觉还有所欠缺的读者,请根据需要索引目录,找到所需的知识查遗补漏。做什么都可以有艺术在里面,祝愿大家在成为熟手大牛的路上愉快!Let’s enjoy this journey.
1.怎么从零开始?
至真正的完全小白(编程都没接触过多少的人):既然想入门,至少先去网上查查Java是什么(一门面向对象的热门的编程语言),Android是什么(一个开源的、被大量移动设备所采用的操作系统)。看看就好,不要求理解到多到位深刻,概念即可。
然后,Java基础必须要有,如果一点也没有,那就先看谭浩强先生主编的《Java编程基础》,时间有限的话,至少熟读前1至8章。特别提醒,必须边看边练习(练习的意思是在电脑上敲代码)随书代码实例。需要提醒注意:刚开始不需要幻想自己要进行创造性改造,完整地敲出书上的代码即可,边敲边理解知识点。这里涉及到安装Eclipse,不会的话后面有教。
接着,进行Android开发基础知识学习。选李刚编著的《Android疯狂讲义》或李宁编著的《Ohpone完全讲义》,选其一即可,不要贪心。前者书上的代码详细,照着敲基本都可完美运行,至少读前10章,随书实例一个也别放过;后者书上有较多的开发心得,实例讲解里丰富的前后原因分析比较适合前不着村后不着店的基础匮乏者,至少读前8章。这里涉及到安装Android开发环境,不会的话后面有教。
@2.怎样安装Eclipse?
方法:首先要安装JDK,在Oracle官网www.oracle.com/technetwork/java/javase/downloads/ 下载安装。然后安装Eclipse,在其官网www.eclipse.org/downloads/ 下载。只要JDK安装正常,Eclipse解压后即可直接使用,Eclipse拥有针对不同需求的多个版本,我们下载标准版本或者移动开发版本即可。这步如果有问题,多上网搜索,不要怕麻烦,出错也没关系,心态要摆正。
3.怎样安装Android?
其实这个问法是有问题的,安装Android更应该理解为在手机或其他移动设备上安装Android操作系统;我们这里讲的是怎样安装Android开发环境/开发组件。因为一般情况小白在需要安装Android开发环境/开发组件的时候,都会省略成这样的问法,所以使用了它作为标题,顺便与第二小节的标题对应。
然后需要一个叫做SDK的东西(Software Development Kit,软件开发工具包)。任何一门开发语言/平台,要方便开发者进行开发工作,必须给他们工具,这些工具放在一个工具箱里,这就是SDK。我们要进行Android开发,当然就下载Android SDK,官方网址为:https://developer.android.com/sdk/index.html 。有了ADT后打开Eclipse界面会看到多出两个Android相关按钮,如下图所示。一个是绿色机器人肚子中间有个向下的箭头的图标(Android SDK Manager),我们就是通过点击它进行下载更新SDK;一个是绿色手机屏幕中有个小机器人头像(Android Virtual Device Manager),我们通过点击它进行模拟器的创建和管理。
图1 ADT安装成功示意图
上网一搜,几乎所有帖子都是先说需要SDK,然后安装ADT。但是,从实际操作的角度,个人觉得先ADT后SDK更符合实际安装顺序,希望能纠正网上对于广大初次安装者的谬误引导。
宝典方法:目前(从2013年起)Android官网直接提供了打包好的Eclipse(图标为{小机器人}的那个东西),直接下载解压所有东西都有了,很方便使用,下载地址为http://developer.android.com/sdk/index.html 。
我们在通过ADT安装/更新SDK时,往往会出现难以下载等问题。鉴于此,特别拉出一个小节用来帮助大家解决这个问题,请见下面“如何更新SDK”。
4.如何更新SDK?
普通方法一:打开SDK Manager,选择更新。缺点是国内网络问题,往往无法完成下载或者下载十分缓慢。
宝典方法:找已有更新的同事,进入SDK根目录下的platforms文件夹,可看到以android-NUMBER命名的若干文件夹,如下图所示。每一个NUMBER即一个Android API标号,如android-17,即API为17的SDK。选择你所需的API文件夹,比如4.0.3的API为15,4.2.2的是17。拷贝至自己电脑的SDK下的相同目录下面,重启Eclipse即可。
图x SDK API文件夹示意图
5.必须要同步最新的SDK吗?
分两种情况:
一、我们主要是做手机操作系统,里面的上层应用维护,所以,并不需要。即,我们开发Android4.4的项目,所使用的SDK API最大支持4.0也没关系。只要可以阅读代码并做修改即可。
二、除非是要独立开发Android4.4的APK。
6.入门水平的必须技能?
至此,做个简单小结:你已经算是Android开发入门水平了。
这时你拥有以下技能:
一、工具OK(可以在安装指南的帮助下独立完成开发环境的搭建)。拥有完好的可开发的Eclipse,能完好的新建开发Android工程,并可以正常运行。
二、基础技能OK。拥有Java和Android开发知识,能读懂代码,可以进行基本开发。
7.入门后如何进阶?
一旦入门后,很多人会进入下一个迷茫期:接下来我们该怎么做?学生朋友们会感到无聊和无从精进,工作朋友们则一方面想要赶紧进入实际项目开始有所产出,一方面又对能否担当实际开发任务而忐忑午安。
如果是工作中的开发人员(手机系统开发维护),则尽快开始Android系统(源码目录结构、源码内容等)的学习;如果是学生等其他朋友,则继续进行Android开发技术进阶学习,方法是读完讲义,练习更多的代码,直至开发出个人的应用上架到各Android应用市场(这方面不详细讲了,网上论坛很多可以多学习了解)。下面的内容,主要面向工作中手机系统开发维护的开发人员,立志以后进入移动开发领域的同学朋友或是做APK应用开发的朋友请酌自身需要进行阅读。
入门后,即可开始学习、预研实际项目的代码,掌握各种项目中所需要用到的工具。这个阶段最重要的是多问、多操作,因为很多知识不一定有现成的文档教你,比如日常工作中大部分开发工程师如何做比较能节省时间等等。后面的内容,即是这些操作的根本点,只要一个个去练习熟悉,在过程中自然可以体会和掌握很多技能和技巧。Let’s begin.
8.如何下载代码?
第一步,下载项目代码(本文所使用的环境为Unbuntu 10.0.4LTS)。
说明:出于安全的考虑,一般公司均对代码的下载权限进行了控制。要想从服务器上下载必须先申请开通下载代码的权限。至于如何申请开通,由于和本节内容关系不大,请见后面介绍Git/Gerrit的小节。
方法:
询问集成工程师或其他资深同事,让他告诉你下载代码的命令。
打开终端,敲入命令进入所要存储的地方/路径(这里使用/local目录),
$cd /local
新建源码目录,
$mkdir eyelike-v1.0-dint
然后进入源码目录,
$cd eyelike-v1.0-dint
在源码目录输入下载命令,
$repo init –u git@10.92.32.10:alps/manifest.git -m eyelike-v1.0-dint.xml && repo sync
遇到确认用户名和密码的时候直接按enter键,遇到确认下载的时候按y即可。这样等待半小时左右下载即成功。
9.如何在Eclipse中导入整个工程?
我们阅读代码,一般都是在Eclipse中进行。代码已经下载下来了,马上便会遇到如何在Eclipse中导入整个工程的问题。
方法:
1.找到所下载完毕的源代码根目录,例如之前下载的yarism-v1.0-dint,进入以下路径:
工程名(这里即是eyelike-v.10-dint)/development/ide/eclipse
2.显示隐藏文件(可按快捷键Ctrl+H),会找到一个叫做.classpath的隐藏文件,复制,粘贴至源代码根目录,这里即yarism-v1.0-dint文件夹下面。
3.然后,打开Eclipse,新建一个Java工程,这里特别注意是Java工程,而不是Android工程。
4.将默认路径(Use default location)前的小勾取消,选择源代码的路径,这里即yarism-v1.0-dint文件夹的全路径,点击OK,即可完成源代码导入。
特别注意:由于代码量很大,所以一般需要等待若干分钟才能全部导入完毕。这时,在工程名旁边出现一个红色小感叹号是正常现象,不影响代码阅读、跳转等,所有人都是这样的,千万不用担心。
10.从代码哪个部分/模块入手?
源码中有非常多的文件夹目录和类文件,导入工程后肯定会茫然失措。到底怎样入手阅读呢?最好的方法当然是先从一个小部分阅读熟悉,然后再慢慢拓展。而“一个小部分”,我们常常以“模块”作为单位。这时,必须讲解一下模块的划分。
首先从手机功能的角度来引入。我们的手机可以实现打电话、发短信、发Email、使用蓝牙进行文件传输、照相摄像、听音乐看视频等等众多功能。而之所以我们能使用这些功能,皆是因为系统代码中有这些功能的实现。
然后从源码角度来解释。在源码中,即将这些代码按照功能进行了封装,分别存储在不同的文件目录下面。一方面方便开发、一方面方便后续阅读维护。作为上层应用开发维护,主要涉及到的代码目录为:eyelike-v1.0-dint/packages/apps。当你进入这个目录,就会发现其中包含了很多文件夹,名字诸如:Calendar、Settings、Camera等等。而粗略地来讲,每一个文件夹便是一个模块。
接下来从部门组织架构的角度来补充。一个软件开发部门是按不同的功能模块来进行分组的,小组一般包括:集成组(开发环境搭建维护、代码发布管理、定制化框架开发等职能)、系统组(系统分配维护、驱动开发、升级、系统测试工具的开发维护等职能)、应用开发组(各上层应用、系统应用、第三方应用的开发维护等职能)。这时,大家应该可以理解这篇文章主要是讲给做应用开发组的同学的(系统开发中的上层应用开发维护)。因此再详细介绍下其中又包括哪些Team:APP_PIM(负责浏览器、Email、联系人等模块)、APP_Connectivity(负责蓝牙、GPS、WIFI、NFC等连接相关模块)、APP_Multimedia(负责音视频播放器、相机等模块)、APP_LocalService(负责Launcher、设置、锁屏、第三方APK等模块)。每个Team负责对所划分的不同模块进行开发维护。
综合上面三个角度,我们首先要确定自己的开发方向:哪个组哪个模块。因此必须找到自己期望的模块,进入该Team进行学习工作。这一步多去思考自己的优势劣势,自己的兴趣,并多与导师/TeamLeader进行沟通了解。最终,做出自己的选择。
11.如何入手一个模块?
当确定好将要进入的模块后,便要开始对该模块的学习,最好通过代码的学习和PR的演练两个步骤来慢慢深入。通常一个模块是有一些已有的总结文档可以拿来查看学习的,发挥主观能动性多去问同模块的同事、以及上网查询都十分必要。
好的代码学习方法是先理解/了解这个模块在手机里的使用和表现。下面以蓝牙为例进行说明。比如说进入蓝牙模块有三个入口,一个是设置里的蓝牙设置选项,一个是通知栏下拉列表快捷设置中的蓝牙开关,再者是进行文件分享时弹出的通过蓝牙传送的选择界面。其次是它的具体功能,传送文件、开关的操作、搜索周边的蓝牙设备、可见不可见的设置、重命名蓝牙设备、查看上传下载历史等等。这方面只要拿一台手机多去使用熟悉即能掌握,而且一般情况下我们日常使用手机或许已多多少少有过了解接触,需要做的重点工作是:系统化地了解它的工作机制,比以前更加全面没有遗漏。
然后,在代码中找到外在功能对应的包、类。做到这一点对于一个对模块一无所知的人来说相对是比较困难的。慢慢来,多花些时间和精力。最先的方法首当问同模块的资深同事,请他指明主要的包、类,可能只需要5分钟时间给你点一下,就能少花你几天的时间!多感谢同事吧!然后,一般的学习总结、技术文档都会包含代码结构,找到它,研究理解熟悉之。
到这里,就不得不介绍连接真机进行调试的方法了。
12.如何利用Eclipse Debug手机代码?
方法:
1.选中DDMS,连上手机,选中要调试的进程;
2.选中Run→Debug Configurations;
3.在Remote Java Application下面选中要调试的项目;
4.在右边的选项port键入:8700;
5.然后在想要调试理解的代码处设置断点,点击调试即可。
解释说明一下:这样,当点击手机进行操作的时候,代码运行到断点的地方后,手机便无法继续运行了,此时可以按F5/F6进行单步调试,在代码中可以查看各变量等代码信息。用此方法,可以巧妙地进行代码理解阅读:比如在将要进入蓝牙设置的类的最开始地方设置一个断点,然后进行调试,这样就可以一步一步跟到各操作对应的代码是如何进行跳转了。