AndroidManifest.xml详解

合集下载

android 13 androidmanifest 权限申请规则

android 13 androidmanifest 权限申请规则

android 13 androidmanifest 权限申请规则(原创版)目录1.Android 13 概述2.AndroidManifest.xml 文件的作用3.权限申请规则4.权限请求处理的变化5.总结正文【Android 13 概述】Android 13 是谷歌推出的最新版本的 Android 操作系统。

它带来了许多新特性和改进,包括更好的隐私保护和用户控制。

在这个版本中,谷歌对 AndroidManifest.xml 文件中的权限申请规则进行了调整。

【AndroidManifest.xml 文件的作用】AndroidManifest.xml 是 Android 应用程序的清单文件,它包含了应用程序的基本信息和组件声明。

在 AndroidManifest.xml 中声明的权限,是应用程序在运行时需要的一种许可。

这些权限允许应用程序访问设备的某些功能或数据,例如访问通讯录、相机或存储。

【权限申请规则】在 Android 13 中,谷歌对权限申请规则进行了调整,以提高用户的隐私保护。

这些调整包括:1.合并权限:将多个权限合并为一个权限组,以减少应用程序所需的权限请求。

例如,相机和麦克风的权限现在合并为“相机和麦克风”权限组。

2.动态权限:允许应用程序在运行时请求敏感权限,而不是在安装时请求。

这使得用户能够更好地控制应用程序访问敏感数据的时机。

3.强制性权限:对于某些敏感权限,如通讯录和日历,应用程序必须在安装时获得用户的明确授权。

如果用户拒绝授权,应用程序将无法访问这些数据。

【权限请求处理的变化】在 Android 13 中,为了更好地保护用户隐私,谷歌对权限请求的处理方式进行了改进:1.权限请求对话框:当应用程序请求敏感权限时,系统会弹出一个对话框,询问用户是否授权该应用程序访问相关数据或功能。

2.权限管理器:Android 13 引入了一个新的权限管理器,用户可以在其中查看、管理和调整应用程序的权限。

AndroidStudio常见问题--AndroidManifest.xml覆盖问题

AndroidStudio常见问题--AndroidManifest.xml覆盖问题

AndroidStudio常见问题--AndroidManifest.xml覆盖问题问题如下D:\source-code\AndroidStudio\MyApplication\app\src\main\AndroidManifest.xmlError:(14, 9) Attribute application@icon value=(@drawable/ic_launcher) from AndroidManifest.xml:14:9Error:(14, 9) Execution failed for task ':app:processDebugManifest'.> Manifest merger failed : Attribute application@icon value=(@drawable/ic_launcher) from AndroidManifest.xml:14:9is also present at MyApplication:library:unspecified:18:9 value=(@drawable/icon)Suggestion: add 'tools:replace="android:icon"' to <application> element at AndroidManifest.xml:12:5 to override解决⽅法在app的AndroidManifest.xml中做如下修改:<manifest xmlns:android="/apk/res/android"xmlns:tools="/tools"package="com.leo.kang.demo"android:versionCode="1"android:versionName="1.0"><uses-sdkandroid:minSdkVersion="8"android:targetSdkVersion="18"/><applicationandroid:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme"tools:replace="android:icon, android:theme">注意两个地⽅:1. 在manifest节点加上:xmlns:tools="/tools"2. 在application 节点加上:tools:replace="android:icon, android:theme"Reference。

AndroidManifest.xml最全详解

AndroidManifest.xml最全详解

AndroidManifest.xml最全详解AndroidManifest.xml 是每个android程序中必须的⽂件,它位于整个项⽬的根⽬录。

我们每天都在使⽤这个⽂件,往⾥⾯配置程序运⾏所必要的组件,权限,以及⼀些相关信息。

⼀、概述: AndroidManifest.xml是Android应⽤的⼊⼝⽂件,它描述了package中暴露的组件(activities, services, 等等),他们各⾃的实现类,各种能被处理的数据和启动位置。

除了能声明程序中的Activities, ContentProviders, Services, 和Intent Receivers,还能指定permissions和instrumentation(安全控制和测试)。

⼆、结构图<?xmlversion="1.0"encoding="utf-8"?><manifest><uses-sdk/><uses-configuration/><uses-feature/><uses-permission/><permission/><permission-tree/><permission-group/><instrumentation/><supports-screens/><application><activity><intent-filter><action/><category/></intent-filter></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/></provider><uses-library/></application></manifest>三、详解1、Manifest:属性<manifest xmlns:android="/apk/res/android"package="com.somnus.yunyi"android:sharedUserId="string"android:sharedUserLabel="string resource"android:versionCode="integer"android:versionName="string"android:installLocation=["auto" | "internalOnly" | "preferExternal"] ></manifest>A、xmlns:androidB、package指定本应⽤内java主程序包的包名,它也是⼀个应⽤进程的默认名称C、sharedUserIdD、sharedUserLabel⼀个共享的⽤户名,它只有在设置了sharedUserId属性的前提下才会有意义E、versionCode是给设备程序识别版本(升级)⽤的必须是⼀个interger值代表app更新过多少次,⽐如第⼀版⼀般为1,之后若要更新版本就设置为2,3等等。

Android——Manifest.xml文件的作用

Android——Manifest.xml文件的作用

Android——Manifest.xml⽂件的作⽤每⼀个Android的APP都会有⼀个重要的⽂件,那就是下⾯截图中的Manifest⽂件,这个⽂件有很多作⽤,是整个应⽤的⼊⼝,接下来将详细讲解⼀下整体介绍:作为整个Android应⽤的⼊⼝,Manifest.xml 描述了package中暴露的组件,他们各⾃的实现类,各种能被处理的数据和启动位置。

出了四⼤组件的声明,还指定了app的⼀些权限(permission)和instrumentation(安全控制和测试)。

1. Manifest属性package:指定应⽤中java主程序的包名,这个也是整个应⽤程序默认的名称还有⼀些常⽤的可以加进去android:versionCode = "1" :版本号android:versionName="first version" :版本名字android:installLocation=["auto" | "internalOnly" | "preferExternal"] :⼏个选项,分别是auto⾃动选择安装位置,internalOnly必须安装在ROM上,preferExternal优先安装到SD卡上⾯去2. permission属性uses-sdk: 这⾥是对最⼩版本sdk的要求各种需要的permission权限都需要添加到⽂件中。

3. application属性:声明⼀个应⽤程序的组件及其属性(icon,label,permission等等)基本上⼤多数在⽣成project的时候就会默认⽣成,⼀般的开发者也不需要多管android:allowBackup: 允许⽤户通过adb backup和adb restore来进⾏对应数据的备份和恢复。

android:label:project的⼯程名字android:roundIcon: 现在android新建项⽬⼀般有两个图标,⼀个是icon(普通图标),⼀个是roundIcon(圆形图标)。

AndroidManifest.xml 文件讲解

AndroidManifest.xml 文件讲解

AndroidManifest.xml 文件AndroidManifest.xml是每一个应用都需要的文件,位于应用根目录下,它描述了程序包的全局变量, 包括暴露的应用组件(activities, services等等)和为每个组件的实现类,什么样的数据可以操作,以及在什么地方运行。

这个文件的一个重要方面就是是其中的intent过滤器(intent filters)。

这些过滤器描述了何时何种情况下让活动(activity)启动。

当一个activity(或是操作系统)想要执行一个动作,例如打开一个Web页或是打开一个联系人选取屏幕,它将会创建一个Intent对象。

该对象包含了很多几个描述符(descriptors),描述了你想做什么操作,你想处理什么数据,数据的类型,以及一些其他的信息。

Android将Intent对象中的信息与所有应用暴露的intent过滤器比较,找到一个最能恰当处理请求者要求的数据和动作(action)的activity。

关于intents的更多信息在Intent页可以找到。

除了声明应用的活动(Activities),内容管理器(Content Providers),服务(Services),和Intent 接收器(Intent Receivers),你也可以在AndroidManifest.xml文件中指定权限和instrumentation(安全控制和测试). 请查看AndroidManifest了解这个标签和他们的属性。

如下是一个简单的AndroidManifest.xml文件:∙几乎所有的AndroidManifest.xml 文件(同其他的Android文件一样)都会在其第一个元素(element)中包含一个命名空间的声明xmlns:android="/apk/res/android"。

该声明使标准Android属性在该文件中可用,这些属性为文件中的xml元素提供了大部分数据。

AndroidManifest文件详解

AndroidManifest文件详解

AndroidManifest.xml文件综合详解一,重要性AndroidManifest.xml是Android应用程序中最重要的文件之一。

它是Android程序的全局配置文件,是每个 android程序中必须的文件。

它位于我们开发的应用程序的根目录下,描述了package中的全局数据,包括package 中暴露的组件(activities, services, 等等),以及他们各自的实现类,各种能被处理的数据和启动位置等重要信息。

因此,该文件提供了Android系统所需要的关于该应用程序的必要信息,即在该应用程序的任何代码运行之前系统所必须拥有的信息。

一个典型的Android应用程序的结构如下图所示:二,主要功能它指定了该应用程序的Java包:该包名作为应用程序的一个独特标识。

它描述了应用程序组件:该应用程序由哪些activity,service,broadcast receiver和content provider组成。

它指定了实现每个组件的类以及公开发布它们的能力(例如,它们能持有哪个Intent信息)。

这些声明使Android系统知道这儿有什么组件以及在什么条件下它们可以被载入。

它决定那些进程将容纳应用程序组件。

它声明了本应用程序必须拥有哪些许可,以便访问API的被保护部分,以及与其他应用程序交互。

它也声明了其他应用程序在和该应用程序交互时需要持有的许可。

它列出了Instrumentation类,可以在应用程序运行时提供简档和其他信息。

这些声明仅当应用程序在开发和测试过程中被提供;它们将在应用程序正式发布之前被移除。

它声明了该应用程序所需的Android API的最小化水平。

它列出了该应用程序必须链接的库。

三,主要结构及规则下面列表显示了manifest文件的通常的结构以及它可以含有的元素。

每个元素,连同它的所有属性,会在各个单独的文档里进行充分的描绘。

<?xml version="1.0" encoding="utf-8"?><manifest> //根节点,描述了package中所有的内容<uses-permission /> //请求你的package正常运作所需赋予的安全许可。

Manifest.xml属性详解

Manifest.xml属性详解

Manifest.xml属性详解Manifest.xml下的⼀些属性定义和⽤法:----------------------------------------------------------------------------------------------------------------------------------android:allowTaskReparenting⽤法<application android:allowTaskReparenting="true/false"></application>是否允许activity更换从属的任务,⽐如从短信息任务切换到浏览器任务。

⽤来标记Activity能否从启动的Task移动到有着affinity的Task(当这个Task进⼊到前台时)——“true”,表⽰能移动,“false”,表⽰它必须呆在启动时呆在的那个Task⾥。

如果这个特性没有被设定,设定到<application>元素上的allowTaskReparenting特性的值会应⽤到Activity上。

默认值为“false”。

⼀般来说,当Activity启动后,它就与启动它的Task关联,并且在那⾥耗尽它的整个⽣命周期。

当当前的Task不再显⽰时,你可以使⽤这个特性来强制Activity移动到有着affinity的Task中。

典型⽤法是:把⼀个应⽤程序的Activity移到另⼀个应⽤程序的主Task中。

例如,如果e-mail中包含⼀个web页的链接,点击它就会启动⼀个Activity来显⽰这个页⾯。

这个Activity是由Browser应⽤程序定义的,但是,现在它作为e-mail Task的⼀部分。

如果它重新宿主到Browser Task⾥,当Browser下⼀次进⼊到前台时,它就能被看见,并且,当e -mail Task再次进⼊前台时,就看不到它了。

AndroidManifest.xml文件详解

AndroidManifest.xml文件详解

AndroidManifest.xml⽂件详解AndroidManifest.xml⽂件详解(⼀)每个应⽤程序在它的根⽬录中都必须要有⼀个AndroidManifest.xml⽂件。

这个清单把应⽤程序的基本信息提交给Android系统,在应⽤程序的代码能够运⾏之前,这个信息系统必须建⽴。

以下是清单⽂件要做的⼀些事情:1. ⽤Java包给应⽤程序命名。

这个包名是应⽤程序的唯⼀标识;2. 描述应⽤程序的组件---组成应⽤程序的Activity、Service、Broadcast Receiver以及Content Provider。

它要⽤每个组件的实现类来命名,并向外发布对应组件功能(例如,组件所能处理的Intent消息)。

这些声明会让Android系统了解应⽤程序中组件,以及这些组件被加载的条件。

3. 判断哪些进程是主应⽤程序组件。

4. 声明应⽤程序所必须的权限,以便能够访问被保护的API,以及能够跟其他应⽤程序进⾏交互。

5. 为了跟应⽤程序组件进⾏交互,还声明了其他要求有的权限。

6. 列出了能够提供应⽤程序运⾏时的分析和其他信息的Instrumentation类。

只有在开发和测试应⽤程序时才在清单⽂件中声明这些类,在应⽤程序被发布之前,要删除这些类。

7. 声明应⽤程序所要求的最⼩的Android API级别。

8. 列出应⽤程序必须链接的外部库。

Manifest⽂件的结构下图中包含了清单⽂件的⼀般性结构,并且包含所有能包含的元素。

每个元素所带有的全部元素会在它们各⾃的⽂档中介绍。

<?xml version="1.0" encoding="utf-8"?>. . .. . .. . .以下按字母顺序列出了清单⽂件中的所有元素,这些元素时Android系统法定元素,不能添加⾃定义的元素或属性。

AndroidManifest.xml⽂件详解(⼆)⽂件约定某些约定和规则普遍适⽤于清单中的所有元素和属性:元素只⽤<manifest>和<application>元素时必须的,⽽且这两个元素在⽂件中只能出现⼀次。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

用户是否能选择自行清除数据,默认为true,程序管理器包含一个选择允许用户清除数据。

当为true时,用户可自己清理用户数据,反之亦然B、android:allowTaskReparenting('true' or 'false')是否允许activity更换从属的任务,比如从短信息任务切换到浏览器任务。

关于此的更多内容请参考《Task和Activity相关的一些属性》C、android:backupAgent这也是Android2.2中的一个新特性,设置该APP的备份,属性值应该是一个完整的类名,如com.project.TestCase,此属性并没有默认值,并且类名必须得指定(就是个备份工具,将数据备份到云端的操作)D、android:debuggable这个从字面上就可以看出是什么作用的,当设置为true时,表明该APP在手机上可以被调试。

默认为false,在false的情况下调试该APP,就会报以下错误:Device XXX requires that applications explicitely declare themselves as debuggable in their manifest.Application XXX does not have the attribute 'debuggable' set to TRUE in its manifest and cannot be debugged.E、android:description/android:label此两个属性都是为许可提供的,均为字符串资源,当用户去看许可列表(android:label)或者某个许可的详细信息(android:description)时,这些字符串资源就可以显示给用户。

label应当尽量简短,之需要告知用户该许可是在保护什么功能就行。

而description可以用于具体描述获取该许可的程序可以做哪些事情,实际上让用户可以知道如果他们同意程序获取该权限的话,该程序可以做什么。

我们通常用两句话来描述许可,第一句描述该许可,第二句警告用户如果批准该权限会可能有什么不好的事情发生F、android:enabledAndroid系统是否能够实例化该应用程序的组件,如果为true,每个组件的enabled属性决定那个组件是否可以被enabled。

如果为false,它覆盖组件指定的值;所有组件都是disabled。

G、android:hasCode('true' or 'false')表示此APP是否包含任何的JAVA代码,默认为true,若为false,则系统在运行组件时,不会去尝试加载任何的APP代码一个应用程序自身不会含有任何的代码,除非内置组件类,比如Activity类,此类使用了AliasActivity类,当然这是个罕见的现象(在Android2.3可以用标准C来开发应用程序,可在androidManifest.xml中将此属性设置为false,因为这个APP本身已经不含有任何的JAVA代码了)H、android:icon这个很简单,就是声明整个APP的图标,图片一般都放在drawable文件夹下I、android:killAfterRestore是否保留状态不变,比如切换回home, 再从新打开,activity处于最后的状态。

比如一个浏览器拥有很多状态(当打开了多个TAB的时候),用户并不希望丢失这些状态时,此时可将此属性设置为true5.2、android:clearTaskOnLaunch比如P 是activity, Q 是被P 触发的activity, 然后返回Home, 重新启动P,是否显示Q5.3、android:configChanges当配置list发生修改时,是否调用onConfigurationChanged() 方法比如"locale|navigation|orientation".这个主要用来看手机方向改变的. android手机在旋转后,layout会重新布局, 如何做到呢? 正常情况下. 如果手机旋转了.当前Activity后杀掉,然后根据方向重新加载这个Activity. 就会从onCreate开始重新加载.如果你设置了这个选项, 当手机旋转后,当前Activity之后调用onConfigurationChanged() 方法. 而不跑onCreate方法等.5.4、android:excludeFromRecents是否可被显示在最近打开的activity列表里,默认是false5.5、android:exportedWhether or not the activity can be launched by components of otherapplications — "true" if it can be, and "false" if not. If "false", the activitycan be launched only by components of the same application or applicationswith the same user ID.The default value depends on whether the activity contains intent filters. Theabsence of any filters means that the activity can be invoked only by specifyingits exact class name. This implies that the activity is intended only forapplication-internal use (since others would not know the class name). So inthis case, the default value is "false". On the other hand, the presence of atleast one filter implies that the activity is intended for external use, so thedefault value is "true".This attribute is not the only way to limit an activity's exposure to otherapplications. You can also use a permission to limit the external entities thatcan invoke the activity (see the permission attribute).5.6、android:finishOnTaskLaunch当用户重新启动这个任务的时候,是否关闭已打开的activity,默认是false如果这个属性和allowTaskReparenting都是true,这个属性就是王牌。

Activity的亲和力将被忽略。

该Activity已经被摧毁并非re-parented5.7、android:launchMode5.8、android:multiprocess是否允许多进程,默认是false5.9、android:noHistory当用户从Activity上离开并且它在屏幕上不再可见时,Activity是否从Activity stack 中清除并结束。

默认是false。

设置为true的话,Activity就不会留下历史痕迹5.10、android:screenOrientationactivity显示的模式默认为unspecified:由系统自动判断显示方向landscape横屏模式,宽度比高度大portrait竖屏模式, 高度比宽度大user模式,用户当前首选的方向behind模式:和该Activity下面的那个Activity的方向一致(在Activity堆栈中的) sensor模式:有物理的感应器来决定。

如果用户旋转设备这屏幕会横竖屏切换nosensor模式:忽略物理感应器,这样就不会随着用户旋转设备而更改了5.11、android:stateNotNeededactivity被销毁或者成功重启时是否保存状态5.12、android:windowSoftInputModeactivity主窗口与软键盘的交互模式,可以用来避免输入法面板遮挡问题,Android1.5后的一个新特性。

这个属性能影响两件事情:【A】当有焦点产生时,软键盘是隐藏还是显示【B】是否减少活动主窗口大小以便腾出空间放软键盘各值的含义:【A】stateUnspecified:软键盘的状态并没有指定,系统将选择一个合适的状态或依赖于主题的设置【B】stateUnchanged:当这个activity出现时,软键盘将一直保持在上一个activity 里的状态,无论是隐藏还是显示【C】stateHidden:用户选择activity时,软键盘总是被隐藏【D】stateAlwaysHidden:当该Activity主窗口获取焦点时,软键盘也总是被隐藏的data属性<data android:host="string"android:mimeType="string"android:path="string"android:pathPattern="string"android:pathPrefix="string"android:port="string"android:scheme="string"/>【1】每个<data>元素指定一个URI和数据类型(MIME类型)。

它有四个属性scheme、host、port、path对应于URI的每个部分:scheme://host:port/pathscheme的值一般为"http",host为包名,port为端口号,path为具体地址。

如:http://com.test.project:200/folder/etc其中host和port合起来构成URI的凭据(authority),如果host没有指定,则port 也会被忽略要让authority有意义,scheme也必须要指定。

相关文档
最新文档