1.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 上下载的小游戏,当然还包括你自己开发的程序。
2.Android主要版本信息
3.Android应用开发特色
1. 四大组件
Android系统四大组件分别是活动(Activity)、服务(Service)、广播接收器(BroadcastReceiver)和内容提供器(ContentProvider)。其中活动是所有 Android 应用程序的门面,凡是在应用中你看得到的东西,都是放在活动中的。而服务就比较低调了,你无法看到它,但它会一直在后台默默地运行,即使用户退出了应用,服务仍然是可以继续运行的。广播接收器可以允许你的应用接收来自各处的广播消息,比如电话、短信等,当然你的应用同样也可以向外发出广播消息。内容提供器则为应用程序之间共享数据提供了可能,比如你想要读取系统电话簿中的联系人,就需要通过内容提供器来实现。
2. 丰富的系统控件
Android 系统为开发者提供了丰富的系统控件,使得我们可以很轻松地编写出漂亮的界面。当然如果你品味比较高,不满足于系统自带的控件效果,也完全可以定制属于自己的控件。
3. SQLite 数据库
Android 系统还自带了这种轻量级、运算速度极快的嵌入式关系型数据库。它不仅支持标准的 SQL 语法,还可以通过 Android 封装好的 API 进行操作,让存储和读取数据变得非常方便。
4. 地理位置定位
移动设备和 PC 相比起来,地理位置定位功能应该可以算是很大的一个亮点。现在的 Android 手机都内置有 GPS,走到哪儿都可以定位到自己的位置,发挥你的想象就可以做出创意十足的应用,如果再结合上功能强大的地图功能,LBS 这一领域潜力无限。
5. 强大的多媒体
Android 系统还提供了丰富的多媒体服务,如音乐、视频、录音、拍照、闹铃等等,这一切你都可以在程序中通过代码进行控制,让你的应用变得更加丰富多彩。
6. 传感器
Android 手机中都会内置多种传感器,如加速度传感器、方向传感器等,这也算是移动设备的一大特点。通过灵活地使用这些传感器,你可以做出很多在 PC 上根本无法实现的应用。
Android系统四大组件分别是活动(Activity)、服务(Service)、广播接收器(BroadcastReceiver)和内容提供器(ContentProvider)。其中活动是所有 Android 应用程序的门面,凡是在应用中你看得到的东西,都是放在活动中的。而服务就比较低调了,你无法看到它,但它会一直在后台默默地运行,即使用户退出了应用,服务仍然是可以继续运行的。广播接收器可以允许你的应用接收来自各处的广播消息,比如电话、短信等,当然你的应用同样也可以向外发出广播消息。内容提供器则为应用程序之间共享数据提供了可能,比如你想要读取系统电话簿中的联系人,就需要通过内容提供器来实现。
2. 丰富的系统控件
Android 系统为开发者提供了丰富的系统控件,使得我们可以很轻松地编写出漂亮的界面。当然如果你品味比较高,不满足于系统自带的控件效果,也完全可以定制属于自己的控件。
3. SQLite 数据库
Android 系统还自带了这种轻量级、运算速度极快的嵌入式关系型数据库。它不仅支持标准的 SQL 语法,还可以通过 Android 封装好的 API 进行操作,让存储和读取数据变得非常方便。
4. 地理位置定位
移动设备和 PC 相比起来,地理位置定位功能应该可以算是很大的一个亮点。现在的 Android 手机都内置有 GPS,走到哪儿都可以定位到自己的位置,发挥你的想象就可以做出创意十足的应用,如果再结合上功能强大的地图功能,LBS 这一领域潜力无限。
5. 强大的多媒体
Android 系统还提供了丰富的多媒体服务,如音乐、视频、录音、拍照、闹铃等等,这一切你都可以在程序中通过代码进行控制,让你的应用变得更加丰富多彩。
6. 传感器
Android 手机中都会内置多种传感器,如加速度传感器、方向传感器等,这也算是移动设备的一大特点。通过灵活地使用这些传感器,你可以做出很多在 PC 上根本无法实现的应用。
4.Android开发工具
Android SDK + Eclipse + ADT(Android Development Tools)
开发环境搭建:谷歌现在提供了一种简便方式,在 Android 官网可以下载到一个绑定好的 SDK 工具包,你所需要用到的 Android SDK、Eclipse、ADT 插件全都包含在里面了,这样可以省去很多费时的安装操作。下载地址是:http://developer.android.com/sdk/
下载包加压缩后
其中 SDK Manager 就是我们 Android SDK 的管理器,双击打开它可以看到所有可下载的 Android SDK 版本。
安装完成以后会eclipse会出现以下图标:分布为SDK Manager、Android模拟器、代码检查工具。
下图就为模拟器的效果(开发的时候必须使用安卓手机或者模拟器来看效果)
然后点击右侧的 New 来创建一个新的模拟器。这里我们准备创建一个 Android 4.0 系统的模拟器,因此模拟器名就叫 4.0 好了,设备这里我选择了一个 3.2 英寸屏幕的手机,目标指定为 Android 4.0,然后再稍微分配一下手机内存和 SD 卡大小,就可以点击 OK 了
创建完成后,我们选中刚刚创建的模拟器,然后点击 Start,在弹出窗口中点击 Launch,就可以启动模拟器了。
5.创建一个简单的HelloWord
(1)在 Eclipse 的导航栏中点击 File→New→Android Application Project,此时会弹出创建Android 项目的对话框。
(2)现在我们可以点击 Next 了,下一个界面是创建项目的一些配置,全部保持默认配置就好。
如果你程序的 Logo 还没设计好,别着急,在项目里面也是可以配置启动图标的,这里我们就先不配置,直接点击 Next。
(3)然后跳转到的是创建活动界面,在这个界面你可以选择一个你想创建的活动类型,这里我们就选择 Blank Activity 了。
(4)继续点击 Next 后,我们需要给刚刚选择的 BlankActivity 起一个名字,然后给这个活动的布局也起一个名字。Activity Name 就填入 HelloWorldActivity,Layout Name 就填入hello_world_layout吧。
然后点击 Finish,项目终于创建完成了!
(5)接下来就要运行我们的He'llWorld了
点击 Eclipse 导航栏中的 Window→Open Perspective→DDMS,这时你会进入到 DDMS的视图中去。DDMS 中提供了很多我们开发 Android 程序时需要用到的工具,不过目前你只需要关注 Devices 窗口中有没有 Online 的设备就行了。
右击 HelloWorld 项目→Run As→Android Application,等待一小会我们就可以看见我们HelloWorld了!
6.分析HelloWorld程序
项目结构
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,你也可以在这里改成其他版本试一试。
毫无疑问,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,你也可以在这里改成其他版本试一试。
如果你展开 res 目录看一下,其实里面的东西还是挺多的,很容易让人看得眼花缭乱。
看到这么多的文件夹不用害怕,其实归纳一下,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文件夹下,如果想要修改项目的图标应该知道怎么办了吧?
1. 在代码中通过 R.string.hello_world 可以获得该字符串的引用;
2. 在 XML 中通过@string/hello_world 可以获得该字符串的引用。
基本的语法就是上面两种方式,其中string部分是可以替换的,如果是引用的图片资源就可以替换成 drawable,如果是引用的布局文件就可以替换成layout,以此类推。这里就不再给出具体的例子了,因为后面你会在项目中大量地使用到各种资源,到时候例子多得是呢。另 外 跟 你 小 透 漏 一 下 , HelloWorld 项 目 的 图 标 就 是 在 AndroidManifest.xml 中 通 过android:icon="@drawable/ic_launcher"来指定的,ic_launcher这张图片就在drawable文件夹下,如果想要修改项目的图标应该知道怎么办了吧?