通过前几天的练习,相信你们已经对如何作出一个简单的界面有了初步的了解,而且已经作出来一个还不错的天气列表了。android
今天你们稍事休息,要练习的内容比较少,着重学习一些理论知识,先理清几个概念。程序员
Android系统本质上是Linux系统,但相对于Linux系统,主要在驱动、性能、内存管理、设备管理等一些部分作了比较多的改动,以更适用于移动设备。数据库
从上图能够看到,Android系统架构为四层,分别是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文件。app
Android4.4之后,启用了Dalvik虚拟机,而改用Android Runtime,根据Google的说明,新的Android Runtime会有更好的效率,执行速度更快、耗电更少、占用内存更低。框架
这一层就是咱们代码能够直接调用的了,一般所说的Android API都会在这一层提供,主要包括Activity Manager、Window Manager、Content Provider等,等咱们对系统有了更多的学习以后,会慢慢用到其中的一部份内容。ide
这一层就是咱们平时能够操做的APP了。Android自己既是个操做系统,又提供了基础的APP,如SMS、Phone、Browser等,固然了,更多的APP是须要咱们程序员来实现的。性能
了解了Android系统的基础架构后,再结合咱们正在开发的天气预报APP来具体的学习一下Android APP项目的一个核心的文件——AndroidManifest.xml。
每个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则会显示给用户。
这个节点指定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这个配置通常是不须要设置的,由于系统自己是向下兼容的。
这个节点指定了APP拥有的权限。Android系统对于权限管理是比较严格的,一个APP必须先声明权限才能使用相应的功能。例如须要访问网络,则须要在这里声明一个android.permission.INTERNET权限,相应的如GPS、Camera、VIBRATE等都须要先声明权限才可使用。
这个节点指定了APP的组件、属性,如icon、label、name、theme等。
这个节点是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