【Android开发日记】之入门篇(十)——Android应用配置文件解析
在Android基于组件的应用设计架构中,配置文件是一个很重要的元素。它将应用所包含的组件、各组件的能力和配置以及应用环境介绍给Android框架层的各个服务,让Android知道如何去调度应用中的各个组件。Android的配置文件就像一本书的目录,它会告诉我们里面有什么内容。

一、权限设置
应用通过配置文件声明其所需权限,以访问其应用或系统中的受限资源。这些权限声明会在应用安装时告知用户,用户可以根据这些信息决定是否要安装该应用。
添加权限,如
<!-- 添加读取联系人记录的权限 -->
<uses-permission android:name="android.permission.READ_CONTACTS" />
如果开发者需要定义权限来限制第三方应用的访问,则可以通过<permission>配置项来进行定义,在上次的广播组件中有过一次应用,不知道大家还记得否。
<permission
android:name="com.example.test"
android:label="权限的名字"
android:description="权限的具体描述"
android:permissionGroup="android.permission-group.COST_MONEY"
android:protectionLevel="normal">
</permission>
定义了的权限还需要部署到对应的组件上才能生效。组件管理系统在构造一个组件对象时,会检验请求组件的权限声明是否与该组件的权限配置相匹配,如果匹配失败,会抛出异常阻止这次调用。
二、环境配置
每个应用都会有它所依赖的软硬件环境。有点应用实现会依赖特定版本的SDK,而有的应用则需要一些特定硬件的支持。应用所依赖的软硬件信息,都需要在配置文件的环境配置部分声明。
使用配置项<uses-sdk>,可以声明应用所依赖的SDK版本信息。而<users-feature>配置项,则用于声明应用所依赖的外设或Android的特色功能。比如,一款主打拍照功能的应用需要声明所安装设备要有相机
<uses-feature android:name="android.hardware.camera"/>
此外,<uses-configuration>配置项,用于描述应用所需的输入设备配置;<supports-screens>配置项,用于声明应用所依赖的屏幕设置。对输入或显示有特殊需求的应用,都需要声明这些配置项。
三、应用和组件配置
配置文件的核心部分就是对应用及其各组件的特征的描述。应用中的各个组件都会有其调用和运行的需求,在配置文件中需要对这些信息进行描述,帮助Android系统服务知晓如何调度这些组件。配置文件对组件的描述,主要包括几个方面。
(1)基本信息描述
每个组件都会有一些最基本的配置信息,包括该组件对应的实现类名name、组件名字label、组件图标icon等。
(2)接口描述
每个组件的功能都是在配置文件中进行描述的。界面组件,服务组件和广播组件都是通过Android的Intent进行连接的每个组件的配置信息中,都可以放置若干个<intent-filter>项,表达该组件可以处理的Intent对象。
(3)运行模型描述
在默认情况下,各个组件都会运行与应用的主线程中;在一些特殊情况下,需要将某些组件放在特定的进程中执行,可以通过process项来设置。
(4)权限描述
通过组件的permission参数进行设置。
(5)元数据描述
任意存放键值对信息,主要用于告知系统为组件附加一些系统功能。比如,如果想为组件绑定特定的搜索模块,就可以通过<meta-data>进行配置。
(6)可用性描述
某些参数在应用安装后会处于不可用的状态。这就需要通过组件配置中的enable参数进行设置。而某些组件仅能被应用本身使用,就需要将exported参数设为false。
除此以外,还有<uses-library>,用于声明应用需要链接的附加类库。
额,这篇算是组件部分的附加篇吧,让大家了解如何在配置文件中注册组件以及其他信息。
参考文章:AndroidManifest.xml配置文件详解 http://blog.chinaunix.net/uid-9185047-id-3460344.html
========================================
作者:cpacm
地址:http://www.cnblogs.com/cpacm/p/3935268.html
【Android开发日记】之入门篇(十)——Android应用配置文件解析的更多相关文章
- 【Android开发日记】第一个任务Android Service!Service靴+重力感应器+弹出窗口+保持执行
前言: 近期在写一个小程序,需求是手机摇一摇就弹窗出来.第一次使用了Service,学习了两天,实现了Service弹窗,开机启动,Service启动和销毁,Service保持一直执行. 满足了自己的 ...
- 【Android开发日记】之入门篇(十二)——Android组件间的数据传输
组件我们有了,那么我们缺少一个组件之间传递信息的渠道.利用Intent做载体,这是一个王道的做法.还有呢,可以利用文件系统来做数据共享.也可以使用Application设置全局数据,利用组件来进行控制 ...
- 【Android开发日记】之入门篇(十四)——Button控件+自定义Button控件
好久不见,又是一个新的学期开始了,为什么我感觉好惆怅啊!这一周也发生了不少事情,节假日放了三天的假(好久没有这么悠闲过了),实习公司那边被组长半强制性的要求去解决一个后台登陆的问题,结果就是把 ...
- 【Android开发日记】之入门篇(七)——Android数据存储(上)
在讲解Android的数据源组件——ContentProvider之前我觉得很有必要先弄清楚Android的数据结构. 数据和程序是应用构成的两个核心要素,数据存储永远是应用开发中最重要的主题之一,也 ...
- 【Android开发日记】之入门篇(九)——Android四大组件之ContentProvider
数据源组件ContentProvider与其他组件不同,数据源组件并不包括特定的功能逻辑.它只是负责为应用提供数据访问的接口.Android内置的许多数据都是使用ContentProvider形式,供 ...
- 【Android开发日记】之入门篇(十三)——Android的控件解析
Android的控件都派生自android.view.View类,在android.widget包中定义了大量的系统控件供开发者使用,开发者也可以从View类及其子类中,派生出自定义的控件. 一.An ...
- 【Android开发日记】之入门篇(十一)——Android的Intent机制
继续我们的Android之路吧.今天我要介绍的是Android的Intent. 对于基于组件的应用开发而言,不仅需要构造和寻找符合需求的组件,更重要的是要将组件有机的连接起来,互联互通交换信息,才能够 ...
- 【Android开发日记】之入门篇(一)——开发环境的搭建
写给自己的话:至此,大学的时光已经剩下一年的时光,下一年等毕业设计结束后就算是正式地踏入社会.自己学android也不过几个月的时间,为了更好管理文档,写点东西记录下自己曾经做过的点点滴滴是一个不错的 ...
- 【Android开发日记】之入门篇(八)——Android数据存储(下)
废话不多说了,紧接着来讲数据库的操作吧.Come On! 提到数据存储问题,数据库是不得不提的.数据库是用来存储关系型数据的不二利器.Android为开发者提供了强大的数据库支持,可以用来轻松地构造基 ...
- 【Android开发日记】之入门篇(五)——Android四大组件之Service
这几天忙着驾校考试,连电脑都碰不到了,今天总算告一段落了~~Service作为Android的服务组件,默默地在后台为整个程序服务,辅助应用与系统中的其他组件或系统服务进行沟通.它跟Activity的 ...
随机推荐
- select值改变
改变select的值,然后执行一个方法.可以用chang: $("#select").change(function(){ //要执行的内容 });
- 用 js 写一个获取随机颜色的程序
function getColor(){ var color="#"; for(var i=0;i<6;i++){ color+=(Math.random()*16 | 0) ...
- ios 苹果内购订单验证 --- nodejs实现
实现代码 function IosPlayVerify(data,orderid,cb) { itunesPost(data,function (error,responseData) { if (e ...
- Java语言基础---两变量间的交换
使用中间变量交换两个变量的值 int a = 10 , b = 11 , m; m = a; a = b; b = m; 不使用中间变量交换两个变量的值 int a = 10; int b = 11; ...
- Android stadio 工具使用
android staido 有logcat窗口,她可以显示log信息.还有run窗口. 我以前一直忽略了run窗口,其实蛮重要,蛮好用的.他只会显示你当前运行的进程的log,不用你再去设置filld ...
- Mac下安装Angular报错处理
安装 Angular CLI 命令: sudo npm install -g @angular/cli 打印如下错误:(权限问题) gyp WARN EACCES user "root&qu ...
- 怎么设置才能让外网ip可以访问mysql数据库[转]
转自: http://www.hongyanliren.com/89.html 使用mysql中,很多人都会遇到这样的问题:在vps服务器或者云服务器上安装了mysql后,使用其他工具在外网ip之下根 ...
- iphone 8 plus 红色特别版,突然自动关机无法启动
今天早上我的iphone 8p 突然自己在床上闪动开机图标,闪了半个多小时它就光荣的自动关机了,我尝试了长按开机键,长按home+开机键15秒,通通木有用,它就是没!反!应! 于是找了售后,学到了正确 ...
- SSTI注入绕过(沙盒逃逸原理一样)
在python沙盒逃逸中绕过道理是一样的. 1.python沙盒中删除了很多模块,但是没有删除reload reload(__builtins__),重新加载被删除的模块,直接命令执行,只用于py2 ...
- python3知识点之---------字符串的介绍
1. 定义 其实字符串就是一系列字符,用引号括起来的就是字符串,其中的引号可以是单引号或者双引号. 比如 "This is a string" 'This is a strin ...