第一行代码——Android(txt+pdf+epub+mobi电子书下载)

作者:郭霖

出版社:北京图灵文化发展有限公司

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

第一行代码——Android

第一行代码——Android试读:

前言

虽然我已经从事 Android 开发工作很多年了,但是却从来没有想过自己能去写一本Android 技术相关的书籍。在我看来,一本书可以算是一个很庞大的工程,写一本好书的难度并不亚于开发一款好的应用程序。

而由于我长期坚持在CSDN上发表技术博文,得到了大量网友的认可,也积累了一点名气。很荣幸的,人民邮电出版社图灵公司的副总编辑陈冰先生联系上了我,希望我可以写一本关于Android开发技术的书籍,这着实让我感到受宠若惊。

之后的一年里,我在这本书上花了很大的心思。写书和写博客最大的区别在于,书的内容不能像博客那样散乱,想到哪里写到哪里,而是一定要系统化,讲究循序渐进,基本上在写第1章的时候就应该把全书的内容都确定下来。

在开始动笔之前,我甚至怀疑过自己是否真的能够完成这本书,而如今,它已经捧在你手中了,这让我非常地激动。我真诚地希望你可以用心去阅读完这本书,每多掌握一份知识,你就会多一份喜悦。Enjoy it!

读者对象

本书的内容通俗易懂、由浅入深,既适合初学者阅读,也同样适合专业人员。学习本书内容之前你并不需要有任何的Android基础,但是你需要有一定的Java基础,因为Android开发都是使用Java语言的,而本书并不会去介绍Java方面的知识。

阅读本书时,你可以根据自身的情况来决定如何阅读。如果你是初学者的话,建议你从第1章开始循序渐进地阅读,这样理解起来就不会感到吃力。而如果你已经有了一定Android基础的话,也可以选择某部分你感兴趣的章节跳跃式地阅读,但请记得,很多章最后的最佳实践部分一定是你不想错过的。

本书内容

正如前面所说,本书的内容是非常系统化的,不仅全面介绍了那些你必须要掌握的知识,同时保证了每一章的难度都是梯度式上升的。本书一共分为 15章,下面我们就先来预览下每章中你将会学到哪些知识。

第1章是最简单的入门章节,在这里你将会对Android有一个最初步的认识。另外,你还将在这里学会如何搭建Android开发环境,从而为后面的章节做准备。

第2章会介绍Android中最重要的一个组件——活动,不管你以前有没有接触过它,相信学完本章后你都会对活动有一个全新的认识。

第3章主要是对Android UI方面的知识进行讲解,你会学到Android中一些常见控件的用法,并且将懂得如何创建自定义控件。

第4章则是对碎片进行了全面的讲解,碎片是自 Android 3.0 之后引入的全新概念,目前已广泛应用于Android手机和平板的开发当中,不看后悔哦。

第5章会介绍Android中另一个重要的组件——广播接收器,你将学会接收和发送广播的方式,并且理解Android广播的工作原理。

第6章对Android中的本地数据存储技术进行了讲解,包括文件存储、SharedPreferences存储,以及数据库存储。

第7章会介绍Android中的另一个组件——内容提供器,比起前两个组件,内容提供器的应用场景少了很多,如果你对这个技术感兴趣的话可以研究研究,不喜欢的话也可以直接跳过。

第8章会介绍Android多媒体方面的知识,包括拍照、播放音乐、视频等。除此之外,在本章中你还将学会如何使用真机来调试程序。

第9章会介绍Android中最后一个重要的组件——服务,本章之后你将对Android多线程编程,以及服务功能有一个全面的认识。

第10章中介绍了Android网络编程相关的知识,主要讲解了如何使用HTTP协议来和服务器进行通信,以及解析服务器返回的数据,这也是Android网络编程中最常用的功能了。

第11章和第12章是Android特色开发部分,主要讲解了定位服务以及传感器的用法,这部分功能都是在传统PC上无法实现的,有兴趣的话可以多了解一下。

第 13章指出了你还应该掌握的高级技巧,并进行了相应的讲解。这部分技巧在你日后的开发工作当中都有可能经常用到,希望可以引起你的重视。

第14章和第15章则将带着你一起编写一个完整的项目,并教会你如何打包、上架、嵌入广告等。通过整本书的学习,你将有能力开发出一款不错的应用程序,并能对它进行经营和盈利。

除此之外,本书的第5章、第7章、第11章、第14章中都穿插了对Git的讲解,如果想要掌握它的用法,这几章的内容是绝对不能错过的。

本书中各章的内容都相对比较独立,因此除了可以循序渐进学习之外,你也可以把它当成一本参考手册,随时查阅。郭霖2014年4月21日第1章开始启程,你的第一行Android代码

欢迎你来到Android世界!Android系统是目前世界上市场占有率最高的移动操作系统,不管你在哪里,几乎都可以看到人人手中都会有一部Android手机。虽然今天的Android世界欣欣向荣,可是你知道它的过去是什么样的吗?我们一起来看一看它的发展史吧。

2003年10月,Andy Rubin等人一起创办了Android公司。2005年8月谷歌收购了这家仅仅成立了22个月的公司,并让Andy Rubin继续负责Android项目。在经过了数年的研发之后,谷歌终于在2008年推出了Android系统的第一个版本。但自那之后,Android的发展就一直受到重重阻挠。乔布斯自始至终认为Android是一个抄袭iPhone的产品,里面剽窃了诸多iPhone的创意,并声称一定要毁掉Android。而本身就是基于Linux开发的Android操作系统,在2010年被Linux团队从Linux内核主线中除名。又由于Android中的应用程序都是使用Java开发的,甲骨文则针对Android侵犯Java知识产权一事对谷歌提起了诉讼……

可是,似乎再多的困难也阻挡不了Android快速前进的步伐。由于谷歌的开放政策,任何手机厂商和个人都能免费地获取到Android操作系统的源码,并且可以自由地使用和定制。三星、HTC、摩托罗拉、索爱等公司都推出了各自系列的 Android手机,Android市场上百花齐放。仅仅推出两年后,Android就超过了已经霸占市场逾十年的诺基亚 Symbian,成为了全球第一大智能手机操作系统,并且每天都还会有数百万台新的Android设备被激活。目前Android已经占据了全球智能手机操作系统70%以上的份额。

说了这些,想必你已经体会到Android系统炙手可热的程度,并且迫不及待地想要加入到Android开发者的行列当中了吧。试想一下,十个人中有七个人的手机都可以运行你编写的应用程序,还有什么能比这个更诱人的呢?那么从今天起,我就作为你Android旅途中的导师,一步步地引导你成为一名出色的Android开发者。

好了,现在我们就来一起初窥一下Android世界吧。

经验值:+5 目前经验值:5

级别:萌级小菜鸟

捡到宝物:Android前辈遗失的入门级通用修行卡一张。卡略有磨损,但仍可使用。1.1 了解全貌,Android王国简介

Android 从面世以来到现在已经发布了近二十个版本了。在这几年的发展过程中,谷歌为Android王国建立了一个完整的生态系统。手机厂商、开发者、用户之间相互依存,共同推进着Android的蓬勃发展。开发者在其中扮演着不可或缺的角色,因为再优秀的操作系统没有开发者来制作丰富的应用程序也是难以得到大众用户喜爱的,相信没有多少人能够忍受没有QQ、微信的手机吧?而谷歌推出的Google Play更是给开发者带来了大量的机遇,只要你能制作出优秀的产品,在 Google Play上获得了用户的认可,你就完全可以得到不错的经济回报,从而成为一名独立开发者,甚至是成功创业!

那我们现在就以一个开发者的角度,去了解一下这个操作系统吧。纯理论型的东西也比较无聊,怕你看睡着了,因此我只挑重点介绍,这些东西跟你以后的开发工作都是息息相关的。1.1.1 Android系统架构

为了让你能够更好地理解Android系统是怎么工作的,我们先来看一下它的系统架构。Android大致可以分为四层架构,五块区域。

1. Linux内核层

Android系统是基于Linux 2.6内核的,这一层为Android设备的各种硬件提供了底层的驱动,如显示驱动、音频驱动、照相机驱动、蓝牙驱动、Wi-Fi驱动、电源管理等。

2. 系统运行库层

这一层通过一些C/C++库来为Android系统提供了主要的特性支持。如SQLite库提供了数据库的支持,OpenGL|ES库提供了3D绘图的支持,Webkit库提供了浏览器内核的支持等。

同样在这一层还有Android运行时库,它主要提供了一些核心库,能够允许开发者使用Java语言来编写Android应用。另外Android运行时库中还包含了Dalvik虚拟机,它使得每一个Android应用都能运行在独立的进程当中,并且拥有一个自己的Dalvik虚拟机实例。相较于 Java 虚拟机,Dalvik 是专门为移动设备定制的,它针对手机内存、CPU性能有限等情况做了优化处理。

3. 应用框架层

这一层主要提供了构建应用程序时可能用到的各种 API,Android自带的一些核心应用就是使用这些API完成的,开发者也可以通过使用这些API来构建自己的应用程序。

4. 应用层

所有安装在手机上的应用程序都是属于这一层的,比如系统自带的联系人、短信等程序,或者是你从Google Play上下载的小游戏,当然还包括你自己开发的程序。

结合图1.1你将会理解得更加深刻,图片源自维基百科。图 1.11.1.2 Android已发布的版本

2008年 9月,谷歌正式发布了 Android 1.0系统,这也是 Android系统最早的版本。随后的几年,谷歌以惊人的速度不断地更新Android系统,2.1、2.2、2.3系统的推出使Android占据了大量的市场。2011年 2月,谷歌发布了 Android 3.0系统,这个系统版本是专门为平板电脑设计的,但也是Android为数不多比较失败的版本,推出之后一直不见什么起色,市场份额也少得可怜。不过很快,在同年的10月,谷歌又发布了Android 4.0系统,这个版本不再对手机和平板进行差异化区分,既可以应用在手机上也可以应用在平板上,除此之外还引入了不少新特性。目前最新的系统版本已经是4.4 KitKat。

下表中列出了目前市场上主要的一些Android系统版本及其详细信息。你看到这张表格时,数据很可能已经发生了变化,查看最新的数据可以访问 http://developer.android.com/about/dashboards/。

从上表中可以看出,目前4.0以上的系统已经占据了80%左右的Android市场份额,而且以后这个数字还会不断增加,因此我们本书中开发的程序也是主要面向4.0以上的系统, 2.x的系统就不再去兼容了。1.1.3 Android应用开发特色

预告一下,你马上就要开始真正的Android开发旅程了。不过先别急,在开始之前我们再来一起看一看,Android系统到底提供了哪些东西,供我们可以开发出优秀的应用程序。

1. 四大组件

Android系统四大组件分别是活动(Activity)、服务(Service)、广播接收器(Broadcast Receiver)和内容提供器(Content Provider)。其中活动是所有Android应用程序的门面,凡是在应用中你看得到的东西,都是放在活动中的。而服务就比较低调了,你无法看到它,但它会一直在后台默默地运行,即使用户退出了应用,服务仍然是可以继续运行的。广播接收器可以允许你的应用接收来自各处的广播消息,比如电话、短信等,当然你的应用同样也可以向外发出广播消息。内容提供器则为应用程序之间共享数据提供了可能,比如你想要读取系统电话簿中的联系人,就需要通过内容提供器来实现。

2. 丰富的系统控件

Android 系统为开发者提供了丰富的系统控件,使得我们可以很轻松地编写出漂亮的界面。当然如果你品味比较高,不满足于系统自带的控件效果,也完全可以定制属于自己的控件。

3. SQLite数据库

Android 系统还自带了这种轻量级、运算速度极快的嵌入式关系型数据库。它不仅支持标准的SQL语法,还可以通过Android封装好的API进行操作,让存储和读取数据变得非常方便。

4. 地理位置定位

移动设备和PC相比起来,地理位置定位功能应该可以算是很大的一个亮点。现在的Android手机都内置有GPS,走到哪儿都可以定位到自己的位置,发挥你的想象就可以做出创意十足的应用,如果再结合上功能强大的地图功能,LBS这一领域潜力无限。

5. 强大的多媒体

Android系统还提供了丰富的多媒体服务,如音乐、视频、录音、拍照、闹铃等等,这一切你都可以在程序中通过代码进行控制,让你的应用变得更加丰富多彩。

6. 传感器

Android 手机中都会内置多种传感器,如加速度传感器、方向传感器等,这也算是移动设备的一大特点。通过灵活地使用这些传感器,你可以做出很多在PC上根本无法实现的应用。

既然有Android这样出色的系统给我们提供了这么丰富的工具,你还用担心做不出优秀的应用吗?好了,纯理论的东西也就介绍到这里,我知道你已经迫不及待想要开始真正的开发之旅了,那我们就开始启程吧!1.2 手把手带你搭建开发环境

俗话说得好,工欲善其事,必先利其器,开着记事本就想去开发Android程序显然不是明智之举,选择一个好的IDE可以极大幅度地提高你的开发效率,因此本节我就将手把手带着你把开发环境搭建起来。1.2.1 准备所需要的软件

我现在对你了解还并不多,但我希望你已经是一个颇有经验的 Java 程序员,这样你理解本书的内容时将会轻而易举,因为Android程序都是使用Java语言编写的。如果你对Java只是略有了解,那阅读本书应该会有一点困难,不过一边阅读一边补充 Java 知识也是可以的。但如果你对 Java完全没有了解,那么我建议你可以暂时将本书放下,先买本介绍 Java基础知识的书学上两个星期,把Java的基本语法和特性都学会了,再来继续阅读本书。

好了,既然你已经阅读到这里,说明你已经掌握Java的基本用法了,那么开发Java程序时必备的JDK你一定已经安装好了。下面我们再来看一看开发Android程序除了JDK外,还需要哪些工具。

1. Android SDK

Android SDK是谷歌提供的 Android开发工具包,在开发 Android程序时,我们需要通过引入该工具包,来使用Android相关的API。

2. Eclipse

相信所有Java开发者都一定会对这个工具非常地熟悉,它是Java开发神器,最好用的IDE工具之一。Eclipse是开源的,这使得有很多基于Eclipse制作的优秀IDE得以问世,如MyEclipse、Aptana等。但我觉得它最吸引人的地方并不在这儿,而是它超强的插件功能。Eclipse支持极多的插件工具,使得它不仅仅可以用来开发Java,还可以很轻松地支持几乎所有主流语言的开发,当然也非常适合Android开发。

除了Eclipse外,同样适合开发Android程序的IDE还有IntelliJ IDEA、Android Studio等。其中 Android Studio是谷歌官方近期推出的新 IDE,由于是专门为开发 Android程序定制的,在Android领域大有要取代Eclipse的势头。不过本书中还是决定暂时继续使用 Eclipse,因为 Android Studio才推出不久,恐怕还不够稳定。另外你将来的同事大多数应该还是用的Eclipse,如果跟他们选择不同的IDE,在工作效率上可能要打点折扣了。

3. ADT

ADT 全称 Android Development Tools,是谷歌提供的一个 Eclipse 插件,用于在Eclipse中提供一个强大的、高度集成的 Android开发环境。安装了 ADT,你不仅可以联机调试,而且还能够模拟各种手机事件、分析你的程序性能等等。由于是 Eclipse的插件,你不需要进行下载,在Eclipse中在线安装就可以了。1.2.2 搭建开发环境

你可以将上述的软件全部都准备好,然后一个个安装完成(我当年就是这么干的),不过这已经是老方法了。谷歌现在提供了一种简便方式,在Android官网可以下载到一个绑定好的SDK工具包,你所需要用到的Android SDK、Eclipse、ADT插件全都包含在里面了,这样可以省去很多费时的安装操作。下载地址是:http://developer.android.com/sdk/。

你下载下来的将是一个压缩包,解压该压缩包之后的目录结构如图1.2所示。图 1.2

其中 SDK Manager就是我们 Android SDK的管理器,双击打开它可以看到所有可下载的Android SDK版本。由于Android版本已经非常多了,全部都下载会很耗时,并且前面我也说过,我们开发的程序主要面向Android 4.0以后的系统,因此这里我只勾选API 14以上的SDK版本,如图1.3所示。当然如果你带宽和硬盘都十分充足,也可以全部勾选。图 1.3

勾选完后点击右下角的Install 42 packages,然后会进入到一个确认安装界面,如图1.4所示。图 1.4

选中右下角的 Accept License,然后点击 Install,就进入了一个漫长的等待过程。这个时候也是你最轻松的时候了,因为你没什么事情要干,只需要等待就好。现在你可以喝杯茶,休息一会,如果你勾选的SDK比较多的话,干脆先去睡个觉吧!

经过漫长的等待之后,SDK终于是下载完成了。所有下载好的内容都放在了sdk这个目录下,除了开发工具包外,里面还包含文档、源码、示例等等。具体的东西等你用到的时候我再做介绍,目前你不用太过关心sdk这个目录下的内容,里面的东西过多,现在容易让你头晕眼花。

好了,sdk这个目录就先不管它了,是时候来看下eclipse这个目录了。其实这个目录也没什么好说的,就是进入eclipse目录,双击eclipse.exe来启动Eclipse就完了。这个Eclipse是安装好ADT插件的,因此你已经可以直接在这个Eclipse上开发Android程序了,那还不快点对着启动图标点右键,发送到桌面快捷方式!

Eclipse的界面你应该是比较熟悉了,不过安装过ADT插件的Eclipse会多出一些东西来,比如你会在Eclipse的工具栏中找到图1.5所示的几个图标。图 1.5

这几个图标你应该是没有见过的,我来简单为你介绍下。最左边的图标其实你已经比较熟悉了,就是你睡觉前使用过的 Android SDK管理器,点击它和点击 SDK Manager效果是一样的。中间的图标是用来开启Android模拟器的,如果你还没有Android手机的话,开发时就必须使用模拟器了。最右边的图标是用来进行代码检查的,你暂时还用不到它。

那我们现在就来启动一个模拟器看看效果吧,点击中间的图标会弹出如图1.6所示的窗口。图 1.6

然后点击右侧的New来创建一个新的模拟器。这里我们准备创建一个Android 4.0系统的模拟器,因此模拟器名就叫4.0好了,设备这里我选择了一个3.2英寸屏幕的手机,目标指定为Android 4.0,然后再稍微分配一下手机内存和SD卡大小,就可以点击OK了,如图1.7所示。图 1.7

创建完成后,我们选中刚刚创建的模拟器,然后点击Start,在弹出窗口中点击Launch,就可以启动模拟器了。模拟器会像手机一样,有一个开机过程,启动完成之后的界面如图1.8所示。图 1.8

很清新的Android界面出来了!看上去还挺不错吧,你几乎可以像使用手机一样使用它, Android模拟器对手机的模仿度非常高,快去体验一下吧。

模拟器的右侧是一块键盘区域,其中中间的四个按键非常重要,从左到右依次是Home键、Menu键、Back键和Search键。Home键让你在任何时候都可以回到桌面,Menu键用于在程序界面中显示菜单,Back键用于返回到上一个界面,Search键让你可以更加轻松地使用谷歌搜索功能。

目前为止,Android 开发环境就已经全部搭建完成了。那现在应该做什么?当然是写下你的第一行Android代码了,让我们快点开始吧。

经验值:+100 目前经验值:105

级别:萌级小菜鸟

赢得宝物:战胜开发环境搭建外围守卫者。拾取守卫者掉落的宝物,小屏幕二手Android手机一部、全新Android模拟器一个、九成新粗布Android战袍一套、微型信心增强大力丸一颗。穿戴好战袍,服下大力丸。继续前进。1.3 创建你的第一个Android项目

任何一个编程语言写出的第一个程序毫无疑问都会是Hello World,这已经是自20世纪70年代一直流传下来的传统,在编程界已成为永恒的经典,那我们当然也不会搞例外了。1.3.1 创建HelloWorld项目

在 Eclipse 的导航栏中点击 File→New→Android Application Project,此时会弹出创建Android项目的对话框。其中 Application Name代表应用名称,此应用安装到手机之后会在手机上显示该名称,这里我们填入Hello World。Project Name代表项目名称,在项目创建完成后该名称会显示在 Eclipse 中,这里我们填入 HelloWorld(项目名通常不加空格)。接着Package Name代表项目的包名,Android系统就是通过包名来区分不同应用程序的,因此包名一定要有唯一性,这里我们填入com.test.helloworld。

接下来是几个下拉选择框,Minimum Required SDK是指程序最低兼容的版本,这里我们选择Android 4.0。Target SDK是指你在该目标版本上已经做过了充分的测试,系统不会再帮你在这个版本上做向前兼容的操作了,这里我们选择最高版本Android 4.4。Compile With是指程序将使用哪个版本的SDK进行编译,这里我们同样选择Android 4.0。最后一个Theme是指程序UI所使用的主题,我个人比较喜欢选择None。全部都选择好的界面如图1.9所示。图 1.9

现在我们可以点击 Next了,下一个界面是创建项目的一些配置,全部保持默认配置就好,如图1.10所示。图 1.10

直接点击 Next进入到启动图标的配置界面,在这里配置的图标就会是你的应用程序安装到手机之后显示的图标,如图1.11所示。图 1.11

如果你程序的Logo还没设计好,别着急,在项目里面也是可以配置启动图标的,这里我们就先不配置,直接点击Next。

然后跳转到的是创建活动界面,在这个界面你可以选择一个你想创建的活动类型,这里我们就选择Blank Activity了,如图1.12所示。图 1.12

继续点击Next后,我们需要给刚刚选择的Blank Activity起一个名字,然后给这个活动的布局也起一个名字。Activity Name 就填入 HelloWorldActivity,Layout Name 就填入hello_world_layout吧,如图1.13所示。图 1.13

然后点击Finish,项目终于创建完成了!1.3.2 运行HelloWorld

这个时候你的Eclipse中应该会显示出刚刚创建的HelloWorld项目,由于ADT已经自动为我们生成了很多东西,你现在不需要写任何代码,HelloWorld项目就已经可以运行了。不过在运行之前,让我们先检查一下刚才的模拟器是不是还在线。

点击 Eclipse 导航栏中的 Window→Open Perspective→DDMS,这时你会进入到 DDMS的视图中去。DDMS中提供了很多我们开发Android程序时需要用到的工具,不过目前你只需要关注Devices窗口中有没有Online的设备就行了。如果你的Devices窗口中有一个设备显示是Online的,那就说明目前一切正常,你的模拟器是在线的。如果Devices窗口中没有设备,可能是你已经把模拟器关掉了,没关系,按照前面的步骤重新打开一次就行了。如果你的Devices窗口中虽然有设备,但是显示Offline,说明你的模拟器掉线了,这种情况概率不高,但是如果出现了,你只需要点击Reset adb就好了,如图1.14所示。图 1.14

好了,确认完模拟器在线后,点击Eclipse工具栏右侧的Java选项,回到之前的视图,然后我们来运行一下项目吧。右击HelloWorld项目→Run As→Android Application。等待大约几秒钟的时间,你的项目就会运行起来了。现在快去看看你的模拟器吧,结果应该和图1.15中显示的是一样的。图 1.15

HelloWorld 项目运行成功!并且你会发现,你的模拟器上已经安装上 Hello World 这个应用了。打开启动器列表,如图1.16所示。图 1.16

这个时候你可能会说我坑你了,说好的第一行代码呢?怎么一行还没写,项目就已经运行起来了?这个只能说是因为 ADT太智能了,已经帮我们把一些简单内容都自动生成了。你也别心急,后面写代码的机会多着呢,我们先来分析一下HelloWorld这个项目吧。1.3.3 分析你的第一个Android程序

还是回到Eclipse中,首先展开HelloWorld项目,你会看到如图1.17所示的目录结构。图 1.17

一开始看到这么多陌生的东西,你一定会感到有点头晕吧。别担心,我现在就对上图中的内容一一讲解,你很快再看这张图就不会感到那么吃力了。

1. src

毫无疑问,src目录是放置我们所有Java代码的地方,它在这里的含义和普通Java项目下的src目录是完全一样的,展开之后你将看到我们刚才创建的HelloWorldActivity文件就在里面。

2. gen

这个目录里的内容都是自动生成的,主要有一个R.java文件,你在项目中添加的任何资源都会在其中生成一个相应的资源id。这个文件永远不要手动去修改它。

3. assets

这个目录用得不多,主要可以存放一些随程序打包的文件,在你的程序运行时可以动态读取到这些文件的内容。另外,如果你的程序中使用到了 WebView加载本地网页的功能,所有网页相关的文件也都存放在这个目录下。

4. bin

这个目录你也不需要过多关注,它主要包含了一些在编译时自动产生的文件。其中会有一个你当前项目编译好的安装包,展开 bin目录你会看到 HelloWorld.apk,把这个文件拷到手机上就可以直接安装了。

5. libs

如果你的项目中使用到了第三方Jar包,就需要把这些Jar包都放在libs目录下,放在这个目录下的Jar包都会被自动添加到构建路径里去。你可以展开上图中Android 4.0、Android Private Libraries、Android Dependencies这些库,其中显示的Jar包都是已经被添加到构建路径里的。

6. res

这个目录下的内容就有点多了,简单点说,就是你在项目中使用到的所有图片、布局、字符串等资源都要存放在这个目录下,前面提到的R.java中的内容也是根据这个目录下的文件自动生成的。当然这个目录下还有很多的子目录,图片放在drawable目录下,布局放在layout目录下,字符串放在values目录下,所以你不用担心会把整个res目录弄得乱糟糟的。

7. AndroidManifest.xml

这是你整个Android项目的配置文件,你在程序中定义的所有四大组件都需要在这个文件里注册。另外还可以在这个文件中给应用程序添加权限声明,也可以重新指定你创建项目时指定的程序最低兼容版本和目标版本。由于这个文件以后会经常用到,我们用到的时候再做详细说明。

8. project.properties

这个文件非常地简单,就是通过一行代码指定了编译程序时所使用的 SDK版本。我们的HelloWorld项目使用的是API 14,你也可以在这里改成其他版本试一试。

这样整个项目的目录结构就都介绍完了,如果你还不能完全理解的话也很正常,毕竟里面有太多的东西你都还没接触过。不用担心,这并不会影响到你后面的学习。相反,等你学完整本书后再回来看这个目录结构图时,你会觉得特别地清晰和简单。

接下来我们一起分析一下 HelloWorld 项目究竟是怎么运行起来的吧。首先打开AndroidManifest.xml文件,从中可以找到如下代码:

这段代码表示对HelloWorldActivity这个活动进行注册,没有在AndroidManifest.xml里注册的活动是不能使用的。其中 intent-filter 里的两行代码非常重要,表示 HelloWorldActivity是这个项目的主活动,在手机上点击应用图标,首先启动的就是这个活动。

那 HelloWorldActivity具体又有什么作用呢?我在介绍 Android四大组件的时候说过,活动是Android应用程序的门面,凡是在应用中你看得到的东西,都是放在活动中的。因此你在图1.15中看到的界面,其实就是HelloWorldActivity这个活动。那我们快去看一下它的代码吧,打开HelloWorldActivity,代码如下所示:

public class HelloWorldActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.hello_world_layout);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is

present.getMenuInflater().inflate(R.menu.hello_world, menu);return true;}

}

首先我们可以看到,HelloWorldActivity是继承自Activity的。Activity是Android系统提供的一个活动基类,我们项目中所有的活动都必须要继承它才能拥有活动的特性。然后可以看到HelloWorldActivity中有两个方法,onCreateOptionsMenu()这个方法是用于创建菜单的,我们可以先无视它,主要看下onCreate()方法。onCreate()方法是一个活动被创建时必定要执行的方法,其中只有两行代码,并且没有Hello world!的字样。那么图1.15中显示的Hello world!是在哪里定义的呢?

其实Android程序的设计讲究逻辑和视图分离,因此是不推荐在活动中直接编写界面的,更加通用的一种做法是,在布局文件中编写界面,然后在活动中引入进来。你可以看到,在onCreate()方法的第二行调用了 setContentView()方法,就是这个方法给当前的活动引入了一个hello_world_layout布局,那Hello world!一定就是在这里定义的了!我们快打开这个文件看一看。

布局文件都是定义在 res/layout 目录下的,当你展开 layout 目录,你会看到hello_world_layout.xml这个文件。打开之后代码如下所示:

现在还看不懂?没关系,后面我会对布局进行详细讲解的,你现在只需要看到上面代码中有一个TextView,这是Android系统提供的一个控件,用于在布局中显示文字的。然后你终于在TextView中看到了hello world的字样,哈哈终于找到了,原来就是通过android:text="@string/hello_world"这句代码定义的!咦?感觉不对劲啊,好像图 1.15 中显示的是 Hello world!,这感叹号怎么没了,大小写也不太一样。

其实你还是被欺骗了,真正的Hello world!字符串也不是在布局文件中定义的。Android不推荐在程序中对字符串进行硬编码,更好的做法一般是把字符串定义在res/values/strings.xml里,然后可以在布局文件或代码中引用。那我们现在打开strings.xml看一下,里面的内容如下:

Hello WorldSettingsHello world!

这下没有什么再能逃出你的法眼了,Hello world!字符串就是定义在这个文件里的。并且字符串的定义都是使用键值对的形式,Hello world!值对应了一个叫做hello_world的键,因此在hello_world_layout.xml布局文件中就是通过引用了hello_world这个键,才找到了相应的值。

这个时候我无意中瞄到了这个文件中还有一个叫做app_name的键。你猜对了,我们还可以在这里通过修改app_name对应的值,来改变此应用程序的名称。那到底是哪里引用了app_name这个键呢?打开AndroidManifest.xml文件自己找找去吧!1.3.4 详解项目中的资源

如果你展开res目录看一下,其实里面的东西还是挺多的,很容易让人看得眼花缭乱,如图1.18所示。图 1.18

看到这么多的文件夹不用害怕,其实归纳一下,res 目录就变得非常简单了。所有以drawable开头的文件夹都是用来放图片的,所有以values开头的文件夹都是用来放字符串的, layout文件夹是用来放布局文件的,menu文件夹是用来放菜单文件的。怎么样,是不是突然感觉清晰了很多?之所以有这么多drawable开头的文件夹,其实主要是为了让程序能够兼容更多的设备。在制作程序的时候最好能够给同一张图片提供几个不同分辨率的副本,分别放在这些文件夹下,然后当程序运行的时候会自动根据当前运行设备分辨率的高低选择加载哪个文件夹下的图片。当然这只是理想情况,更多的时候美工只会提供给我们一份图片,这时你就把所有图片都放在drawable-hdpi文件夹下就好了。

知道了res目录下每个文件夹的含义,我们再来看一下如何去使用这些资源吧。比如刚刚在strings.xml中找到的Hello world!字符串,我们有两种方式可以引用它:

1. 在代码中通过R.string.hello_world可以获得该字符串的引用;

2. 在XML中通过@string/hello_world可以获得该字符串的引用。

基本的语法就是上面两种方式,其中string部分是可以替换的,如果是引用的图片资源就可以替换成drawable,如果是引用的布局文件就可以替换成layout,以此类推。这里就不再给出具体的例子了,因为后面你会在项目中大量地使用到各种资源,到时候例子多得是呢。另外跟你小透漏一下, HelloWorld 项目的图标就是在 AndroidManifest.xml 中通过android:icon="@drawable/ic_launcher"来指定的,ic_launcher这张图片就在drawable文件夹下,如果想要修改项目的图标应该知道怎么办了吧?

经验值:+200 目前经验值:305

级别:萌级小菜鸟

赢得宝物:战胜资深HelloWorld程序撰写者(外围守卫者)。拾取守卫者掉落的宝物,大容量移动电源一个、修罗界移动开发者大会纪念品双肩包一个(印有“Android 开发小能手”字样)、八成新棉麻混纺 Android 战袍一套、微型信心增强大力丸 3 颗。换上新战袍,服下3颗大力丸,将其余物资放入双肩包。旁边有一只神秘的松鼠在对我点头。微微向它颔首致意。继续前进。1.4 前行必备,掌握日志工具的使用

通过上一节的学习,你已经成功创建了你的第一个Android程序,并且对Android项目的目录结构和运行流程都有了一定的了解。现在本应该是你继续前行的时候,不过我想在这里给你穿插一点内容,讲解一下Android中日志工具的使用方法,这对你以后的Android开发之旅会有极大的帮助。1.4.1 添加LogCat到你的Eclipse

日志在任何项目的开发过程中都会起到非常重要的作用,在Android项目中如果你想要查看日志则必须要使用 LogCat 工具。当你第一次在 Eclipse中运行 Android 项目的时候, Eclipse会提醒你一次是否要添加LogCat这个工具。如果你现在还没有添加上的话,我这里教你一下如何手动添加LogCat到你的Eclipse中。

点击Eclipse导航栏中的Window→Show View→Other,会弹出一个Show View对话框。你在Show View对话框中展开Android目录,会看到有一个LogCat的子项,如图1.19所示。图 1.19

然后选中LogCat,点击OK,这样你就成功将LogCat添加到Eclipse中了。1.4.2 使用Android的日志工具Log

既然LogCat已经添加完成,我们来学习一下如何使用Android的日志工具吧。Android中的日志工具类是Log(android.util.Log),这个类中提供了如下几个方法来供我们打印日志。

1. Log.v()

这个方法用于打印那些最为琐碎的,意义最小的日志信息。对应级别 verbose,是Android日志里面级别最低的一种。

2. Log.d()

这个方法用于打印一些调试信息,这些信息对你调试程序和分析问题应该是有帮助的。对应级别debug,比verbose高一级。

3. Log.i()

这个方法用于打印一些比较重要的数据,这些数据应该是你非常想看到的,可以帮你分析用户行为的那种。对应级别info,比debug高一级。

4. Log.w()

这个方法用于打印一些警告信息,提示程序在这个地方可能会有潜在的风险,最好去修复一下这些出现警告的地方。对应级别warn,比info高一级。

5. Log.e()

这个方法用于打印程序中的错误信息,比如程序进入到了catch语句当中。当有错误信息打印出来的时候,一般都代表你的程序出现严重问题了,必须尽快修复。对应级别error,比warn高一级。

其实很简单,一共就五个方法,当然每个方法还会有不同的重载,但那对你来说肯定不是什么难理解的地方了。我们现在就在HelloWorld项目中试一试日志工具好不好用吧。

打开HelloWorldActivity,在onCreate()方法中添加一行打印日志的语句,如下所示:

protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.hello_world_layout);Log.d("HelloWorldActivity", "onCreate execute");

}

Log.d方法中传入了两个参数,第一个参数是tag,一般传入当前的类名就好,主要用于对打印信息进行过滤。第二个参数是msg,即想要打印的具体的内容。

现在可以重新运行一下 HelloWorld这个项目了,仍然是右击 HelloWorld项目→Run As→Android Application。等程序运行完毕,可以看到LogCat中打印信息如图1.20所示。图 1.20

其中你不仅可以看到打印日志的内容和Tag名,就连程序的包名、打印的时间以及应用程序的进程号都可以看到。如果你的 LogCat中并没有打印出任何信息,有可能是因为你当前的设备失去焦点了。这时你只需要进入到DDMS视图,在Devices窗口中点击一下你当前的设备,打印信息就会出来了。

另外不知道你有没有注意到,你的第一行代码已经在不知不觉中写出来了,我也总算是交差了。1.4.3 为什么使用Log而不使用System.out

我相信很多的Java新手都非常喜欢使用System.out.println()方法来打印日志,不知道你是不是也喜欢这么做。不过在真正的项目开发中,是极度不建议使用 System.out.println()方法的!如果你在公司的项目中经常使用这个方法,就很有可能要挨骂了。

为什么 System.out.println()方法会这么遭大家唾弃呢?经过我仔细分析之后,发现这个方法除了使用方便一点之外,其他就一无是处了。方便在哪儿呢?在 Eclipse中你只需要输入 syso,然后按下代码提示键,这个方法就会自动出来了,相信这也是很多 Java新手对它钟情的原因。那缺点又在哪儿了呢?这个就太多了,比如日志打印不可控制、打印时间无法确定、不能添加过滤器、日志没有级别区分……

听我说了这些,你可能已经不太想用 System.out.println()方法了,那么 Log就把上面所说的缺点全部都做好了吗?虽然谈不上全部,但我觉得Log已经做得相当不错了。我现在就来带你看看Log和LogCat配合的强大之处。

首先在LogCat中是可以很轻松地添加过滤器的,你可以在图1.21中看到我们目前所有的过滤器。图 1.21

目前只有两个过滤器,All messages过滤器也就相当于没有过滤器,会把所有的日志都显示出来。com.test.helloworld过滤器是我们运行 HelloWorld项目时自动创建的,点击这个过滤器就可以只看到 HelloWorld 程序中打印的日志。那可不可以自定义过滤器呢?当前可以,我们现在就来添加一个过滤器试试。

点击图1.21中的加号,会弹出一个过滤器配置界面。我们给过滤器起名叫data,并且让它对名为data的Tag进行过滤,如图1.22所示。图 1.22

点击OK,你就会发现你已经多出了一个data过滤器,当你点击这个过滤器的时候,你会发现刚才在onCreate()方法里打印的日志没了,这是因为data这个过滤器只会显示Tag名称为 data 的日志。你可以尝试在 onCreate()方法中把打印日志的语句改成 Log.d("data","onCreate execute"),然后再次运行程序,你就会在data过滤器下看到这行日志了。

不知道你有没有体会到使用过滤器的好处,可能现在还没有吧。不过当你的程序打印出成百上千行日志的时候,你就会迫切地需要过滤器了。

看完了过滤器,再来看一下LogCat中的日志级别控制吧。LogCat中主要有5个级别,分别对应着我在上一节介绍的5个方法,如图1.23所示。图 1.23

当前我们选中的级别是 verbose,也就是最低等级。这意味着不管我们使用哪一个方法打印日志,这条日志都一定会显示出来。而如果我们将级别选中为debug,这时只有我们使用debug及以上级别方法打印的日志才会显示出来,以此类推。你可以做下试验,如果你把LogCat中的级别选中为info、warn或者error时,我们在onCreate()方法中打印的语句是不会显示的,因为我们打印日志时使用的是Log.d()方法。

日志级别控制的好处就是,你可以很快地找到你所关心的那些日志。相信如果让你从上千行日志中查找一条崩溃信息,你一定会抓狂的吧。而现在你只需要将日志级别选中为error,那些不相干的琐碎信息就不会再干扰你的视线了。

关于Android中日志工具的使用我就准备讲到这里,LogCat中其他的一些使用技巧就要靠你自己去摸索了。今天你已经学到了足够多的东西,我们来总结和梳理一下吧。1.5 小结与点评

你现在一定会觉得很充实,甚至有点沾沾自喜。确实应该如此,因为你已经成为一名真正的Android开发者了。通过本章的学习,你首先对Android系统有了更加充足的认识,然后成功将 Android 开发环境搭建了起来,接着创建了你自己的第一个 Android 项目,并对Android项目的目录结构和运行流程有了一定的认识,在本章的最后

试读结束[说明:试读内容隐藏了图片]

下载完整电子书

若在网站上没有找合适的书籍,可联系网站客服获取,各类电子版图书资料皆有。

客服微信:xzh432

登入/注册
卧槽~你还有脸回来
没有账号? 忘记密码?