Android复习(三)清单文件中的元素——>grant-uri-permission、instrumentation、intent-filter、manifest、meta-data
<grant-uri-permission>
- 语法:
-
<grant-uri-permission android:path="string"
android:pathPattern="string"
android:pathPrefix="string" /> - 包含于:
<provider>- 说明:
- 指定父内容提供程序有权访问的应用数据的子集。数据子集由
content:URI 的路径部分指示。(URI 的权威部分标识内容提供程序。)通过授予权限,可以使通常无权访问其数据的提供程序的客户端能够一次克服该限制。如果内容提供程序的
grantUriPermissions属性为“true”,则可以为提供程序权限下的任何数据授予权限。不过,如果该属性为“false”,则只能向此元素指定的数据子集授予权限。提供程序可以包含任意数量的<grant-uri-permission>元素。每个元素只能指定一个路径(只能是三个可能属性中的一个)。如需了解权限是如何授予的,请参阅
<intent-filter>元素的grantUriPermissions属性。 - 属性:
-
android:pathandroid:pathPrefixandroid:pathPattern- 标识可向其授予权限的一个或多个数据子集的路径。
path属性指定完整路径;只能授予对由该路径标识的特定数据子集的相应权限。pathPrefix属性指定路径的初始部分;可以授予对路径共有该初始部分的所有数据子集的相应权限。pathPattern属性指定完整路径,但可以包含以下通配符:- 星号(“
*”)匹配出现零次到多次的紧邻前面的字符的一个序列。 后跟星号的句点(“
.*”)匹配零个或多个字符的任意序列。
由于在从 XML 读取字符串时(在将其解析为模式之前)将“
\”用作转义字符,因此您需要进行双重转义:例如,字面量“*”将编写为“\\*”,字面量“”将编写为“\\\\”。这基本上与采用 Java 代码构造字符串时需要编写的内容一样。如需详细了解这些类型的模式,请参阅
PatternMatcher类中的PATTERN_LITERAL、PATTERN_PREFIX和PATTERN_SIMPLE_GLOB的说明。 - 星号(“
<instrumentation>
- 语法:
-
<instrumentation android:functionalTest=["true" | "false"]
android:handleProfiling=["true" | "false"]
android:icon="drawable resource"
android:label="string resource"
android:name="string"
android:targetPackage="string"
android:targetProcesses="string" /> - 包含于:
<manifest>- 说明:
- 声明用于监控应用与系统交互的
Instrumentation类。Instrumentation 对象在应用的所有组件之前进行实例化。 - 属性:
-
android:functionalTest- Instrumentation 类是否应作为功能测试运行。如果应该,则设为“
true”;如果不应该,则设为“false”。默认值为“false”。 android:handleProfiling- Instrumentation 对象是否负责开启和关闭分析。如果该对象决定何时开始和停止分析,则设为“
true”;如果在该对象的整个运行过程中持续进行分析,则设为“false”。如果值为“true”,可让该对象将分析目标设定为一组特定的操作。默认值为“false”。 android:icon- 一个表示 Instrumentation 类的图标。必须将此属性设为对可绘制资源的引用。
android:label- Instrumentation 类的用户可读标签。可以将该标签设为原始字符串或对字符串资源的引用。
android:nameInstrumentation子类的名称。此名称应该是一个完全限定类名(如“com.example.project.StringInstrumentation”)。不过,作为一种简写形式,如果名称的第一个字符是句点,则会将其附加到<manifest>元素中指定的软件包名称。没有默认值。必须指定相应名称。
android:targetPackageInstrumentation对象将针对哪个应用运行。应用由通过<manifest>元素在其清单文件中分配的软件包名称进行标识。android:targetProcesses-
Instrumentation对象将针对哪些进程运行。如果以逗号分隔列表的形式列出了进程,表示将针对这些特定的进程运行插桩测试。如果值为"*",表示将针对在android:targetPackage中定义的应用的所有进程运行插桩测试。如果未在清单中提供此值,将仅针对在
android:targetPackage中定义的应用的主进程运行插桩测试。此属性是在 API 级别 26 中添加的。
<intent-filter>
- 语法:
-
<intent-filter android:icon="drawable resource"
android:label="string resource"
android:priority="integer" >
. . .
</intent-filter> - 包含于:
<activity><activity-alias><service><receiver>- 必须包含:
<action>- 可包含:
<category><data>- 说明:
- 指定 Activity、服务或广播接收器可以响应的 Intent 类型。Intent 过滤器声明其父组件的功能 - Activity 或服务可执行哪些操作,以及接收器可处理哪些类型的广播。它让组件可以接收所通告类型的 Intent,同时过滤掉对组件没有意义的 Intent。
过滤器的大部分内容由它的
<action>、<category>和<data>子元素进行描述。如需详细了解过滤器,请参阅一篇单独的文档 - Intent 和 Intent 过滤器,以及简介中的 Intent 过滤器部分。
- 属性:
-
android:icon- 一个表示父 Activity、服务或广播接收器的图标,在将该组件以具备过滤器所描述功能的形式呈现给用户时显示。
必须将此属性设为对包含图片定义的可绘制资源的引用。默认值为父组件的
icon属性设置的图标。如果父组件未指定图标,则默认值为<application>元素设置的图标。如需详细了解 Intent 过滤器图标,请参阅简介中的图标和标签。
android:label- 父组件的用户可读标签。将相应组件以具备过滤器所描述功能的形式呈现给用户时,将使用此标签(而不是父组件设置的标签)。
应将标签设为对字符串资源的引用,以便可以像界面中的其他字符串一样进行本地化。不过,为了方便您开发应用,也可以将其设为原始字符串。
默认值为父组件设置的标签。如果父组件未指定标签,则默认值为
<application>元素的label属性设置的标签。如需详细了解 Intent 过滤器标签,请参阅简介中的图标和标签。
android:priority- 就处理过滤器所描述类型的 intent 而言,应该为父组件指定的优先级。此属性对 Activity 和广播接收器都有意义:
- 它说明了某个 Activity 对与过滤器匹配的 Intent 的响应能力,这是相对于也可以响应该 Intent 的其他 Activity 的响应能力。当 Intent 可由优先级不同的多个 Activity 处理时,Android 只会将优先级值较高的 Activity 视为 Intent 的潜在目标。
它控制按什么顺序执行广播接收器以接收广播消息。优先级值越高,调用顺序越靠前。(该顺序仅适用于同步消息;对于异步消息,系统会忽略该顺序。)
只有在您确实需要对接收广播施加特定顺序或想要强制 Android 优先选用某个 Activity 时,才能使用此属性。
值必须是一个整数,如“
100”。数值越高,优先级也就越高。默认值为 0。在某些情况下,系统会忽略请求的优先级,并将值限定为
0。此类情况发生在:- 非特权应用请求任何大于 0 的优先级时
- 特权应用为
ACTION_VIEW、ACTION_SEND、ACTION_SENDTO或ACTION_SEND_MULTIPLE请求大于 0 的优先级时
另请参阅
setPriority()。 android:order- 当多个过滤器匹配时应按什么顺序处理过滤器。
order与priority的不同之处在于,priority在多个应用间应用,而 可消除单个应用中多个匹配的过滤器的歧义。当多个过滤器可以匹配时,请改用定向 Intent。
值必须是一个整数,如“
100”。数值越高,匹配顺序越靠前。默认值为0。此属性是在 API 级别 28 中引入的。
<manifest>
- 语法:
-
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="string"
android:sharedUserId="string"
android:sharedUserLabel="string resource"
android:versionCode="integer"
android:versionName="string"
android:installLocation=["auto" | "internalOnly" | "preferExternal"] >
. . .
</manifest>
- 包含于:
- 无
- 必须包含:
<application>- 可包含:
<compatible-screens><instrumentation><permission><permission-group><permission-tree><supports-gl-texture><supports-screens><uses-configuration><uses-feature><uses-permission><uses-permission-sdk-23><uses-sdk>
- 说明:
- AndroidManifest.xml 文件的根元素。它必须包含
<application>元素并指定xmlns:android和package属性。 - 属性:
-
xmlns:android- 定义 Android 命名空间。此属性应始终设置为“
http://schemas.android.com/apk/res/android”。 package- Android 应用的 Java 语言样式的完整软件包名称。此名称可以包含大写或小写字母(从“A”到“Z”)、数字和下划线(“_”)。不过,各个软件包名称部分只能以字母开头。
将应用构建为应用软件包 (APK) 时,构建系统使用
package属性执行以下两个操作:- 它将此名称用作应用生成的
R.java类(用于访问应用资源)的命名空间。例如,如果将
package设置为"com.example.myapp",则R类在com.example.myapp.R处创建。 - 它使用此名称解析清单文件中声明的任何相关类名称。
例如,如果将
package设置为"com.example.myapp",则声明为<activity android:name=".MainActivity">的 Activity 会解析为com.example.myapp.MainActivity。
此名称不仅是应用进程的默认名称(请参阅
<application>元素的process属性),还是您的 Activity 的默认任务相关性(请参阅<activity>元素的taskAffinity属性)。此名称还表示应用 ID,该 ID 必须是通用唯一 ID,您才能在 Google Play 中发布应用。不过,在 APK 构建流程快要结束时,构建工具会使用
build.gradle文件(Android Studio 项目使用的文件)中的applicationId属性替换package名称。您只要确保清单的package名称与构建文件的applicationId保持一致,就无需担心。但如果这两个值不同,您应该阅读如何设置应用 ID,了解“软件包名称”和“应用 ID”之间的区别。为避免与其他开发者发生冲突,您应将互联网域名所有者(反过来)用作软件包名称的前缀。例如,由 Google 发布的应用以
com.google开头。注意:Google Play 禁止使用
com.example和com.android命名空间。如果您想在发布应用后更改软件包名称,可以这样做,但您必须保持
applicationId不变。applicationId定义了应用在 Google Play 上的唯一身份。因此,如果您对其进行更改,则该 APK 就会被视为其他应用,而且使用之前版本的用户将不会收到更新。如需了解详情,请参阅如何设置应用 ID。 - 它将此名称用作应用生成的
android:sharedUserId-
API 级别 29 中已弃用此常量。
共享用户 ID 会在软件包管理器中导致具有不确定性的行为。因此,强烈建议您不要使用它,并且我们在未来的 Android 版本中会将其移除。相反,应用应使用适当的通信机制(例如服务和内容提供程序),在共享组件之间实现互操作性。与其他应用共享的 Linux 用户 ID 的名称。默认情况下,Android 会为每个应用分配其唯一用户 ID。不过,如果针对两个或多个应用将此属性设置为相同的值,则这些应用都将共享相同的 ID,前提是这些应用的证书集完全相同。具有相同用户 ID 的应用可以访问彼此的数据,如果需要的话,还可以在同一进程中运行。
android:targetSandboxVersion- 此应用要使用的目标沙盒。沙盒版本号越高,安全级别就越高。其默认值为
1;您也可以将其设置为2。将此属性设置为2可将应用切换到其他 SELinux 沙盒。以下限制适用于 2 级沙盒:
- 网络安全配置中的
usesCleartextTraffic的默认值为 false。 - 不允许共享 uid。
对于以 Android 8.0(API 级别 26)或更高版本为目标平台的 Android 免安装应用,此属性必须设置为 2。您可以在应用的已安装版本中将沙盒级别设置为限制比较宽松的级别 1,但如果这样做,您的应用就不会将免安装应用中的应用数据保留到应用的已安装版本。您必须将已安装应用的沙盒值设置为 2,才能将免安装应用中的数据保留到已安装版本。
应用安装后,您只能将其目标沙盒值更新为更高的值。要对目标沙盒值进行降级,您必须卸载该应用,并将其替换为其清单包含此属性的更低值的版本。
- 网络安全配置中的
android:sharedUserLabel-
API 级别 29 中已弃用此常量。
共享用户 ID 会在软件包管理器中导致具有不确定性的行为。因此,强烈建议您不要使用它,并且我们在未来的 Android 版本中会将其移除。相反,应用应使用适当的通信机制(例如服务和内容提供程序),在共享组件之间实现互操作性。共享用户 ID 的用户可读标签。此标签必须设置为对字符串资源的引用;它不能是原始字符串。
此属性在 API 级别 3 中引入。仅当同时设置了
sharedUserId属性时,此属性才有意义。 android:versionCode- 内部版本号。此数字仅用于确定某个版本是否比另一个版本更新:数字越大,则版本越新。这不是向用户显示的版本号;此数字由
versionName属性设置。该值必须设置为整数,例如“100”。您可以根据需要定义该值,只要每个连续版本的数字都比较大。例如,它可以是版本号。或者,您可以通过分别以较低和较高的 16 位对“x”和“y”进行编码,将“x.y”格式的版本号转换为整数。或者,您只需在每次发布新版本时将该数字增加 1 即可。
android:versionName- 向用户显示的版本号。此属性可设置为原始字符串或对字符串资源的引用。除了向用户显示之外,该字符串没有其他用途。
versionCode属性包含在内部使用的重要版本号。 android:installLocation- 应用的默认安装位置。
接受以下关键字字符串:
值 说明 “ internalOnly”应用必须仅安装在内部设备存储空间中。如果设置此值,则应用一定不会安装在外部存储空间中。如果内部存储空间已满,则系统将不会安装应用。如果您没有定义 android:installLocation,则这也是默认行为。“ auto”应用可以安装在外部存储空间中,但默认情况下,系统会将应用安装在内部存储空间中。如果内部存储空间已满,系统会将应用安装在外部存储空间中。安装后,用户可以通过系统设置将应用移至内部或外部存储空间。 “ preferExternal”应用更倾向于安装在外部存储空间(SD 卡)中。无法保证系统会遵循该请求。如果外部媒体不可用或已满,则应用可能会安装在内部存储空间中。安装后,用户可以通过系统设置将应用移至内部或外部存储空间。 注意:默认情况下,您的应用将安装在内部存储空间中,除非您将此属性定义为“
auto”或“preferExternal”,否则应用不会安装在外部存储空间中。应用安装在外部存储空间中时:
.apk文件保存到外部存储空间,但所有应用数据(如数据库)仍保存在内部设备内存中。- 用于保存
.apk文件的容器使用密钥进行加密,该密钥可让应用仅在安装它的设备上运行。(用户无法将 SD 卡转移到其他设备并使用该卡上安装的应用。)不过,同一设备可以使用多个 SD 卡。 - 根据用户的请求,应用可以移至内部存储空间。
用户还可以请求将应用从内部存储空间移至外部存储空间。不过,如果此属性设置为
internalOnly(默认设置),系统将不允许用户将应用移至外部存储空间。如需详细了解如何使用此属性(包括如何保持向后兼容性),请阅读应用安装位置。
<meta-data>
- 语法:
-
<meta-data android:name="string"
android:resource="resource specification"
android:value="string" /> - 包含于:
<activity><activity-alias><application><provider><receiver><service>- 说明:
- 可以向父组件提供的其他任意数据项的名称值对。一个组件元素可以包含任意数量的
<meta-data>子元素。所有这些子元素的值收集到一个Bundle对象,并且可作为PackageItemInfo.metaData字段提供给组件。普通值通过
value属性指定。不过,要将资源 ID 指定为值,请改为使用resource属性。例如,以下代码会将@string/kangaroo资源中存储的任何值分配给“zoo”名称:<meta-data android:name="zoo" android:value="@string/kangaroo" />
另一方面,使用
resource属性会为资源的数字 ID 分配“zoo”,而不是资源中存储的值:<meta-data android:name="zoo" android:resource="@string/kangaroo" />
强烈建议不要提供相关数据作为多个单独的
<meta-data>条目。相反,如果您有要与组件相关联的复杂数据,请将其存储为资源,并使用resource属性告知组件其 ID。 - 属性:
-
android:name- 该项的唯一名称。要确保此名称具有唯一性,请使用 Java 样式的命名惯例,例如“
com.example.project.activity.fred”。 android:resource- 对资源的引用。资源的 ID 是分配给该项的值。可以通过
Bundle.getInt()方法从元数据 Bundle 中检索 ID。 android:value- 分配给该项的值。下表列出了可以指定为值的数据类型以及组件用于检索这些值的 Bundle 方法:
类型 Bundle 方法 字符串值,使用双反斜线 ( \\) 转义字符,例如“\\n”和“\\uxxxxx”表示 Unicode 字符。getString()整数值,例如“ 100”getInt()布尔值,“ true”或“false”getBoolean()颜色值,格式为“ #rgb”、“#argb”、“#rrggbb”或“#aarrggbb”getInt()浮点值,例如“ 1.23”getFloat()
Android复习(三)清单文件中的元素——>grant-uri-permission、instrumentation、intent-filter、manifest、meta-data的更多相关文章
- [android]清单文件中MAIN与LAUNCHER的区别
原文:[android]清单文件中MAIN与LAUNCHER的区别 MAIN 和 LAUNCHER,之前一直不注意这两个有区别,写程序的时候都放到一个filter中,前两天面试问到了,总结一下: MA ...
- Android Developer:合并清单文件
使用Android Studio而且基于Gradle构建.每一个App能在多个位置包括清单文件,比如在src/main文件夹下productFlavor.库.Android ARchive(AAR) ...
- python 从2个文件中提取不相同的内容并输出到第三个文件中
#-*- coding: UTF-8 -*- import re import sys import os str1=[] str2=[] str_dump=[] fa=open("A. ...
- Android软键盘在清单文件中所有配置含义
android:windowSoftInputMode 活动的主窗口如何与包含屏幕上的软键盘窗口交互.这个属性的设置将会影响两件事情: 1> 软键盘的状态——是否它是隐藏或显示——当活动 ...
- (备忘)android清单文件中<meta-data>标签,以及<intent-filter>下的<data>标签及其他标签
1.metadata可以写在application下也可以写在activity下,作为全局或activity内共享的数据 以键值对形式保存 <meta-data android:name=&qu ...
- Android ---------- 清单文件中Activity常规设置
<activity android:name="xxxxx" android:alwaysRetainTaskState="true" android:c ...
- Android 的四大组件都需要在清单文件中注册吗?
Activity . Service . ContentProvider 如 果 要 使 用 则 必 须 在 AndroidManifest.xml 中 进 行 注 册 , 而BroadcastRec ...
- struts.xml文件中package元素的各大属性讲解
Struts2中的包: Struts2使用包来组织Action,将Action放在包下来定义,通过package元素配置一个包,通过package的子元素action来定义一个Action: Stru ...
- Android笔记——在布局文件中插入另一个布局文件
假如有一个布局文件A.xml想把另外一个布局文件B.xml引进其布局,则可以通过下面的代码 <include layout="@layout/B" />
- 服务 Service 清单文件中可设置的属性
PS:对于一个Service,在没有在AndroidManifest.xml中声明的情况下使用时,不会像Activity那样直接崩溃并提示找不到Activity. 对于显式Intent启动的Servi ...
随机推荐
- 【Windows】使用Dism++打包系统
目的: 封装自己装好的操作系统,以便后续系统重装提高效率 纯净原生系统需要自己搭建开发环境,许多系统库也没有添加,费劲 网络下的整合包总是参杂些垃圾广告,不如自己封装一个 思路: 利用VMware虚拟 ...
- vue导入项目缺少依赖‘node_modules’
从git下载好的项目,导入vue时提示'node_modules'依赖 则需要在你的项目包下面找是否有package-lock.json文件,如: 如果有,但是依旧报错,直接删除package-loc ...
- Electronics投稿指南
原地址: https://m.peipusci.com/news/10593.html Electronics的自引率先增后减,2023年度为10.3%.
- python 中 ctypes 的使用尝试
最近在看Python的性能优化方面的文章,突然想起ctypes这个模块,对于这个模块一直不是很理解,不过再次看完相关资料有了些新的观点. ctypes 这个模块个人观点就是提供一个Python类型与C ...
- linux终端如何加上时间,添加时间戳到终端提示?
方法: 在 .bashrc 文件中加入: export PROMPT_COMMAND="echo -n \[\$(date +%H:%M:%S)\\] " 这样便可以在每次输入命令 ...
- 【模板】最近公共祖先:LCA算法
LCA最近公共祖先 \[\begin{align} 要求 \ 给出一个树和他的根节点\text{root} \quad给出Q个询问 回答\text {LCA}(a,b) \end{align} \] ...
- 新员工一口气写完了这些C语言例子,领导给他转正了!
持续更新中... 很多想从事嵌入式Linux开发的老铁问一口君,有没有快速提升自己编程水平的小例子? 一口君根据自己多年工作经验,整理了一些基于Linux的c语言的非常实用的小例子, 这些例子在嵌入式 ...
- React 18 自定义 Hook 获取 useState 最新值
原理:通过同步更新 useRef 来获取最新值 // util.ts export const useRefState = (init: any = null) => { const [sta ...
- 每天那么多工作,我为什么能做到 "不忘事" ?
大家好,我是程序员鱼皮. 我相信很多朋友都遇到过丢失工作.或者忘记事情的情况,尤其是事情一多,就更容易遗漏:而如果在工作中你漏掉了某项任务,需要上级或同事重复提醒你,是很影响别人对你的印象的. 那么如 ...
- Conda 使用
简介 Conda 和 Anaconda.Miniconda 的关系 Conda 是一个包管理器及环境管理器. Anaconda 和 Miniconda 都是一种 Python 和 R 发行版,其包括了 ...