Android知識點回顧之Manifest檔案-下篇

星泉毅發表於2017-11-12

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都生效。具體的詳見下面的元素項。

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:可在和中設定。用在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裡要做好對缺少宣告庫的相關處理。

相關文章