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

application

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

<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类。

taskAffinity:指定APP中所有的Activity所属的任务栈的名字,除了那些设置了不同taskAffinity值的Activity。如果不设置此项,默认为包名。并且默认情况下,所有Activity都共享同一个taskAffinity。

allowTaskReparenting:如果此属性设置了true,则会出现如下的情况。允许某个ActivityX从打开它的那个任务栈移动到它本来所属的taskAffinity任务栈的最上面。并且对所有未设置allowTaskReparenting值的Activity都生效。具体的详见下面的<activity>元素项。

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

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

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

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

banner:可在<application>和<activity>中设定。用在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 的主窗口与包含屏幕软键盘的窗口的交互方式。主要影响两个方面:
1、当 Activity 成为用户注意的焦点时软键盘的状态 — 隐藏还是可见。
2、对 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里要做好对缺少声明库的相关处理。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容