10天学安卓-第五天
经过前几天的练习,相信大家已经对如何做出一个简单的界面有了初步的了解,并且已经做出来一个还不错的天气列表了。
今天大家稍事休息,要练习的内容比较少,着重学习一些理论知识,先理清几个概念。
Android系统架构
Android系统本质上是Linux系统,但相对于Linux系统,主要在驱动、性能、内存管理、设备管理等一些部分做了比较多的改动,以更适用于移动设备。
从上图可以看到,Android系统架构为四层,分别是Linux内核、系统运行库、应用程序框架以及应用层,每一层的作用分别为:
Linux内核
提供了作为一个操作系统所应有的基础功能,包括各种硬件驱动、内存管理、电源管理等,该层作为硬件和软件之间的抽象层而存在。
系统运行库
系统运行库分为两部分,系统库和Android运行时,系统库提供了底层的Sqlite、SSL、OpenGL、Surface Manager等类库,从数据库到网络再到界面绘制,都在这一层进行。
Android运行时,这一部分在Android4.4以前是Dalvik,也就是Google实现的Java虚拟机,所有的Android APP都运行在虚拟机里面,每个Dalvik虚拟机都是一个独立进程。简单的说就是每个Android APP编译之后会打包为APK文件,APK文件内部包含资源文件、代码文件(Dex)、AndroidManifest.xml以及别的配置文件,而Dalvik虚拟机则执行的是Dex文件。
Android4.4以后,启用了Dalvik虚拟机,而改用Android Runtime,根据Google的说明,新的Android Runtime会有更好的效率,执行速度更快、耗电更少、占用内存更低。
应用程序框架
这一层就是我们代码可以直接调用的了,通常所说的Android API都会在这一层提供,主要包括Activity Manager、Window Manager、Content Provider等,等我们对系统有了更多的学习之后,会慢慢用到其中的一部分内容。
应用层
这一层就是我们平时可以操作的APP了。Android本身既是个操作系统,又提供了基础的APP,如SMS、Phone、Browser等,当然了,更多的APP是需要我们程序员来实现的。
了解了Android系统的基础架构后,再结合我们正在开发的天气预报APP来具体的学习一下Android APP项目的一个核心的文件——AndroidManifest.xml。
AndroidManifest
每一个Android项目都包含一个清单(Manifest)文件--AndroidManifest.xml,它存储在项目层次中的最底层,它是Android程序的全局配置文件,可以定义应用程序及其组件的结构和元数据。它包含了组成应用程序的每一个组件(活动、服务、内容提供器和广播接收器)的节点,并使用Intent过滤器和权限来确定这些组件之间以及这些组件和其他应用程序是如何交互的。它还提供了各种属性来详细地说明应用程序的元数据(如它的图标或者主题)的以及额外的可用来进行安全设置和单元测试顶级节点,我们先来看一下天气预报APP的这个文件:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.demo.weather" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="19" /> <uses-permission android:name="android.permission.INTERNET" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.demo.weather.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
我们逐次说明一下,
根节点
根节点定义了包名、版本号,其中package一定是唯一的,android:versionCode是供程序内部使用的版本号,android:versionName则会显示给用户。
uses-sdk
这个节点指定Android应用中所需要使用的SDK的版本,android:minSdkVersion指定可运行的最低版本,android:maxSdkVersion指定可运行的最高版本,android:targetSdkVersion这个指定了目标版本。
指定的版本均为数字,大家可以对照下表参考:
Android版本 | API Level |
5.0 | 21 |
4.4w | 20 |
4.4 | 19 |
4.3 | 18 |
4.2.2 | 17 |
4.1.2 | 16 |
4.0.3 | 15 |
4.0 | 14 |
3.2 | 13 |
3.1 | 12 |
3.0 | 11 |
2.3.3 | 10 |
2.2 | 8 |
2.1 | 7 |
1.6 | 4 |
1.5 | 3 |
关于android:targetSdkVersion这个目标版本很多初学者会疑惑,不明白到底有什么用。我个人的理解是比如你的APP指定了最低版本为8,目标版本为19,你开发过程中做出来的程序在Android4.4的设备上是没有任何问题的,其他的版本Android系统就会进行相应的兼容适配。比如有些API在低版本是不提供的,就需要我们在程序中进行版本判断,进行不同的代码处理。注意,这个时候你指定了最低版本是8,你最低可以使用8的API,在程序编译的时候,你用到了19的API是不会出现编译错误的。
android:maxSdkVersion这个配置一般是不需要设置的,因为系统本身是向下兼容的。
uses-permission
这个节点指定了APP拥有的权限。Android系统对于权限管理是比较严格的,一个APP必须先声明权限才能使用相应的功能。例如需要访问网络,则需要在这里声明一个android.permission.INTERNET权限,相应的如GPS、Camera、VIBRATE等都需要先声明权限才可以使用。
application
这个节点指定了APP的组件、属性,如icon、label、name、theme等。
activity
这个节点是application的子节点,定义了整个APP的所有页面。
其它
除了以上我们用到的几个外,还有receiver、provider、service等,这些我们在以后慢慢熟悉。
一点点实践
了解了Android本身的架构后,我们稍微修改一下manifest文件。
应用图标
把上面的图标放到res\drawable-hdpi文件夹下,然后修改application节点下的android:icon="@drawable/ic_launcher" 为 android:icon="@drawable/icon"
应用名称
打开res\values\strings.xml文件,修改<string name="app_name">Weather</string>为<string name="app_name">天气预报</string>
打完收工,运行程序。
可以发现应用左上角的图标和名称都变成了我们想要的。
今天的内容比较少,主要是一些基础理论知识,也希望大家多多查阅资料,对Android本身的结构有更多更深入的了解。
附件是本次的工程文件,点击下载。
此系列文章系本人原创,如需转载,请注明出处 www.liuzhibang.cn