AndroidManifest官方文档

AndroidManifest.xml详解:组件注册与权限管理 AndroidManifest.xml是Android应用开发中的核心配置文件,采用XML格式定义应用的基本属性和组件结构。作为Android应用的元数据描述文件,它承担着组件注册、权限管理、设备兼容性声明等关键功能。在工程实践中,开发者需要通过该文件声明Activity、Service等四大组件,并配置Intent Filter实现组件间通信。同时,合理的权限管理策略能有效保障应用安全性,包括系统权限请求和自定义权限定义。掌握AndroidManifest.xml的配置技巧,是开发符合Google Pla 阅读详情

https://developer.android.com/guide/topics/manifest/manifest-intro.html
https://developer.android.com/samples/BasicContactables/AndroidManifest.html

AndroidManifest简介

每个应用必须有一个AndroidManifest.xml文件(精确的按此名字)在它的根目录.manifest文件向Android系统提供关于app的基本信息,这些是系统必须在运行任何app的代码前需要知道的.

此外,清单文件还可执行以下操作:

1.它命名应用的Java包.包名作为应用的唯一标识.

2.它描述应用的组件,包括组层应用的Activities,Services,BroadcastReceivers,和ContentProviders.它也命名类实现各个组件和公布它们的能力,如它们可以处理的Intent消息.这些声明通知提供,它们可被启动的组件和条件.

3.它决定进程持有的应用组件

4.它声明应用必须拥有来去访问受保护的API部分和与其他应用交互的权限.它也声明权限,其他被要求去拥有为了与应用组件交互.

5.它列出Instrumentation类,提供分析和其他信息随着应用运行.这些声明存在于manifest中,仅当应用在开发时,并将被移除在应用发布前.

6.它声明应用要求的最小Android API等级.

7.它列出应用必须被链接依赖的库

Manifest文件结构

下面的代码片段显示manifest文件通常的结构,和它可以包含的每个元素.每个元素及其所有属性,全部记录在单独的文件中.
提示:要查看此文本中提到的任何元素的详细信息,就点击元素名.

<?xml version="1.0" encoding="utf-8"?>
<manifest>
  <uses-permission />
  <permission />
  <permission-tree />
  <permission-group />
  <instrumentation />
  <uses-sdk />
  <uses-configuration />
  <uses-feature />
  <supports-screens />
  <compatible-screens />
  <supports-gl-texture />
  <application>
      <activity>
         <intent-filter>
         <action />
         <category />
         <data />
     </intent-filter>
     <meta-data />
      </activity>
      <activity-alias>
         <intent-filter>...</intent-filter>
     <meta-data />
      </activity-alias>
      <service>
          <intent-filter>...</intent-filter>
      <meta-data />
      </service>
      <receiver>
         <intent-filter>...</intent-filter>
     <meta-data />
      </receiver>
      <provider>
          <grant-uri-permission/>
      <meta-data />
      <path-permission />
      </provider>
      <uses-library />
  </application>
</manifest>

如下列表包含所有可以出现在manifest文件中的元素,按字母顺序:

<action>
<activity>
<activity-alias>
<application>
<category>
<data>
<grant-uri-permission>
<instrumentation>
<intent-filter>
<manifest>
<meta-data>
<permission>
<permission-group>
<permission-tree>
<provider>
<receiver>
<service>
<supports-screens>
<uses-configuration>
<uses-feature>
<uses-library>
<uses-permission>
<uses-sdk>

注意:这些是仅有的合法元素—-不可以自己添加元素和属性.

文件介绍

此段描述约定和规则,通常应用到manifest文件所有元素和属性上的.

元素:

仅<manifest> 和 <application> 元素是必须的.它们必须存在且仅出现一次.大多出其他元素可以出现多次或完全不出现.然而,至少它们中的一些存在,在manifest文件变为有用之前.
如果一个元素包含所有任何的,它包含其他元素.所有值设置通过属性,不是元素的数据字符.
相同等级的元素通常是无序的.例如:<activity>,<provider>,和<service>元素可以按任何顺序混合.有两个关键的例外规则:
<activity-alias>元素必须紧随在它将要别名的<activity>之后
<application>元素必须是在<manifest>元素中的最后一个元素.也就是说,</application>关闭标签必须立即出现在</manifest>关闭标签前.

属性:

按正常的意义上,所有属性都是可选的.然而,有一些属性必须被指定,让元素完成它的目标.使用文档作为导引.对于真正的可选属性,它有一个默认值或状态,当不存在于规定中时.
除了根元素的一些属性,所有属性名以android:前缀开始.例如,android:alwaysRetainTaskState.因为前缀是唯一的,文档通常忽略它,当按名称提及到属性时.

声明类名:

很多元素对应Java对象,包括应用它本身的元素(<application>元素),并且它的主要的组件:activities(<activity>),services(<service>),broadcast receivers(<receivers>),和content proivders(<provider>).
如果你定义一个子类,如你几乎总是用的组件类(Activity,Service,BroadcastReceiver,和ContentProvider),子类被声明通过一个name属性.名字必须包含全包名称.例如:一个Service子类可能被声明如下:

<manifest ...>
   <application>
          <service android:name="com.example.project.SecretService"...>
          </service>
   </application>
</manifest>

然而,如果字符串的第一个字符是一个句号,应用的包名(如由<manifest>元素指定的包属性)被添加到字符串.如下分配等同于上面的显示.

<manifest package="com.example.project"...>
        <application ...>
         <service android:name=".SecretService"...>
         </service>
    </application>
</manifest>

当开始一个组件,Android系统创建一个命名的子类实例.如果一个子类没有指定,它创建一个基类实例.

多值:

如果多于一个值被指定,元素大多总是重复的,而不是多值被列在一个单一的元素中.例如,一个inent filter
可以列出多个actions:

<intent-filter ...>
    <action android:name="android.intent.action.EDIT"/>
    <action android:name="android.intent.action.INSERT"/>
    <action android:name="android.intent.action.DELETE"/>
    ....
</intent-filter>

资源值

一些属性有值可以显示给用户,如一个activity的一个标签和一个图标.这些属性的值应该被本地化和从一个资源或主题设置.资源值按如下格式表示:
@[package:]type/name
可以忽略package名,如果资源随着应用在相同包. type是资源的类型,如string或drawable,并且name是表示指定资源的名字.此是例子:
<activity android:icon="@drawable/smallPic" ...>
来自于主题的值按相似的表示,但用?替代@初始化:
?[package:]type/name
字符串值:
当一个属性值是一个字符串,必须用双反斜杠(\\)去转换字符,如\\n用于一个新行或\\uxxxx用于一个Unicode字符.

文件特性

接下来的段描述一些反映在manifest文件中的Android特性的方式.

Intent filters

一个应用的核心组件,如它的activities,services,和broadcast receivers由intents激活.一个intent是
一个信息组合(一个Intent对象),描述一个需要的action,包括要执行的数据,应该执行行为的组件的类型,和其他相关的指令.Android系统放置一个可以响应intent的合适组件,启动组件的新实例,如果需要,并且传递它Intent对象.
组件通知intents类型,它们能响应通过intent filters.由于Android系统必须知道一个组件可以处理的intent,在它启动组件前,intent filters被指定在元素中.一个组件可以有任意数量的filters,每一个描述一个不同的能力.
一个intent明确命名要激活的一个目标组件,因此filter不能扮演角色.一个intent没有指定激活组件的一个目标名,仅当它可传递一个组件的过滤器.
对于信息,关于如何Intent对象被测试依赖于intent过滤器,参阅Intents和Intent Filters文档
[https://developer.android.com/guide/components/intents-filters.html]

图标和标签

许多元素有icon和label属性,用于小图标和文本标签显示给用户.一些有描述属性用于长的,解释性的文本,可以显示在屏幕上.例如,<permission>元素有所有这三种属性,因此当用户被要求是否获取应用要求的权限时,一个图标表示权限,权限名,和它的必要性描述全都呈现给用户.

在任何情况下,图标和标签被设置在包含元素中,变为默认icon和label设置,用于所有包含的子元素.因此,图标和标签被设置在<application>元素中的,是默认的图标和标签用于应用组件的每个元素.类似,图标和标签被设置用于一个组件,如<activity>元素,是默认设置用于每个组件<intent-filter>元素.如果<application>元素设置一个标签,但一个activity和它的intent filter没有,应用标签同时被作为activity和intent-filter的标签.

图标和标签被设置用于intent-filter表示一个组件,无论组件是否被呈现给用于,并填充功能有filter通知.例如:一个有android.intent.action.MAIN和android.intent.category.LAUNCHER设置的过滤器通知一个activity作为启动应用的.即,应该被显示在应用启动器中.被设置在过滤器中图标和标签被显示在启动器中.

权限

permission是一个限制访问设备部分代码或数据的约束条件.限制被强加到保护的关键数据和代码,可能被滥用去曲解或毁坏用户体验.

每个权限由一个唯一的标签标识.通常标签指示限制的行为.这有一些权限由Android定义:
android.permission.CALL_EMERGENCY_NUMBERS
android.permission.READ_OWNER_DATA
android.permission.SET_WALLPAPER
android.permission.DEVICE_POWER
一个特性仅由一个权限保护.

如果一个应用需要访问一个由权限保护的特性,它必须声明它要求的权限用<uses-permission>元素在manifest中.当应用被安装到设备,安装者决定是否获取请求的权限,通过检查作者签名的证书和,在一些情况下,询问用户.如果权限被获取,应用可以使用保护的权限.如果没有,它尝试去访问这些特性是被没有任何提示给用户.

应用可以用权限保护它自己的组件.它可以利用Android定义的任何权限,如在android.Manifest.permission
[https://developer.android.com/reference/android/Manifest.permission.html] 中列出的,或由其他应用声明的.
它也可以定义它自己的.一个新权限被定义用<permission>元素.例如:一个activity可以按如下保护:

<manifest ...>
    <permission android:name="com.example.project.DEBIT_ACCT"... />
    <uses-permission android:name="com.example.project.DEBIT_ACCT" />
    ...
    <application ...>
        <activity android:name="com.example.project.FreneticActivity"
              android:permission="com.example.project.DEBIT_ACCT"
          ...>
    </activity>
    </application>
</manifest>

注意,在此例子中,DEBIT_ACCT权限不仅由<permission>元素声明,它的使用也要求有<uses-permission>元素.必须要求它使用为了其他应用组件去启动保护的activity,即使保护是应用自己强加的.

如果,在上面显示的相同例子中,permission属性被设置到权限,在其他地方声明,如android.permission.CALL_EMERGENCY_NUMBERS,它不必去再一次声明<permission>元素.然而,它仍必须要求使用<uses-permission>.
<permission-tree>元素声明一组权限的名字空间,由代码定义的,并且<permission-group>定义一个标签用于权限集合,这些声明都在manifest中用<permission>元素,并且这些声明在其他地方.这影响仅对权限如何被分组,当呈现给用户时.<permission-group>元素不能指定属于组的权限,但它给组一个名字.可以放置一个权限在组中,通过分配组名到<permission>元素permissionGroup属性.

库

每个应用链接依赖Android默认库,这包括用于编译应用的基本包(公共类如Activity,Service,Intent,View,Button,Application,和ContentProvider).

然而,一些包驻留在它们自己的库中.如果应用使用代码从任何这些包,它必须明确要求链接依赖它们.manifest必须包含一个分离的<uses-library>元素去命名每个库.可以找到库名在包文档中.
[packages/apps/Gallery2/AndroidManifest.xml]

AndroidManifest文件详解 Android Manifest文件是每个应用的核心配置文件,主要功能包括:声明应用包名和版本号、注册四大组件(Activity/Service/BroadcastReceiver/ContentProvider)、管理权限配置。文件采用XML结构,包含manifest根节点、application应用配置和组件声明等关键部分。最佳实践强调包名唯一性、最小权限原则、合理设置启动模式和进程隔离,并注意组件导出控制和版本兼容性。 阅读详情

相关推荐

安卓开发官方文档

安卓开法的官方文档,挺完整的,我自己也在用。是英文的,还有源代码可以查阅,很强大,推荐给大家

Android官方文档中文版

Android 简介 要了解应用的工作原理,请从应用基础知识开始入手。 要立即开始编码,请仔细阅读构建您的第一个应用。 Android 提供了一个内容丰富的应用框架,支持您在 Java 语言环境中为移动设备开发创新应用和游戏。在左侧导航窗格列出的文档中,提供了有关如何使用各种 Android API 开发应用的详细信息。 如果您是 Android 应用开发新手,则需了解以下有关 Andro...

WhiteNebula的博客 5万+

Android官方中文文档

Android官方中文文档,Application Fundamentals

android Fragment(Android官方文档中文版)

找到一套好的视频资料,紧跟大牛梳理好的知识框架进行学习。多练。(视频优势是互动感强,容易集中注意力)你不需要是天才,也不需要具备强悍的天赋,只要做到这两点,短期内成功的概率是非常高的。对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。找到一套好的视频资料,紧跟大牛梳理好的知识框架进行学习。多练。(视频优势是互动感强,容易集中注意力)你不需要是天才,也不需要具备强悍的天赋,只要做到这两点,短期内成功的概率是非常高的。

2401_84123026的博客 1492

AndroidAPI文档完整版

涵盖官方文档和带搜索功能的API文档

快速上手springboot+vue的前后端分离项目

使用webStorm新建项目后,把 .lock文件删除后项目运行才不报错,配置文件 vue.config.js 中加入 lintOnSave: false 关闭eslint语法检测。在多层嵌套的父子组件之间传递状态已经十分麻烦,而Vue更是没有为兄弟组件提供直接共享数据的办法。基于这个问题,许多框架提供了解决方案——使用全局的状态管理器,将所有分散的共享数据交由状态管理器保管,Vue也不例外。其中一种解决CORS 的方法, 在springboot项目中跨域的方法或类加上@CrossOrigin注解。

m0_61950264的博客 1908

Unity打包Wave VR项目时的AndroidManifest.xml设置

Unity打包Wave VR项目时的AndroidManifest.xml设置官方文档文档文档位置 官方文档 具体的修改设置,在官方文件中都有,直接上链接,我就不再多余赘述。 相关的官方文档:https://hub.vive.com/storage/docs/zh-cn/ConfigureAppCapabilities.html 文档 文档修改后的内容如下: <?xml version="1...

天富儿的博客 1322

使用 EasyExcel 实现 百万级数据导入导出

在项目开发中往往需要使用到数据的导入和导出,导入就是从Excel中导入到DB中,而导出就是从DB中查询数据然后使用POI写到Excel上。大数据的导入和导出,相信大家在日常的开发、面试中都会遇到。很多问题只要这一次解决了,总给复盘记录,后期遇到同样的问题就好解决了。好啦,废话不多说开始正文!1.如此大批量数据的导出和导入操作,会占用大量的内存实际开发中还应限制操作人数。2.在做大批量的数据导入时,可以使用jdbc手动开启事务,批量提交。

houxian1103的博客 2702

Android AndroidManifest 文件内标签及属性

adb restore 容许用户指定一个恢复的数据来源(即备份的应用数据)来恢复应用程序数据的创建。因此,当一个应用数据被备份之后,用户即可在其他 Android 手机或模拟器上安装同一个应用,以及通过恢复该备份的应用数据到该设备上,在该设备上打开该应用即可恢复到被备份的应用程序的状态。允许用户备份系统应用和第三方应用的 apk 安装包和应用数据,以便在刷机或者数据丢失后恢复应用,用户即可通过 adb backup 和 adb restore 来进行对应用数据的备份和恢复。时,系统不会备份该应用的数据。

嗯... 2216

保姆级教程:2025新版JavPlayer 3.01整合修复版安装配置全流程(N卡/A卡/CPU通用)

本文提供2025新版JavPlayer 3.01整合修复版的保姆级安装配置教程,涵盖N卡、A卡和CPU环境。详细讲解硬件要求、分步安装流程、显卡优化配置及超分辨率模型选择,帮助用户高效完成视频修复任务。

weixin_42665255的博客 1897

【C# + HALCON 机器视觉】HALCON经典算子:光流法运动分析(optical_flow_mg)

摘要:本文面向智能监控人流统计需求,研究C#与HALCON集成开发中optical_flow_mg算子的应用。通过RTSP获取视频流,利用光流法计算运动矢量,结合形态学操作与区域筛选实现行人区域分割,最终完成人流量统计与热力图可视化。详细阐述ROI局部处理等性能优化策略、try-catch异常捕获机制及跨平台集成方案。实验表明,该系统检测准确率达93.6%,单帧处理时间42ms,为公共场所人流量统计提供了完整可行的技术方案。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1444

在AndroidManifest文件中注册

所有的活动都要在AndroidManifest.xml中进行注册才能生效。 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.activity"> <application android:allowBackup="true"

ll_j_21的博客 1546

整车电检工艺流程

本文是笔者在从事汽车行业智能制造领域过程,对于整车电检工艺流程的理解与总结。

qq_40664711的博客 1万+

如何用APKParser快速提取AndroidManifest.xml?3步轻松实现

APKParser是一款高效的Android APK解析工具,能够帮助开发者和测试人员轻松提取APK文件中的关键信息,其中提取AndroidManifest.xml文件是其核心功能之一。本文将介绍如何使用APKParser在3个简单步骤中完成AndroidManifest.xml的提取,让你无需复杂操作即可获取应用的配置信息。 ## 为什么选择APKParser提取AndroidManifest

gitblog_00488的博客 986

【AUTOSAR-IpduM】-2.2-创建并配置一个接收RX的(Multiplexed-I-PDU)多路复用

案列背景: 在CFG中配置一个发送TX的(Multiplexed-I-PDU)多路复用Frame。 目录 1 在Arxml中创建一个发送的多路复用Frame 2 CFG导入带多路复用Frame的ARXML 2.1 CFG中提示的错误Error 2.2 如何解决CFG中提示的错误Error 3 结尾 <--返回「Autosar_BSW高阶配置」总目录--> <--返回「Autosar_BSW高阶配置」专栏主页--> <--返回「个人博客」首页--&g..

「汽车电子助手」的博客 1571

BVH2SMPL 实战笔记

BVH2SMPL 实战笔记

jacke121的专栏 843

AndroidManifest.xml文件的重要信息

AndroidManifest.xml文件是Android应用的核心配置文件,它位于应用程序的根目录下(通常在文件夹中)。这个文件对于Android系统来说至关重要,因为它提供了关于应用程序的所有必要信息,包括应用程序的组件、权限要求、应用程序的配置信息等。在应用程序安装时,系统会依据此文件来确定应用程序的组件、权限需求,并展示给用户。因此,AndroidManifest.xml文件可以说是Android应用程序的“身份证”和“说明书”。

Dingdangr的博客 3446

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

AndroidManifest总结

一、AndroidManifest的文件 当创建工程时,一般情况下IDE都会自动在该工程的根目录下创建AndroidManifest的文件,而当编译工程打包apk时,该文件会一起被打包成apk,而这个文件是系统管理该apk的入口。个人认为在实际项目开发中,该AndroidManifest文件的主要作用有两点:一是向系统声明该app包含了哪种类型的组件,二是申请权限。 二、Android

Android 4908

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

[Android] AndroidManifest.xml 详解

【2】service生命周期:Service只继承了onCreate(),onStart(),onDestroy()三个方法,第一次启动Service时,先后调用了onCreate(),onStart()这两个方法,当停止Service时,则执行onDestroy()方法,如果Service已经启动了,当我们再次启动Service时,不会在执行onCreate()方法,而是直接执行onStart()方法。应用程序运行的进程名,它的默认值为元素里设置的包名,当然每个组件都可以通过设置该属性来覆盖默认值。

ykun089的博客 1万+

Unity设置默认AndroidManifest

不想每次打包都要导出安卓工程再去配置AndroidManifest,因此直接在unity默认的AndroidManifest上修改,这样只需要管插件部分就好了 Unity设置默认AndroidManifest 环境说明: 开发环境:mac Unity版本:2017.2.0f3 mac环境下Unity的AndroidManifest路径:Unity.app同级目录: PlaybackEngines...

u011134889的博客 8705

AndroidManifest详解

一、关于AndroidManifest.xml AndroidManifest.xml 是每个android程序中必须的文件。它位于整个项目的根目录,描述了package中暴露的组件(activities, services, 等等),他们各自的实现类,各种能被处理的数据和启动位置。 除了能声明程序中的Activities, ContentProviders, Services, 和Intent

robert的专栏 7040

android 查看 androidmanifest.xml,查看 AndroidManifest.xml文件

裝在Android手機中,用此apk看系統中已安裝應用的AndroidManifest.xml文件: View Codeprotected boolean configForPackage(String packageName) {if (packageName == null || packageName == "")packageName = "android";AssetManager i...

weixin_39781930的博客 1689

androidmanifest混淆

AndroidManifest 混淆的科普 在开发 Android 应用时,保护源代码的安全性是一个重要的课题。虽然 Java 和 Kotlin 的编译生成的字节码并不容易被直接理解,但 APK 文件中的其他信息,如 AndroidManifest.xml 文件,也可能成为攻击者分析应用的目标。为此,开发者需要对其进行混淆...

weixin_37069487的博客 337

AndroidManifest.xml文件解析

在Java项目中解析AndroidManifest.xml文件,你可以使用多种库来解析XML文件,如(Java自带的XML解析器)或者第三方库如JDOMDOM4J, 或者Jsoup(尽管Jsoup主要用于HTML,但也可以用于XML)。不过,对于标准的XML解析,使用Java自带的和XPath是一个很好的选择,因为它既强大又灵活。以下是一个简单的示例,展示如何使用Java的和XPath。

2301_78976656的博客 1576
上一篇: Java并发之ForkJoin
下一篇: linux命令(shell)
ProgramResearch
博客等级 码龄11年 0粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值