Android知识点回顾之Manifest文件-下篇

application

应用的声明。包含应用组件的声明和对组件有相关影响的属性声明。php

<application android:allowTaskReparenting=["true" | "false"] android:allowBackup=["true" | "false"] android:allowClearUserData=["true" | "false"] android:backupAgent="string" android:backupInForeground=["true" | "false"] android:banner="drawable resource" android:debuggable=["true" | "false"] android:description="string resource" android:directBootAware=["true" | "false"] android:enabled=["true" | "false"] android:extractNativeLibs=["true" | "false"] android:fullBackupContent="string" android:fullBackupOnly=["true" | "false"] android:hasCode=["true" | "false"] android:hardwareAccelerated=["true" | "false"] android:icon="drawable resource" android:isGame=["true" | "false"] android:killAfterRestore=["true" | "false"] android:largeHeap=["true" | "false"] android:label="string resource" android:logo="drawable resource" android:manageSpaceActivity="string" android:name="string" android:networkSecurityConfig="xml resource" android:permission="string" android:persistent=["true" | "false"] android:process="string" android:restoreAnyVersion=["true" | "false"] android:requiredAccountType="string" android:resizeableActivity=["true" | "false"] android:restrictedAccountType="string" android:supportsRtl=["true" | "false"] android:taskAffinity="string" android:testOnly=["true" | "false"] android:theme="resource or theme" android:uiOptions=["none" | "splitActionBarWhenNarrow"] android:usesCleartextTraffic=["true" | "false"] android:vmSafeMode=["true" | "false"] >
    . . .
</application>复制代码

name:Application子类(自定义Application)的全名,此Application子类会在全部组件以前进行初始化。此项为可选项,通常可不设置,此时会使用默认的Application类。android

taskAffinity:指定APP中全部的Activity所属的任务栈的名字,除了那些设置了不一样taskAffinity值的Activity。若是不设置此项,默认为包名。而且默认状况下,全部Activity都共享同一个taskAffinity。正则表达式

allowTaskReparenting:若是此属性设置了true,则会出现以下的状况。容许某个ActivityX从打开它的那个任务栈移动到它原本所属的taskAffinity任务栈的最上面。而且对全部未设置allowTaskReparenting值的Activity都生效。具体的详见下面的元素项。安全

allowBackup:是否容许使用adb backup和adb restore进行数据的备份和恢复。true:能够;false,不能够。默认值为true。此项设置为true可能会有安全风险,可参考这里网络

allowClearUserData:是否容许应用重置用户数据。默认值为true。非系统应用是不能包含此项到manifest文件中的,只有系统应用才能够。app

backupAgent:用来设置备份代理。须要指定BackupAgent子类的全名,如com.example.project.MyBackupAgent。没有默认值,须要的话必须指定。BackupAgent的说明和使用能够参考这里dom

backupInForeground:在allowBackup设置为true的前提下,自动备份(Auto Backup)操做是否在APP运行在前台的时候进行数据备份。true为能够,false为不能够。默认为false。Android6.0以上才添加的,把数据备份到Google Drive上,有25M的空间。ide

banner:可在和中设定。用在AndroidTV主页上的Activity(可以处理CATEGORY_LEANBACK_LAUNCHER intent的Activity),用来轮播图布局

debuggable:是否容许APP进入调试模式。通常不设置此值,由编译器自动打包对其进行赋值。true:可调试。false:不可调试。此属性可不用特地指定,发布debug包的时候会自动设置为true,release包的时候会设置为false。测试

label:用户可读的此APP的标签

description:关于此APP的详细描述。

directBootAware:Android7.0引入的新特性,是否能够能够在Direct Boot模式下运行。true:能够,false:不能够。默认为false若是此项设置了,而其余组件没设置,其余组件此项的值和application的同样

  • Direct Boot模式:用户能够在锁屏状态下对APP进行一些操做和查看。好比闹钟,短信等等。

enabled:是否让系统对application中的组件进行实例化。true为能够,false为不能够。当false时,须要本身手动最组件进行实例化。默认此项为true。当application设置此项时,全部组件的此项的值必须和application保持一致。

extractNativeLibs:Android6.0引入的。安装APK包时是否对其中的.so文件提取出来。设置为false时.so文件必须为page aligned 和 未压缩过的,此时.so文件直接在运行的时候从apk包中加载进来。默认值为true。

fullBackupContent:Android6.0引入。配合自动备份,用一个XML文件指明备份数据的规则。XML文件以下:

<application ... android:fullBackupContent="@xml/my_backup_rules">
  </app>复制代码

res/xml/my_backup_rules.xml

<!-- 规则 -->
<full-backup-content>
    <include domain=["file" | "database" | "sharedpref" | "external" | "root"] path="string" />
    <exclude domain=["file" | "database" | "sharedpref" | "external" | "root"] path="string" />
</full-backup-content>

<!-- 示例 -->
<?xml version="1.0" encoding="utf-8"?>
<full-backup-content>
    <include domain="sharedpref" path="."/>
    <exclude domain="sharedpref" path="device.xml"/>
</full-backup-content>复制代码

fullBackupOnly:当自动备份(Auto Backup)可使用的时候的时候,是否开启。true为开启,而且6.0以上使用自动备份,如下使用 Key/Values Backups。默认为false。

hasCode:APP是否包含代码。true表示包含,false表示不包含,在APP加载组件的时候系统不会load任何代码。默认值为true。

hardwareAccelerated:是否为全部的Activity和View进行硬件加速渲染。当minSdkVersion和targetSdkVersion为14以上时,默认值为true,不然为false。

icon:APP的桌面显示的图标。

isGame:是否游戏,用来和其余应用区分开来。默认为false。

killAfterRestore: 当系统恢复出厂设置,APP的设置信息被重置时,改APP是否应该被杀死。默认值为true。

largeHeap:APP是否须要更大的内存空间。大部分APP不须要此属性。要在运行时查询可用的内存大小,可使用 getMemoryClass() 或getLargeMemoryClass() 方法。

label:APP桌面显示的名称。若是不指定,则桌面名称为包名。

logo:actionBar或toolBar上显示的图标

manageSpaceActivity:Activity子类的全名。当用户清楚此APP数据时跳转到此Activity,用户将按照此APP的设置进行操做清除。

networkSecurityConfig:指向XML配置文件,此XML配置文件为网络安全配置文件。API 24引入。
格式以下:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config>
        <trust-anchors>
            <certificates src="..."/>
            ...
        </trust-anchors>
    </base-config>

    <domain-config>
        <domain>android.com</domain>
        ...
        <trust-anchors>
            <certificates src="..."/>
            ...
        </trust-anchors>
        <pin-set>
            <pin digest="...">...</pin>
            ...
        </pin-set>
    </domain-config>
    ...
    <debug-overrides>
        <trust-anchors>
            <certificates src="..."/>
            ...
        </trust-anchors>
    </debug-overrides>
</network-security-config>复制代码

permission:设置权限。此处设置,则全部的组件都会继承此权限(也可从新设置)。具体的可查看Manifest上篇中的权限部分。

persistent:是否让此APP持续地保持运行。通常此项不进行设置,此项是专门对一些系统应用进行设置的,好比短信,通话等应用。

process:设置进程名字。每一个组件能够对此项进行覆盖,设置本身的process。默认的进程名为APP的包名。以“:”开头命名的进程名为私有的。以小写字母开头的进程名为公有的,能够共享给其余APP。

restoreAnyVersion:APP能够经过任何版本的备份数据进行数据恢复,即便是高版本备份的数据恢复到低版本中去。设置true容许,false不容许。默认值为false。此项可能会致使数据冲突,设置true后须要当心处理。

resizeableActivity:APP是否设置分屏操做。API24 引入。

supportsRtl:是否支持从右到左布局。须要API17或更高的版本。若是设置为false或targetSdkVersion设置为16或更低版本,则会忽略RTL API。默认值为false。

testOnly:设置此APP是不是用来测试的。AndroidStudio点击运行的时候,会自动把此项设置为true。发布版本此项应该设置为false。

theme:APP的主题。

uiOptions:有none和splitActionBarWhenNarrow两项属性值。none为默认值。通常不多用到此项。

usesCleartextTraffic:API23引入。是否容许网络使用明文传输。默认值为true。

vmSafeMode:API22引入。是否让虚拟机运行在安全模式下。默认值为false。

activity

对Activity的声明,APP中的全部APP必须在Manifest文件中声明才可以显示。

<activity android:allowEmbedded=["true" | "false"] android:allowTaskReparenting=["true" | "false"] android:alwaysRetainTaskState=["true" | "false"] android:autoRemoveFromRecents=["true" | "false"] android:banner="drawable resource" android:clearTaskOnLaunch=["true" | "false"] android:colorMode=[ "hdr" | "wideColorGamut"] android:configChanges=["mcc", "mnc", "locale", "touchscreen", "keyboard", "keyboardHidden", "navigation", "screenLayout", "fontScale", "uiMode", "orientation", "density", "screenSize", "smallestScreenSize"] android:directBootAware=["true" | "false"] android:documentLaunchMode=["intoExisting" | "always" | "none" | "never"] android:enabled=["true" | "false"] android:excludeFromRecents=["true" | "false"] android:exported=["true" | "false"] android:finishOnTaskLaunch=["true" | "false"] android:hardwareAccelerated=["true" | "false"] android:icon="drawable resource" android:label="string resource" android:launchMode=["standard" | "singleTop" | "singleTask" | "singleInstance"] android:maxRecents="integer" android:maxAspectRatio="float" android:multiprocess=["true" | "false"] android:name="string" android:noHistory=["true" | "false"] android:parentActivityName="string" android:persistableMode=["persistRootOnly" | "persistAcrossReboots" | "persistNever"] android:permission="string" android:process="string" android:relinquishTaskIdentity=["true" | "false"] android:resizeableActivity=["true" | "false"] android:screenOrientation=["unspecified" | "behind" |复制代码

name:Activity的子类全名。

allowEmbedded:此Activity是否能够做为其余Activity可嵌入的子Activity启动。在可穿戴的开发中此项须要设置为true。默认值为false。

taskAffinity:设置Activity所属任务栈的名称。具备相同taskAffinity的Activity属于同一个任务栈。若是此值不指定,则和<application>中设置的taskAffinity同样。默认状况下同一个APP全部的Activity都属于同一个任务栈,而且任务栈的名字和APP的包名(package name)一致。

allowTaskReparenting:设置为true的时候:若是某个任务栈中的Activity启动了此Activity,则此Activity会移动到它原本所属的taskAffinity任务栈的最上面。好比说有APK1和APK2,其中APK1中有MainActivity1和ActivityX(ActivityX中的Manifest文件中的此项设置了true),APK2中有MainActivity2,而且ActivityX能够被APK2中的MainActivity2启动。此时先在Home页面打开APK1启动MainActivity1,而后按Home键回到Home页面,再打开APK2启动MainActivity2,在MainActivity2中启动ActivityX,启动完成后按Home键回到Home页面,再进入APK1,会发现此时的最上面的Activity不是MainActivity1,而是ActivityX!此时若是再切换到APK2,会发现最上面的页面是MainActivity2。缘由是ActivityX在被APK2启动的时候会被移动到它原来所属的taskAffinity任务栈上,就是APK1中任务栈。因为singleTask和singleInstance启动模式的Activity必须在任务栈的根部,因此这两种启动模式不能设置为true。

alwaysRetainTaskState:是否保持APP任务栈的状态(Activity的打开顺序,保持状态)。true为老是保持,false不保持,默认值为false。对于任务栈根部的Activity(好比设置了MAIN和LAUNCHER的Activity)有意义,其余Activity设置了无心义。当为false,APP退到后台超过了必定时间在此切换到前台时,系统会清除任务栈上除根Activity外的全部Activity。当为true时,则会保持。

autoRemoveFromRecents:当设置了此项的activity所启动的任务栈上的全部activity都关闭时,是否在预览屏幕(overview screen,其实也是最近人物列表)中移除。true为移除,false为不移除。

clearTaskOnLaunch:当APP从桌面(Home Screen)切换回来是,是否移除掉任务栈上除了根Activity外的全部Activity,true为移除,false为不移除,默认值为false。此项只对根Activity起做用。

banner:在AndroidTV主页上的Activity进行轮播图片。

configChanges:默认状况下当Activity的配置在运行时改变时,会被销毁掉并重启,此时一些信息会得不到保存,如输入框的信息,典型的例子就是横竖屏切换。配置此项的相关信息,能够避免配置改变带来的信息遗失,当设置的条件发生时,会触发Activity的onConfigurationChanged()回调方法。此项的值能够设置多种状况,用“|”分开。

  • density:显示密度的改变,用户致电不一样的显示缩放的时候。API 24开始添加。
  • fontScale:字体大小的改变
  • keyboard:键盘类型发生改变,好比接入外部键盘
  • keyboardHidden:辅助功能键盘发生改变。
  • layoutDirection:布局方向发生改变。例如:从左到右的布局改为从右到左的布局。API 17或以上
  • locale:区域设置发生改变,用户设置另外的系统语言,如中文系统设置成英文的。
  • mcc:IMSI国家码发生改变。
  • mnc:IMSI网络码发生改变。
  • navigation:轨迹球类型发生改变。此项通常不会发生。
  • orientation:屏幕横竖屏发生切换。若是在Android 3.2(API 13)或以上,设置了此项后还需设置screenSize:
  • screenLayout:屏幕的布局发生改变
  • screenSize:屏幕尺寸发生改变,横屏(landscape)和竖屏(portrait)的尺寸。API 13 或以上
  • smallestScreenSize:物理屏幕尺寸发生改变,好比接入外部显示屏幕。横竖屏切换不会触发此条件。
  • touchscreen:触摸屏发生改变。此项通常不会触发。
  • uiMode:用户界面模式发生改变。桌面模式、驾车模式、夜间模式。

directBootAware:Activity是否能够在锁屏的上运行和显示。Direct Boot。默认值为false。

documentLaunchMode:Android 5.0添加。此项属性容许同一个APP可以有多个Activity展示在预览界面上(最近使用过的任务列表)。每次Activity启动时,新实例添加进task的方式。对应四种方式,除了none和never,其它两种方式的launchMode必须设置为standard:

  • intoExisting:重用现有的Activity,若是最近任务列表中没有Activity启动的任务栈(task),则建立一个;若是有的话则清除掉原来的,并重启,此时会回调onNewIntent(Intent);方法

  • always:Activity每次启动时建立新的任务栈(task)。等同于标签:FLAG_ACTIVITY_NEW_DOCUMENT和FLAG_ACTIVITY_MULTIPLE_TASK

  • none:默认值。每次Activity启动,不建立新的任务栈(task),展现在预览界面上的Activity是在任务栈最上面的Activity。可是FLAG_ACTIVITY_NEW_DOCUMENT标签可使Activity每次打开建立新的任务栈。

  • never:Activity启动,都不会建立新的任务栈,即便设置了FLAG_ACTIVITY_NEW_DOCUMENT和FLAG_ACTIVITY_MULTIPLE_TASK标签。

enabled:Activity是否设置为系统进行实例化。默认值为true。必须和application此项的属性值保持一致。当为false时,activity不能实例化。

excludeFromRecents:以此Activity为根Activity的任务栈(task)是否从最近人物列表上移除,true为移除,false为包含。默认值为false。

exported:设置Activity是否能够被其余APP的组件启动。true能够;false不容许,不论是隐式调用仍是显示调用。默认值为false。

finishOnTaskLaunch:当用户再次启动任务时(例如从预览界面切换),是否finish掉此Activity。默认值为false。当此项和allowTaskReparenting 同时设置为true时,会忽略掉allowTaskReparenting 属性。

hardwareAccelerated:开启硬件渲染加速。true为开启,false不开启。默认值为false。

icon:Activity的图标。做为任务栈的根Activity的icon能够在预览界面显示,而且会覆盖掉application的icon,也能够在intent-filter弹出的多选的activity显示icon。此项缺省的话和application设置的icon同样。

label:显示给用户看的Activity标签名。同icon显示的地方同样,同样会覆盖掉application的label。缺省的话和application设置的icon同样

launchMode:Activity的四种启动模式。

  • standard 默认值。每次启动都建立新的Activity实例
  • singleTop:若是在目标任务栈的顶部有此Activity的实例,则复用此Activity实例。不然建立一个新的实例。
  • singleTask:若是存在此Activity的实例,则复用。不然以此Activity为根Activity建立新的任务栈。
  • singleInstance:独占一个任务栈,而且任务栈上只有一个Activity。

maxRecents:以此Activity启动的任务栈(task)的最大数目,范围为1-50,默认值为16。超过数目会以最近最少使用的原则移除掉。

maxAspectRatio:

multiprocess:是否能够将Activity的实例启动到启动它的那个组件所属的进程中。true为容许,false为不容许。默认值为false。

noHistory:当Activity不可见时,是否将其从任务栈中移除并finish掉。true移除,activity不会留在任务栈内,因此此时onActivityResult()方法不会被调用。false不移除。默认为false。

parentActivityName:向上导航跳转到的Activity类名,必需要和目标Activity的name一致。因为是API 16引入的,因此要支持4-16,须要进行以下操做:

<activity android:name="com.example.app.ChildActivity" android:label="@string/title_child_activity" android:parentActivityName="com.example.app.MainActivity" >
    <!-- Parent activity meta-data to support API level 4+ -->
    <meta-data android:name="android.support.PARENT_ACTIVITY" android:value="com.example.app.MainActivity" />
</activity>复制代码

permission:对Activity设置权限保护。若是调用方未设置指定权限,则intent不会传递给Activity。若是此项未设置,则继承application的permission项,若是application也没设置,则Activity无权限。

persistableMode:数据持久化。设置任务栈里的Activity在设备重启的时候是否进行数据的持久化处理。当设备重启后启动对应的Activity时可以对数据进行恢复。

  • persistRootOnly:默认值。当设备重启时,任务栈中的根Activity会进行持久化处理。只有根Activity设置此值才有效果。
  • persistAcrossReboots:当设备重启时,任务栈中的根Activity和其上的设置了此项的Activity都会对数据进行保存。当设备重启后启动对应的Activity时可以对数据进行恢复。
  • persistNever:不设置。只有根Activity设置此值才有效果。

API 21引入。

process:设置运行此Activity的进程名字。默认为App建立的进程。以“:”开头命名的进程名为私有的,而且在须要的时候才建立。以小写字母开头的进程名为公有的,能够共享给其余APP。

relinquishTaskIdentity:声明此属性的Activity是否放弃任务标识符而交由其任务栈上面的Activity。true,替换成下一个Activity的Intent的标识。此过程会一致持续,直到遇到某个Activity此属性设置为false。

resizeableActivity:是否支持多窗口展现。API 24引入

screenOrientation:Activity在设备的显示方向。若是是多屏显示,则会忽略此项。有以下值:

  • unspecified:默认值,由系统选择方向。
  • behind:在Activity栈中紧接着它的Activity的方向相同
  • landscape:横屏
  • portrait:竖屏
  • reverseLandscape:和正常横屏相反方向的横屏
  • reversePortrait:和正常竖屏相反方向的竖屏
  • sensorLandscape:横屏,根据设备传感器,能够是正常横屏或反向横屏
  • sensorPortrait:竖屏,根据设备传感器,能够是正常竖屏或反向竖屏
  • userLandscape: 横屏,但根据设备传感器和用户的传感器首选项,能够是正常横屏或反向横屏。 若是用户锁定了基于传感器的旋转,其行为与 landscape 相同,不然,其行为与 sensorLandscape 相同。API 级别 18 中的新增配置。
  • userPortrait:竖屏,但根据设备传感器和用户的传感器首选项,能够是正常竖屏或反向竖屏。 若是用户锁定了基于传感器的旋转,其行为与 portrait 相同,不然,其行为与 sensorPortrait: 相同。API 级别 18 中的新增配置。
  • sensor:方向由设备方向传感器决定。显示方向取决于用户如何手持设备,它会在用户旋转设备时发生变化。 但一些设备默认状况下不会旋转到全部四种可能的方向。要容许所有四种方向,须要使用 "fullSensor"。
  • fullSensor:方向由 4 种方向中任一方向的设备方向传感器决定。这与 "sensor" 相似,不一样的是它容许全部 4 种可能的屏幕方向,不管设备正常状况下采用什么方向(例如,一些设备正常状况下不使用反向竖屏或反向横屏,但它支持这些方向)。 API 级别 9 中的新增配置。
  • nosensor:决定方向时不考虑物理方向传感器。传感器会被忽略,所以显示不会随用户对设备的移动而旋转。 除了这个区别,系统在选择方向时使用的策略与“unspecified”设置相同。
  • user:用户当前的首选方向。
  • fullUser:若是用户锁定了基于传感器的旋转,其行为与 user 相同,不然,其行为与 fullSensor 相同,容许全部 4 种可能的屏幕方向。 API 级别 18 中的新增配置。
  • locked:将方向锁定在其当前的任意旋转方向。API 级别 18 中的新增配置。

stateNotNeeded:Activity在被kill掉的时候是否须要保存相关状态,在重启的时候是否须要回复状态。true不须要,此时在kill掉的时候不会调用onSaveInstanceState() 方法,onCreate()传null值,而不是Bundle。默认值为false

supportsPictureInPicture:是否支持画中画。若是resizeableActivity设置为false则此项会被忽略掉。API 24引入。

theme:Activity的主题设置,若是此项缺省,则继承application的theme

uiOptions:API 14引入。为Activity的UI添加额外的操做,可设置以下两种值:

  • none:不设置。默认值
  • splitActionBarWhenNarrow:ActionBar的底部分裂模式

windowSoftInputMode:Activity 的主窗口与包含屏幕软键盘的窗口的交互方式。主要影响两个方面:
一、当 Activity 成为用户注意的焦点时软键盘的状态 — 隐藏仍是可见。
二、对 Activity 主窗口所作的调整 — 是否将其尺寸调小觉得软键盘腾出空间,或者当窗口部分被软键盘遮挡时是否平移其内容以使当前焦点可见。
有以下值,可进行组合(以state...和ajust...的组合模式,中间用“|”隔开)。

  • stateUnspecified:不指定软键盘状态,由系统选择合适的状态。为默认值。
  • stateUnchanged:当Activity转到前台时,保留软键盘最后所处的任何状态。
  • stateHidden:当用户选择Activity时—确实是向前导航到Activity,隐藏软键盘。
  • stateAlwaysHidden:当 Activity 的主窗口有输入焦点时始终隐藏软键盘。
  • stateVisible:在正常的适宜状况下(当用户向前导航到 Activity 的主窗口时)显示软键盘。
  • stateAlwaysVisible:当用户选择 Activity 时 (当用户向前导航到 Activity) Activity 而返回时 — 显示软键盘。
  • adjustUnspecified: 系统会根据窗口的内容是否存在任何可滚动其内容的布局视图来自动选择adjustResize模式或adjustPan模式。为默认值
  • adjustResize:始终调整 Activity 主窗口的尺寸来为屏幕上的软键盘腾出空间。
  • adjustPan:不调整 Activity 主窗口的尺寸来为软键盘腾出空间, 而是自动平移窗口的内容,使当前焦点永远不被键盘遮盖,让用户始终都能看到其输入的内容。

activity-alias

Activity的别名,为目标Activity提供快捷入口

<activity-alias android:enabled=["true" | "false"] android:exported=["true" | "false"] android:icon="drawable resource" android:label="string resource" android:name="string" android:permission="string" android:targetActivity="string" > 
    . . .
</activity-alias>复制代码

enabled:目标Activity是否可经过别名被系统实例化。默认为true。若是为false,则activity-alias无效。当application的enabled和此项都为true时,才可以对目标activity进行实例化。

exported:其余APP的组件是否可经过此别名来启动目标Activity。true为能够,false为不能够。若是为false,则只能由其所属的APP或相同User ID的APP启动。

icon:展现的图标。

label:展现的名字

name:别名的惟一字符串名字,命名风格和Java类名全路径同样,必须惟一。

permission:经过别名启动目标Activity所须要的权限

targetActivity:目标Activity在Manifest中声明的name。

meta-data

以键值对的形式为其父级组件元素提供额外的数据,且其父组件能够包含任意多个meta-data元素。父组件元素包括:<application>、<activity>、<activity-alias>、<service>、<receiver>、<provider>。最终meta-data的值都会被封装到Bundle对象放到PackageItemInfo.metaData字段。

<meta-data android:name="string" android:resource="resource specification" android:value="string" />复制代码

name:meta-data的名字,必须具备惟一性。为了确保惟一性,最好用Java风格的规范命名。如:"com.example.my.metadata.name"

value:对应的值。Bundle对相关类型的获取以下:

  • getString():获取字符串的值
  • getInt():获取整型或颜色的值。
  • getBoolean():获取布尔类型
  • getFloat():获取浮点类型

resource:资源的引用,此处为资源的ID。用Bundle.getInt()方法获取资源ID

value和resource的区别:

<meta-data android:name="zoo" android:value="@string/kangaroo" />复制代码
<meta-data android:name="zoo" android:resource="@string/kangaroo" />复制代码

一样是引用资源@string/kangaroo,value直接获取的是从资源中取出来的值;resource则是资源的引用——ID。

service

声明一个服务组件。

<service android:description="string resource" android:directBootAware=["true" | "false"] android:enabled=["true" | "false"] android:exported=["true" | "false"] android:icon="drawable resource" android:isolatedProcess=["true" | "false"] android:label="string resource" android:name="string" android:permission="string" android:process="string" >
    . . .
</service>复制代码

description:对service作描述的字符串。

directBootAware:是否能够在锁屏的时候运行。默认值为false。

enabled:是否可被系统实例化。true,能够;false,不能够。默认值为true。

exported:是否容许其余APP的组件对其进行调用或交互。true,容许。false,不容许,此时此service只容许其所属的APP或具备相同User ID的APP对其进行调用。

icon:service展现的图标。

isolatedProcess:若是设置为true,则此服务会运行在一个独立的进程中,此进程与系统的其余进程是分开的而且没有本身的权限。惟一可以与此服务通讯的方法是经过服务的API(binding 、starting)

label:展现给用户看的服务名字。不设置的话默认继承application的label。

name:服务子类全名。

permission:对service设置的权限保护。若是调用方未设置指定权限,则 startService(), bindService(), 或 stopService()不会起做用。若是此项未设置,则继承application的permission项,若是application也没设置,则Activity无权限。

process:服务运行所在的进程名,默认为APP运行所在的进程,与包同名。以“:”开头命名的进程名为私有的,而且在须要的时候才建立。以小写字母开头的进程名为公有的,能够共享给其余APP。

receiver

声明一个广播接收器(BroadcastReceiver的子类)组件。

<receiver android:directBootAware=["true" | "false"] android:enabled=["true" | "false"] android:exported=["true" | "false"] android:icon="drawable resource" android:label="string resource" android:name="string" android:permission="string" android:process="string" >
    . . .
</receiver>复制代码

directBootAware:是否能够在锁屏的时候运行。默认值为false。

enabled:是否可被系统实例化。默认为true

exported:是否可接收其余APP发送的广播消息。

icon:展现的图标。

label:展现给用户看的名字

name:广播接收器子类的全名。

permission:设置保护权限。

process:广播接收器运行所在的进程名,默认为APP运行所在的进程,与包同名。以“:”开头命名的进程名为私有的,而且在须要的时候才建立。以小写字母开头的进程名为公有的,能够共享给其余APP。

provider

声明内容提供者(content provider)组件。

<provider android:authorities="list" android:directBootAware=["true" | "false"] android:enabled=["true" | "false"] android:exported=["true" | "false"] android:grantUriPermissions=["true" | "false"] android:icon="drawable resource" android:initOrder="integer" android:label="string resource" android:multiprocess=["true" | "false"] android:name="string" android:permission="string" android:process="string" android:readPermission="string" android:syncable=["true" | "false"] android:writePermission="string" >
    . . .
</provider>复制代码

name:ContentProvider对应的子类的全名。

authorities:指定提供给外部访问的URI标识,能够设置多个,用分号隔开。为了不命名冲突,应该使用Java类的命名规范,而且都是小写,最好是和ContentProvider子类的全名一致。

enabled:是否可被系统实例化。true,能够;false,不行

directBootAware:是否能够在锁屏的时候运行

exported:是否可被其余APP访问。true,能够;false,不行。在API 17或以上,默认值为false。在API 16或如下因为没有引入,其效果至关于设置为true值。

icon:对应展现的图标。

initOrder:多个ContentProvider在同一个进程实例化的顺序,为整数值,大值会优先进行初始化。

label:展现给用户看的名字。

process:设置ContentProvider运行所在的进程名。

multiprocess:若是APP有多个进程在运行,则是否设置多个ContentProvider的实例,每一个实例对应一个进程。true,每一个进程有属于本身的ContentProvider实例对象。false,全部进程共享同一个ContentProvider实例对象。默认值为false。

syncable:是否设置数据同步。true,同步。false,不一样步

permission:链接此ContentProvider并进行读写操做所需的权限。

readPermission:设置客户端链接此ContentProvider进行读操做(查询)所需的权限。

writePermission:设置客户端链接此ContentProvider进行写操做(查询)所需的权限

grantUriPermissions:是否可给日常无权对 Content Provider 数据的访问进行临时受权 ,使之可以对数据进行操做。true,容许,可以对全部数据进行临时受权访问。false,只能受权访问<grant-uri-permission>元素设置的数据子集,若是有设置的话。默认值为false

path-permission

定义ContentProvider数据子集相关的路径和访问所需权限。

<path-permission android:path="string" android:pathPrefix="string" android:pathPattern="string" android:permission="string" android:readPermission="string" android:writePermission="string" />复制代码

path 用来匹配完整的路径,如:content://example.com/a/b/c,这里的path为“/a/b/c”

pathPrefix 用来匹配路径的开头部分,拿上面的 Uri 来讲,这里将 pathPrefix 的值为“/a”

pathPattern:使用通配符的完整路径,有以下规则:

  • “*”,星号匹配,能够匹配单字符出现0次或屡次。如“a*bc”,匹配“bc”、“abc”、“aabc”等
  • “.*”,英文句号和星号匹配,匹配任意字符串出现0次或屡次。如“.*abc”,匹配“abc”、“exampleabc”、“12abc”等

若是须要用到*号,因为正则表达式的规范,须要使用转义字符 “\\*”。

permission:设置访问所需的权限,读权限和写权限。若是readPermission或writePermissio设置了,则会优先使用readPermission、writePermissio。

readPermission:读权限

writePermissio:写权限

grant-uri-permission

指定父元素对应的ContentProvider的哪些数据子集能够临时受权给那些无权进行访问的访问。若是父元素对应的grantUriPermissions项设置为true的话,能够受权访问任何数据。若是为false的话,就只能访问本元素所设置的数据集。

<grant-uri-permission android:path="string" android:pathPattern="string" android:pathPrefix="string" />复制代码

参考path-permission对path、pathPrefix、pathPattern的描述

uses-library

定义APP必须连接的公共库, 本元素把程序包的类装载器中须要包含的库代码通知系统。

<uses-library android:name="string" android:required=["true" | "false"] />复制代码

name:代码库的名字。

required:设置为true的话,若是系统没有name声明对应的库,则程序不能安装。设置为false,没有name声明对应的包也容许程序安装,单在APP里要作好对缺乏声明库的相关处理。

相关文章
相关标签/搜索