10天学安卓-第五天

简介: 原文:10天学安卓-第五天经过前几天的练习,相信大家已经对如何做出一个简单的界面有了初步的了解,并且已经做出来一个还不错的天气列表了。 今天大家稍事休息,要练习的内容比较少,着重学习一些理论知识,先理清几个概念。
原文: 10天学安卓-第五天

经过前几天的练习,相信大家已经对如何做出一个简单的界面有了初步的了解,并且已经做出来一个还不错的天气列表了。

今天大家稍事休息,要练习的内容比较少,着重学习一些理论知识,先理清几个概念。

Android系统架构

Android系统本质上是Linux系统,但相对于Linux系统,主要在驱动、性能、内存管理、设备管理等一些部分做了比较多的改动,以更适用于移动设备。

Android系统架构图

从上图可以看到,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文件。

应用图标

icon

把上面的图标放到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>

 

打完收工,运行程序。

可以发现应用左上角的图标和名称都变成了我们想要的。

device-2015-01-21-165433

 

今天的内容比较少,主要是一些基础理论知识,也希望大家多多查阅资料,对Android本身的结构有更多更深入的了解。

 

附件是本次的工程文件,点击下载

 

此系列文章系本人原创,如需转载,请注明出处 www.liuzhibang.cn

 

目录
相关文章
|
Java Android开发 iOS开发
10天学安卓-第一天
原文:10天学安卓-第一天 说明1:本系列教程仅针对新手入门,高手勿入! 说明2:本系列教程均不考虑安卓版本低于4.0的情况。 说明3:本系列教程假定您了解一些编程的基础知识,对于Java语言略懂即可。
1336 0
|
XML Android开发 数据格式
10天学安卓-第二天
原文:10天学安卓-第二天 继续我们的学习。 相信我,第一天的工作是最为重要的,通过这些工作,我们把开发安卓所必须的环境、基础条件都配置好了,相信肯定遇到了很多问题,不过,根据我的经验,您会很快解决这些问题的。
1267 0
|
XML API Android开发
10天学安卓-第三天
原文:10天学安卓-第三天 经过第二天的学习,我们正确的调用了百度天气API,将天气信息显示到了界面上,做到这一步,我们的工作就算是完成1%了,剩下99%的工作就需要不断的润色这个未成形的APP了。 最首要的就是,我们要把那么一大堆字符转换为普通用户可以轻松理解的界面,那么我们来学习一下Android里面的界面布局。
862 0
|
JSON 程序员 Android开发
10天学安卓-第四天
原文:10天学安卓-第四天 继续昨天的学习。 昨天我们根据取得的天气数据新建了一个视图用来显示各项内容,那么今天我们就把数据显示出来吧!!! 这里我们要把数据和视图联系起来,那么就用到了适配器-Adapter,Android给我们提供了很多Adapter,这里我们用到了BaseAdapter。
941 0
|
存储 定位技术 API
10天学安卓-第六天
原文:10天学安卓-第六天 经过前几天的学习,我们的天气预报程序已经可以把天气正常的呈现出来了,正如之前说的,现在的APP只能显示固定地区的天气,那么我们要怎样才能显示我们本身所在地的天气呢? Android定位 Android系统本身提供了三种定位方式,分别是网络、基站和GPS,主要利用的是LocationManager、TelephonyManager相关的类库,但是因为一些原因,Google的API在国内访问经常出现问题,所以在这里我就不对这些API做介绍了,有想了解的可以自行查询相关资料。
955 0
|
Android开发
10天学安卓-第七天
原文:10天学安卓-第七天 我们上次学习了百度定位以及SharedPreferences的使用,不知道大家有没有注意到我们新加了一个方法: protected void onStop() { super.onStop(); mLocationClient.stop(); }   这个方法的作用是在界面停止的时候,同时停止百度定位功能。
876 0
|
Android开发 容器 数据格式
10天学安卓-第九天
原文:10天学安卓-第九天 接着昨天的任务,我们今天实现左右滑动可以切换城市的功能。 这里就需要引入新的控件了,Android给我们提供了ViewPager,我们就使用这个,同时,显示天气的界面我们也不再使用Activity,而改为Fragment。
731 0
|
Android开发
10天学安卓-第十天
原文:10天学安卓-第十天 本次是这个教程的最后一篇了,我们的APP开发基本上已经可以宣告完成了,接下来的工作就是如何发布推广运营了。   广告平台 古人云:兵马未动,粮草先行。我们身为APP开发者就需要考虑如何从APP盈利,目前通常的做法主要有APP收费、APP免费+内购及嵌入广告三种方式,我们这个简单的APP想让用户付费是比较有难度的,那么就只能通过嵌入广告的方式来赚取一点广告费了。
1076 0
|
20天前
|
Java Android开发
Android 开发获取通知栏权限时会出现两个应用图标
Android 开发获取通知栏权限时会出现两个应用图标
12 0
|
1月前
|
XML 缓存 Android开发
Android开发,使用kotlin学习多媒体功能(详细)
Android开发,使用kotlin学习多媒体功能(详细)
96 0