
下面来说说为什么想写一个关于Android开发的系列博文。目前是做PC端软件的开发,主要做的是使用C++编写图像处理与显示的逻辑,软件的前端界面采用的是WPF。去年下半年,公司鼓励前端(WPF)转后端(C++)和后端转前端,作为一个有上进心的程序员,当然要响应领导的号召了^_^。之后就开始WPF学习之旅了,学了一段时间之后,算是有些入门,至少能用WPF做一些简单的功能了。也是在那个时候开始博主开始接触Android,毕竟还是希望在工作之余能够提升一下自己,于是就看了一些博文和相关的书籍。断断续续学了半年,虽然感觉在某些方面与WPF很像,但对Android的理解还是不深刻。于是博主开始思考,怎样才能更好地理解掌握Android呢?对于一个计算机(或工科)专业出身的人来说,所能想到的最好的学习方法便是实践——选择一个不是太复杂的项目,把它一步步做出来,一点点完善它。基于此,决定写一个系列博客,记录自己的学习之路和项目开发之路。微信应用是我们日常使用最频繁的APK了,简易版的微信实现起来应该不会太复杂,所以就准备开发一个简易版的微信作为自己Android项目的实践之旅。
2 一个程序员眼中的Android
关于Android的介绍、发展历程、目前使用情况以及未来趋势,在这里就不做赘述了,这些对广大程序员朋友来说肯定都有所了解。本节主要是讲讲自己以从程序员的角度对Android的一点浅薄的理解,当然,一千个读者心里有一千个哈姆雷特,每个人对Android的理解都会不一样,这里介绍的仅是本人的个人见解。
Android是一个基于Linux内核改造而来的、面向手机端(当然现在Android已经是发展到各个硬件平台上了,包括Android TV、Android Wear等等)的操作系统。Android系统本质上和普通的Linux桌面PC发行版没什么区别,Android可以视为手机端Linux的发行版,只不过Google做了完善的封装,以至于我们几乎感觉不到Linux的存在。这里所讲的封装有两层含义:
(1)对普通用户而言,Android变得更亲民,更大众化,不像Linux那么高冷,需要良好的计算机底子的童鞋才能较好地使用;
(2)对应用开发者而言,不需要接触底层的C代码和系统库函数了,我们面对的是一些用Java写的类库,其中包括著名的Android四大组件(后续我们详细阐述)、一套较完备的UI控件和一些辅助的工具类库。
Android操作系统是分层实现的,其层次结构图如下图所示:

这幅框架结构图,对于一个久经沙场的老兵来说,理解起来也许并不是太困难;但对于一个初入职场不久的小白来说,可能一下子还看的不是很明白。不过没关系,对于像我们这样的小菜来说,完全没必要把所有层次、所有组件都弄清楚:比如Linux Kernel(内核)你有必要一开始就去学习吗?—— 一开始去就去看这些不就是在自讨苦吃么^_^!?在内核层之上那一层,什么SQLite、OpenGL|ES、SGL、libc、WebKit等等都是一些著名的开源项目,大多是用C语言写的,对开发上层应用的我们来说,也压根没必要一开始就去学习。最后看最上面一层——Application层,Home、Contacts、Phone……这些其实是系统内置的一些应用,和我们开发的应用没什么区别,所以也没必要花太多时间去了解。对开发应用的我们而言,学好下面两层就好了:
第一层:Application Framework层,也就是应用框架层。我们编写应用时所用的大部分组件都来自这里,最主要的包括:
View System,即视图系统,定义了一套UI库,包括布局类和控件类,用它们就可以定义应用程序的界面了,这个库很庞大,也是我们学习Android开发的一个难点;
Activity Manager,即活动管理器,活动(Activity)是Android四大组件之一,它管理着和用户界面显示有关的逻辑和生命周期回调;
Content Provider,即内容提供者,同样是Android的四大组件之一。数据是应用程序的核心,使用内容提供者就可以实现跨进程/应用的数据共享了。
Notification Manager,通知管理器,用于手机顶部状态栏显示系统通知,它也是Android的四大组件之一。
Resource Manager,资源管理器,顾名思义,即管理应用程序资源的,如图标、背景图片、常量字符串。
图中还有一些其他组件,如Package Manager(包管理器)、Location Manager(位置管理器)等,这里就不具体介绍了,初学时接触的不多。
第二层:Android Runtime层,也就是安卓运行时层,其实就是一个Java虚拟机——Dalvik虚拟机和一个核心类库。这部分和普通的Java虚拟机在使用方面都是一样的,所以这一层虽然在开发中会接触到,但只要学过Java的,应该都懂。
所以,到此为止,我们应该清楚了学习Android开发要学一些什么了,其实就是在学习Application Framework层,其他的看看就好,如果想进一步深入的话,等到把基础的学扎实了再说吧!
3 Android项目的目录结构
Android开发使用的IDE,主要有Eclipse + Android SDK(Software Develement Kit,软件开发工具包)、Visual Studio + Xamarin(用C#语言开发Android程序)和Android Studio三种可供选择,博主采用的是Android Studio 2.0,下载解压无需安装,直接就可以使用。关于Android Studio的JDK的配置,请度娘参考相关博客,在此就不做赘述了。

有了IDE,我们就可以很方便地创建一个Android工程了(关于工程创建,直接点击下一步下一步即可,在此不再赘述)。下面就让我们在写代码前来认识一下一个新建的Android工程的目录结构,如下图:

目录结构一目了然,我们分别学习一下各级目录结构及其作用。
3.1 清单文件
清单文件即AndroidManifest.xml文件,此文件是Android工程中非常重要的配置文件,用XML来书写。学习过Java Web的童鞋一定知道,在SSH框架中就有许许多多的XML配置文件。Android中的配置文件和SSH框架中的配置文件功能上有些类似,即为框架运行提供必要的数据,新创建工程的AndroidManifest.xml的代码如下:
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.doll.firstapplicationdemo" > <applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:supportsRtl="true"android:theme="@style/AppTheme" ><activity android:name=".MainActivity" > <intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /> </intent-filter></activity> </application></manifest>简单解释一下:首先manifest根节点,定义了命名空间和包名;接下来是application结点,代表一个应用程序,其中配置应用程序的标签、名称、主题等等;在application结点里面定义了主Activity(有点类似于Web开发中的首页),属性中定义了类名以及意图过滤器(这里就不详细展开了,在后面详细讲解activity时会介绍)。这样,运行程序时,Android框架就可以帮我们建立必要的对象实例,让我们的应用程序运行起来了。其实,博主觉得这个配置文件和Spring框架中的ApplicationContext.xml配置文件的功能很类似。当然,这个配置文件不是一成不变的,和SSH框架的配置文件一样,随着项目的不断完善,我们会向其中写入各种配置信息。

