Android清单AndroidManifest详细说明

在初见Intent一章中,我们已尝试过使用「startActivity」函式,传入适当的「Intent」,来呼叫浏览器的Activity。

到目前为止,我们可以由学习Android 应用程式的经验中归纳得出:所有Android 程式的运作流程,都定义在Activity 中。

Android 系统与其他系统很不一样的地方是:它的应用程式并不直接与底层系统紧密结合,而是跑在Android 框架中。 这意思是设计Android 应用程式时,我们并不需要关心实际上运作的机器是哪一牌的手机或是哪一种嵌入式系统,或使用哪一种架构(ARM、x86、MIPS)。 我们要关心的只有Android 框架提供了那些功能,好让我们能操作这台设备。 具体来说就是我们只要知道这台机器的萤幕大小、有没有键盘,有没有支援GPS 等等讯息,就知道我们写的应用程式是否能在这台机器上顺畅地运作。 Android 框架与底层系统的整合的问题完全可以留给轫体工程师来操心。

在执行「startActivity」函式时,应用程式并不是直接呼叫另一个Activity,而是将「Intent」(意图)传进Android 框架中。 Android 框架会查看「startActivity」 呼叫所传入的动作与Intent 内容是否在注册表中,如果符合,就启动对应的服务或Activity。

Android 系统中的每一个应用程式,在安装的过程里,都得事先在Android 框架中注册、登记这个应用程式所建立的Activity,并事先注明会使用到的服务。 譬如当我们在Android 上安装我们撰写的BMI 应用程式时,BMI 应用程式就会向Android 框架登记相关资讯:BMI 应用程式将会用到「Bmi」这个Activity。

这份讯息存在于每个Android应用程式专案根目录下的「 AndroidManifest .xml」档案中。 如果我们在程式里,要用到其他应用程式或服务所提供的功能,也需一并在此列出。

在安装应用程式的时候,Android 框架会根据应用程式提供的这份清单,将资讯注册于Android 框架的注册表中。

备注:

这么说其实是不太精确的。 Android 应用程式的运作流程,存在于四种载体中:

  1. Activity (活动)
  2. Broadcast Intent Receiver
  3. Service
  4. Content Provider

各种载体的相关内容会在后续章节提到时作解说。

预设的Activity 清单

我们使用eclipse Android开发工具打开「BMI/ AndroidManifest .xml」档案。 切换到「 AndroidManifest .xml」分页标签,查看预设的「BMI/AndroidManifest .xml」档案原始码:

  1 <?xml version="1.0" encoding="utf-8"?>
 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
 3 package="com.demo.android.bmi"
 4 android:versionCode="1"
 5 android:versionName="1.0">
 6 <application android:icon="@drawable/icon">
 7 <activity android:name=".Bmi" android:label="@string/app_name">
 8 <intent-filter>
 9 <action android:name="android.intent.action.MAIN" />
 10 <category android:name="android.intent.category.LAUNCHER" />
 11 </intent-filter>
 12 </activity>
 13 </application>
 14 <uses-sdk android:minSdkVersion="X" />
 15 </manifest> 

我们分行讲解如下:

  <?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android" ....> ....
 </manifest> 

「 AndroidManifest .xml」这个档案也是以XML格式描述,每个Android应用程式都需要一个「 AndroidManifest .xml」档案,每份「AndroidManifest .xml」档案的开头都会出现这段叙述。 而整个「 AndroidManifest .xml」档案的叙述,都包含在「manifest」(清单)这个主要标签中。

  package="com.demo.android.bmi" 

「package」 是「manifest」(清单)标签的一个特别属性,范例中的内容可用来标明,这个应用程式的进入点存在于「com.demo.android.bmi」这个名称空间/路径中。

  android:versionCode="1"
 android:versionName="1.0" 

「android:versionCode」和「android:versionName」是应用程式版本号。 这两个属性是可选的(非必要)。 「android:versionName」是给使用者看的版本号,如「1.0」、「2.0」。 「android:versionCode」则是开发者用的内部版本号,一般使用流水号。

  <application android:icon="@drawable/icon" android:label="@string/app_name">
 ...
 </application> 

「manifest」标签中主要包含一个「application」标签(备注1)。 「application」标签里面,定​​义了所有这个应用程式用到的Activity、服务等资讯。「application」标签中的「android:icon」属性,定义了这个应用程式将显示在Android 主画面中的应用程式图示。「android:icon="@drawable/icon"」表示应用程式图示的资源档存在于「res/drawable/icon」 中。 图示的大小必须超过64x64 像素(Pixel)。「application」标签中的「android:label」属性可用来指定应用程式将显示在Home 主画面上的名称​​。 也就是预设刚开好机时,可以从桌面下方拉出的应用程式列表。

  <activity android:name=".Bmi" android:label="@string/app_name">
 ...
 </activity> 

「application」标签中所有用到的Activity ,都要包含在一个个「activity」标签中(备注2)。 Activity 是Android 应用程式与使用者互动的主要元素,当使用者开启一个应用程式,第一个看到的画面就是一个Activity。 若是一个应用程式中包含多个画面时,会定义多个不同的Activity,我们也必须在「application」标签中,使用多个「activity」标签,为不同的Activity 添加描述。 如果我们已经在程式码中定义好了Activity ,却忘了在「AndroidManifest .xml」档案中加入对应的「activity」标签,那么在执行中呼叫到这个Activity的时候,将无法开启这个Activity。

「activity」标签的「android:name」属性,指出了这个Activity 所对应的类别(class)。 「activity」标签中的「android:label」属性可用来指定应用程式将显示在Activity 画面上方的名称。 也可以在程式码中透过「setTitle(“名称”)」来动态修改。

因为在上一层「Manifest」标签属性中已经定义了「package="com.demo.android.bmi"」,因此在「activity」标签的「android:name」属性中,「.Bmi」代表着「com .demo.android.bmi.Bmi」的简写。 也可以写成「Bmi」,一样是代表「com.demo.android.bmi.Bmi」这个类别。

  <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
 </intent-filter> 

「intent-filter」标签定义了这个「activity」的性质。 「intent-filter」中主要包含了两个标签:「action」跟「category」标签。 「action」标签中的「android:name」属性,其内容「android.intent.action.MAIN」表示:这个Activity 是此应用程式的进入点(就像程式中常见的main 主程式),开启这个应用程式时,应先执行这个Activity。 。 常见的还有「android.intent.action.EDIT」等标签,会在之后章节用上的时候讲解。 「category」标签中的「android:name」属性,其内容「android.intent.category.LAUNCHER」表示:这个Activity 将显示在Launcher 的应用程式列表中。

我们把整个档案合到一起看,可以总结出这个档案所传达的讯息:在「com.demo.android.bmi」路径下的「Bmi.java」这个档案中,已定义了一个主要的Activity; 当我们打​​开Android 的时候,显示的是位于「res/drawable/icon」的图示。 一旦我们按下图示来启动这个应用程式,Android 应用程式框架会去寻找到定义了「android.intent.action.MAIN」内容的「.Bmi」activity,并呼叫执行。

  <uses-sdk android:minSdkVersion="X" /> 

Android SDK 1.1 版之后引入了这条叙述,「X」代表了目标版本代号。 透过指定这个参数,系统可以依此辨别应用程式是否使用相容的SDK 版本,好决定能否在这台机器上安装执行。 这也是一个可选填的选项。 但如果我们的应用程式要发布出去,一些强势的通路如Google Android Market 已规定所有新发布的应用程式必须指定「android:minSdkVersion」这个参数。

各目标版本与代号对应表如下:

目标版本 代号
3.0 11
2.3.3 10
2.3 9
2.2 8
2.1 7
2.0.1 6
2.0 5
1.6 4
1.5 3
1.1 2
1.0 1

目前各版本占有率可以参考官方的版本占有率图表: http://developer.android.com/resources/dashboard/platform-versions.html

这个图表是根据最近2 周间连上Android Market 设备的比率来绘制。

备注1

除了「application」标签外,还有「uses-permission」(例如允不允许存取SMS、能否存取联络簿、相机功能)、「permission」、「instrumentation」等主要标签。 相关的内容在后续章节用到时再一并解说。

备注2

除了「activity」标签外,对应于Android 应用程式的运作流程,还有「service」、「receiver」、「provider」等主要元件。 相关内容会在后续章节提到时作解说。

参考资料

  • Android manifest http://developer.android.com/reference/android/R.styleable.html#AndroidManifest
  • Intent Action http://developer.android.com/reference/android/content/Intent.html

Android清单AndroidManifest详细说明相关推荐

  1. android 清单文件注册,在AndroidManifest(清单文件)中注册activity(活动)及配置主活动、更改App图标、App名称、修改隐藏标题栏...

    打开app/src/main/AndroidManifest. package="com.example.administrator.myapplication" > and ...

  2. Android NFC开发详细总结

    Android NFC开发详细总结 Near Field Communication (NFC) 为一短距离无线通信技术,通常有效通讯距离为4厘米以内.NFC工作频率为13.65 兆赫兹,通信速率为1 ...

  3. android蓝牙设置特征属性,Android BLE蓝牙详细解读(二)

    上篇文章主要介绍了关于BLE的一些基础操作,我们能够大概了解到蓝牙操作的一些流程,上文末介绍了本人的一个BLE开源库,支持蓝牙一对多的连接方式,该库封装了蓝牙的开启.扫描.连接.断开.连接超时...一 ...

  4. Android连接SQLServer详细教程(数据库+服务器+客户端),并在微软Azure云上搭建云服务

    Android连接SQLServer详细教程(数据库+服务器+客户端),并在微软Azure云上搭建云服务 参考博客:http://blog.csdn.net/zhyl8157121/article/d ...

  5. 华为云IOT Android应用开发详细教程

    华为云IOT Android应用开发详细教程 (Android Studio开发) 第〇章    简介       大家好,上一期发布的教程叫大家如何利用华为云物联网平台提供的官方Java Demo去 ...

  6. Android SQLite 数据库详细介绍

    Android SQLite 数据库详细介绍我们在编写数据库应用软件时,需要考虑这样的问题:因为我们开发的软件可能会安装在很多用户的手机上,如果应用使用到了SQLite数据库,我们必须在用户初次使用软 ...

  7. Android dumpsys命令详细使用

    Android dumpsys命令详细使用 一.dumpsys命令介绍 1.命令说明 Dumpsys用户系统诊断,它运行在设备上,并提供系统服务状态信息 命令格式: adb shell dumpsys ...

  8. Android BLE蓝牙详细解读

    代码地址如下: http://www.demodashi.com/demo/15062.html 随着物联网时代的到来,越来越多的智能硬件设备开始流行起来,比如智能手环.心率检测仪.以及各式各样的智能 ...

  9. 大学生开学必备物品清单的详细介绍

    大学生开学必备物品清单包含哪些物品呢?开学了,大学生们都在准备开始在学校要使用的东西了.那么大学生开学有什么必备物品呢?考虑到很多朋友正在为大学生开学需要什么必备物品而苦恼,接下来小编为大家带来了大学 ...

最新文章

  1. 前后端API交互如何保证数据安全性?
  2. python设计模式整理
  3. CV Code | 计算机视觉开源周报 20190601期
  4. 姑苏山塘飞雪披银装[组图]
  5. spark 为什么总是起200个task
  6. php header函数实例代码
  7. 实验8.1 链表类的定义与实现
  8. 机器学习:matlab实现异常检测
  9. 小米笔记安装双系统linux,小米笔记本电脑怎么安装双系统?-小米win7
  10. 免费智能机器人聊天API
  11. python测试开发实战_自动化平台测试开发:Python测试开发实战
  12. 由浅入深玩转华为WLAN—10安全认证配置(3)无线dot1 PEAP认证,基于微软IAS服务器
  13. 前端性能和加载体验优化实践(附:PWA、离线包、内存优化、预渲染)
  14. canvas签名插件 jSignature 移动,PC都适用
  15. P2071 座位安排(二分图最大匹配)
  16. 技术支持售前人员岗位技能与职责
  17. 一个tesseract ocr box 文件查看toy,python
  18. python大数据入门书籍_初学大数据,一定要知道这些
  19. 搭建个人家用NAS网络存储服务器
  20. Git可视化工具-idea插件使用

热门文章

  1. 关于.net的.dll.refresh文件
  2. wpf Command Binding
  3. SQL Server六步改善安全规划全攻略
  4. Thrift IDL基本语法
  5. Scratch-介绍“克隆”
  6. 在eclipse上Checkstyle的安装和使用
  7. C++相关:动态内存和智能指针
  8. 关于hibernate中提示can not create table ******
  9. Window右键添加“用vim打开”
  10. css cursor 的可选值(鼠标的各种样式)