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裏要作好對缺乏聲明庫的相關處理。

相關文章
相關標籤/搜索