本文为安全专家李洋的最新一篇专栏文章《AndroidManifest.xml文件详解》。AndroidManifest.xml是一个跟安全相关的配置文件,该配置文件是Android安全保障的一个不可忽视的方面,本文对AndroidManifest文件进行详细介绍。

以下为全部内容:

了解AndroidManifest.xml文件的主要用途

AndroidManifest.xml主要包含以下功能:

  1. 说明application的java 数据包,数据包名是application的唯一标识;
  2. 描述application的component;
  3. 说明application的component运行在哪个process下;
  4. 声明application所必须具备的权限,用以访问受保护的部分API,以及与其他application的交互;
  5. 声明application其他的必备权限,用以component之间的交互;
  6. 列举application运行时需要的环境配置信息,这些声明信息只在程序开发和测试时存在,发布前将被删除;
  7. 声明application所需要的AndroidAPI的最低版本级别,例如1.0,1.1,1.5等;
  8. 列举application所需要链接的库;

熟悉AndroidManifest.xml文件的结构及元素

AndroidManifest.xml文件的结构、元素,以及元素的属性,可以在AndroidSDK文档中查看详细说明。而在看这些众多的元素以及元素的属性前,需要先了解一下这些元素在命名、结构等方面的规则:

  1. 元素:在所有的元素中只有<manifest>和<application>是必需的,且只能出现一次。如果一个元素包含有其他子元素,必须通过子元素的属性来设置其值。处于同一层次的元素,这些元素的说明是没有顺序的。
  2. 属性:按照常理,所有的属性都是可选的,但是有些属性是必须设置的。那些真正可选的属性,即使不存在,其也有默认的数值项说明。除了根元素<manifest>的属性,所有其他元素属性的名字都是以android:前缀的;
  3. 定义类名:所有的元素名都对应其在SDK中的类名,如果你自己定义类名,必须包含类的数据包名,如果类与application处于同一数据包中,可以直接简写为“.”;
  4. 多数值项:如果某个元素有超过一个数值,这个元素必须通过重复的方式来说明其某个属性具有多个数值项,且不能将多个数值项一次性说明在一个属性中;
  5. 资源项说明:当需要引用某个资源时,其采用如下格式:@[package:]type:name。例如<activity android:icon=”@drawable/icon ” . . .>
  6. 字符串值:类似于其他语言,如果字符中包含有字符“\”,则必须使用转义字符“\\”;

下面结合cookie实例中的AndroidManifest.xml文件来说明一下,原XML文件如下:

  1. <?xml version=”1.0″ encoding=”utf-8″?>
  2. <manifest xmlns:android=”http://schemas.android.com/apk/res/android”
  3. package=”moandroid.cookie”
  4. android:versionCode=”1″
  5. android:versionName=”1.0″>
  6. <application android:icon=”@drawable/icon” android:label=”@string/app_name”>
  7. <activity android:name=”.cookie” 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=”3″ />
  15. </manifest>

除了头部的XML信息说明外,首先是manifest项(也就是根节点),其属性包括:schemas URL地址、包名(moandroid.cookie),以及程序的版本说明。其次是manifest的子节点application,其属性包括:程序图标、程序名称。前面带有@表示引用资源,例如:@drawable/icon表示引用的是drawable资源中的icon,可以在其源工程的res/drawable中找到。然后就是application的子节点activity,其属性包括:activity的名称、activity的标签名,其子节点intent-filter则是对activity的说明。

而在intent-filter中,actionandroid:name=”android.intent.action.MAIN”和categoryandroid:name=”android.intent.category.LAUNCHER”用以说明程序启动时的入口activity是哪个。如果这两个属性值中分别含有MAIN和LAUNCHER,则说明它就是启动程序时的入口活动。uses-sdkandroid:minSdkVersion=”3″说明程序使用的Android SDK的最低版本,其中1表示Android1.0,2表示Android 1.1,而3则表示Android1.5。

如何进行应用程序权限申请

如下所示,文中黑体标记的部分为应用程序权限申请内容:

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

如上述文件描述中加下划线的斜体部分,该文件的作用是说明该软件需要发送短信的功能。

Android定义了百余种permission,可供开发人员使用,具体详见网址

自定义权限

在文件中,用户还可以自定义权限。permission就是自定义权限的声明,可以用来限制app中特殊组件,特性与app内部或者和其他app之间访问。写了一个引用自定义权限的例子,在安装app的时候,提示权限:

定义权限如下:

  1. <permission android:label="”自定义权限”"
  2. android:description=”@string/test”
  3. android:name=”com.example.project.TEST”
  4. android:protectionLevel=”normal”
  5. android:icon=”@drawable/ic_launcher”>

声明的含义如下;

  • android:label:权限名字,显示给用户的,值可是一个string数据,例如这里的“自定义权限”。
  • android:description:比label更长的对权限的描述。值是通过resource文件中获取的,不能直接写string值,例如这里的”@string/test”。
  • android:name:权限名字,如果其他app引用该权限需要填写这个名字。
  • android:protectionLevel:权限级别,分为4个级别: normal:低风险权限,在安装的时候,系统会自动授予权限给application。dangerous:高风险权限,系统不会自动授予权限给app,在用到的时候,会给用户提示。signature:签名权限,在其他app引用声明的权限的时候,需要保证两个app的签名一致。这样系统就会自动授予权限给第三方app,而不提示给用户。
  • signatureOrSystem:这个权限是引用该权限的app需要有和系统同样的签名才能授予的权限,一般不推荐使用。

Android学习笔记:androidmanifest.xml解析

AndroidManifest.xml文件详解的更多相关文章

  1. [转]AndroidManifest.xml文件详解

    转自:http://www.cnblogs.com/greatverve/archive/2012/05/08/AndroidManifest-xml.html AndroidManifest.xml ...

  2. AndroidManifest.xml文件详解(uses-permission)

    语法(SYNTAX): <uses-permissionandroid:name="string"/> 被包含于(CONTAINED IN): <manifest ...

  3. AndroidManifest.xml文件详解(meta-data)

    http://blog.csdn.net/think_soft/article/details/7567189 语法(SYNTAX): <meta-dataandroid:name=" ...

  4. 【Android 复习】:AndroidManifest.xml 文件详解

    <?xml version="1.0" encoding="utf-8"?> <!-- package 包表示整个Android应用程序的主要 ...

  5. AndroidManifest.xml文件详解(activity)(一)

    <activity android:allowTaskReparenting=["true" | "false"] android:alwaysRetai ...

  6. AndroidManifest.xml文件详解(application)

    http://blog.csdn.net/think_soft/article/details/7557101 语法(SYNATX): <application android:allowTas ...

  7. AndroidManifest.xml文件详解(permission-group)

    http://blog.csdn.net/think_soft/article/details/7578760 语法(SYNTAX): <permission-groupandroid:desc ...

  8. AndroidManifest.xml文件详解(permission)

    http://blog.csdn.net/think_soft/article/details/7574726 语法(SYNTAX): <permissionandroid:descriptio ...

  9. AndroidManifest.xml文件详解(uses-feature)

    http://blog.csdn.net/think_soft/article/details/7596796 语法(SYNTAX): <uses-featureandroid:name=&qu ...

随机推荐

  1. Centos7.6环境中安装zabbix3.4

    官网链接:https://www.zabbix.com/documentation/3.4/zh/manual/installation/install_from_packages 部署环境 虚拟机服 ...

  2. 数据库T-SQL语言操作(T-SQL语句、数据库、表、视图、索引)

    T-SQL语言 按用途分四部分 数据定义语言(CREATE,DROP,ALTER) 数据操作语言(INSERT,DELETE,UPDATE) 数据查询语言(SELECT) 数据控制语言(GRANT,R ...

  3. Qt QPixmap QImage 图片等比例缩放到指定大小

    QPixmap pixmap(path); //pixmap=QPixmap::fromImage(imgShow); pixmap = pixmap.scaled(, , Qt::KeepAspec ...

  4. StatusBar时间状态栏

    StatusBar:

  5. 03.pipeline实现项目自动编译docker镜像自动打包

    https://jenkins.io/zh/doc/book/pipeline/ 官方教程,可以中文.Jenkinsfile就是把pipeline内容保存到文件,然后提交到svn等版本控制库中.安装b ...

  6. 新服务器搭建-总结: 下载nginx,jdk8,docker-compose编排(安装mysql,redis) 附安装

    三明SEO: 前言 如题, 公司新买了一条4核16G的服务器, 不得不重新搭建环境, 只能一一重来, 做个记录 1.nginx : 手动安装 2.jdk8: 手动安装 3. 安装docker 及doc ...

  7. tesseract系列(1) -- tesseract用vs编译成库

    1.下载teseract 下载地址github:     https://github.com/tesseract-ocr/tesseract/releases/ 2.编译源码 源码的编译有两种方式 ...

  8. Windows环境搭建 face_recognition,dlib

    文章参考:https://blog.csdn.net/hongbin_xu/article/details/76284134 文章参考:https://blog.csdn.net/weixin_404 ...

  9. Python - 使用 PostgreSQL 数据库

    基本用法 # -*- coding: utf-8 -*- # !/usr/bin/python # 需要安装下面的驱动包 import psycopg2 # 连接到一个现有的数据库,如果数据库不存在, ...

  10. day30-client上传比较大的数据给server

    #在网络上面传输的数据叫数据包,数据包里面的数据叫报文,报文都有报头. #报头可以包含文件路径.文件大小.文件名称等等.#当数据比较长,一次性发送会报错,需要分多次发送.#client端上传数据到se ...