引言
??作為Android開發(fā)人員,我們通常更多地關(guān)注業(yè)務(wù)邏輯代碼的書寫邏輯满哪,但很少去關(guān)注Manifest.xml配置文件中的標(biāo)簽和屬性雳攘,最近我就因?yàn)樵趯憳I(yè)務(wù)的時(shí)候挖诸,誤漏了一個(gè)該文件中的配置智末,導(dǎo)致業(yè)務(wù)邏輯梳理的時(shí)候溜得飛起谅摄,而運(yùn)行app卻處處崩潰。
??年輕人要講武德系馆!淦送漠,雖然調(diào)試花了整整一個(gè)下午,但確實(shí)通過(guò)這件事認(rèn)識(shí)到了我的短板由蘑。閑話不多說(shuō)闽寡,一起來(lái)學(xué)習(xí)吧!
Manifest.xml文件結(jié)構(gòu)目錄
<?xml version="1.0" encoding="utf-8"?>
<manifest>
<uses-permission />
<permission />
<permission-tree />
<permission-group />
<instrumentation />
<uses-sdk />
<uses-configuration />
<uses-feature />
<supports-screens />
<compatible-screens />
<supports-gl-texture />
<application>
<activity>
<intent-filter>
<action />
<category />
<data />
</intent-filter>
<meta-data />
</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 />
<path-permission />
</provider>
<uses-library />
</application>
</manifest>
標(biāo)簽詳細(xì)介紹
manifest
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.example.mydemo"
android:sharedUserId="string"
android:sharedUserLabel="string resource"
android:versionCode="integer"
android:versionName="string"
android:installLocation=["auto" | "internalOnly" | "preferExternal"] >
. . .
</manifest>
(1)xmlns:android:定義android命名空間尼酿。
(2)package:定義app包名爷狈,每個(gè)app包名唯一。
(3)sharedUserId:具有相同的uderId并且具有相同簽名的APP可以共享和訪問(wèn)彼此的數(shù)據(jù)裳擎,甚至可以在同一個(gè)進(jìn)程里面運(yùn)行惯悠,此時(shí)必須設(shè)置相同酬姆。
(4)sharedUserLabel:給共享userId定義了用戶可讀標(biāo)簽嫩絮,只有設(shè)置了sharedUserId肛循,此屬性才有意義留量。
(5)versionCode:內(nèi)部版本號(hào)幢泼。必須是整數(shù)横辆,Integer類型策吠。用來(lái)判斷版本的升級(jí)各墨,每一次發(fā)布都必須必之前的要大指孤。如果versionName沒有設(shè)置,則設(shè)置成此值贬堵。
(6)versionName:展示給用戶看的版本號(hào)恃轩。為String類型。
(7)installLocation:設(shè)置apk文件的默認(rèn)安裝路徑黎做。
auto:系統(tǒng)優(yōu)先安裝apk包到內(nèi)部存儲(chǔ)叉跛,如果內(nèi)部存儲(chǔ)滿了,則會(huì)安裝到SD卡蒸殿。
internalOnly:只能安裝在設(shè)備ROM上(內(nèi)部存儲(chǔ))筷厘,ROM滿了則彈出安裝失敗鸣峭。
preferExternal,會(huì)優(yōu)先安裝在外部存儲(chǔ)上(SD卡)酥艳,當(dāng)無(wú)SD卡或SD卡滿了的話摊溶,則會(huì)安裝到內(nèi)部存儲(chǔ)上。
-
uses-permission
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="18" />
(1)name:權(quán)限的名稱充石∧唬可以是系統(tǒng)定義的權(quán)限,也可以是其他應(yīng)用的權(quán)限骤铃,或者是使用自定義的權(quán)限拉岁。
(2)maxSdkVersion:此申請(qǐng)的權(quán)限最高的作用Android版本。
-
permission
自定義權(quán)限劲厌,以限制訪問(wèn)指定的組件或APP——本APP或其他APP膛薛,起到保護(hù)的作用。
-
permission-tree
聲明一個(gè)權(quán)限樹补鼻,可以在此節(jié)點(diǎn)上動(dòng)態(tài)添加權(quán)限哄啄。
-
permission-group
聲明一個(gè)邏輯上的權(quán)限分組。
-
instrumentation
聲明一個(gè)Instrumentation類风范,用來(lái)監(jiān)控APP和系統(tǒng)的交互咨跌。Instrumentation對(duì)象會(huì)在APP的所有組件之前進(jìn)行實(shí)例化。
-
uses-sdk
指定app運(yùn)行需要的sdk級(jí)別
-
uses-configuration
用來(lái)設(shè)置APP需要的相關(guān)硬件和軟件的配置硼婿。大部分APP都不需要此屬性锌半。
-
uses-feature
用來(lái)聲明APP所要使用和依賴的單一的軟硬件功能。
-
supports-screens
-
compatible-screens
-
supports-gl-texture
-
application(重頭戲來(lái)啦?苈?场!)
<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>
(1)name:Application子類(自定義Application)的全名州胳。
(2)taskAffinity:指定APP中所有的Activity所屬的任務(wù)棧的名字记焊。
(3)allowTaskReparenting:如果此屬性設(shè)置了true,表明允許某個(gè)ActivityX從打開它的那個(gè)任務(wù)棧移動(dòng)到它本來(lái)所屬的taskAffinity任務(wù)棧的最上面栓撞。
(4)allowBackup:是否允許使用adb backup和adb restore進(jìn)行數(shù)據(jù)的備份和恢復(fù)遍膜。
(5)allowClearUserData:是否允許應(yīng)用重置用戶數(shù)據(jù)。
(6)backupAgent:用來(lái)設(shè)置備份代理瓤湘。
(7)backupInForeground:在allowBackup設(shè)置為true的前提下瓢颅,自動(dòng)備份(Auto Backup)操作是否在APP運(yùn)行在前臺(tái)的時(shí)候進(jìn)行數(shù)據(jù)備份。
(8)banner:用來(lái)輪播圖弛说。
(9)debuggable:是否允許APP進(jìn)入調(diào)試模式挽懦。一般不設(shè)置此值,由編譯器自動(dòng)打包對(duì)其進(jìn)行賦值木人。
(10)label:用戶可讀的此APP的標(biāo)簽巾兆。
(11)description:關(guān)于此APP的詳細(xì)描述猎物。
(12)directBootAware:Android7.0引入的新特性,是否可以可以在Direct Boot模式下運(yùn)行角塑。
(13)enabled:是否讓系統(tǒng)對(duì)application中的組件進(jìn)行實(shí)例化蔫磨。
(14)extractNativeLibs:Android6.0引入的。安裝APK包時(shí)是否對(duì)其中的.so文件提取出來(lái)圃伶。
(15)fullBackupContent:Android6.0引入堤如。配合自動(dòng)備份,用一個(gè)XML文件指明備份數(shù)據(jù)的規(guī)則窒朋。
(16)fullBackupOnly:當(dāng)自動(dòng)備份(Auto Backup)可以使用的時(shí)候的時(shí)候搀罢,是否開啟。
(17)hasCode:APP是否包含代碼侥猩。
(18)hardwareAccelerated:是否為所有的Activity和View進(jìn)行硬件加速渲染榔至。
(19)icon:APP的桌面顯示的圖標(biāo)。
(20)isGame:是否游戲欺劳,用來(lái)和其他應(yīng)用區(qū)分開來(lái)唧取。
(21)killAfterRestore: 當(dāng)系統(tǒng)恢復(fù)出廠設(shè)置,APP的設(shè)置信息被重置時(shí)划提,改APP是否應(yīng)該被殺死枫弟。
(22)largeHeap:APP是否需要更大的內(nèi)存空間。
(23)label:APP桌面顯示的名稱鹏往。如果不指定淡诗,則桌面名稱為包名。
(24)logo:actionBar或toolBar上顯示的圖標(biāo)伊履。
(25)manageSpaceActivity:Activity子類的全名韩容。
(26)networkSecurityConfig:指向XML配置文件,此XML配置文件為網(wǎng)絡(luò)安全配置文件唐瀑。
(27)permission:設(shè)置權(quán)限宙攻。
(28)persistent:是否讓此APP持續(xù)地保持運(yùn)行。
(29)process:設(shè)置進(jìn)程名字介褥。
(30)restoreAnyVersion:APP可以通過(guò)任何版本的備份數(shù)據(jù)進(jìn)行數(shù)據(jù)恢復(fù),即使是高版本備份的數(shù)據(jù)恢復(fù)到低版本中去递惋。
(31)resizeableActivity:APP是否設(shè)置分屏操作柔滔。API24 引入。
(32)supportsRtl:是否支持從右到左布局萍虽。
(33)testOnly:設(shè)置此APP是否是用來(lái)測(cè)試的睛廊。
(34)theme:APP的主題。
(35)uiOptions:有none和splitActionBarWhenNarrow兩項(xiàng)屬性值杉编。none為默認(rèn)值超全。一般很少用到此項(xiàng)咆霜。
(36)usesCleartextTraffic:API23引入。是否允許網(wǎng)絡(luò)使用明文傳輸嘶朱。默認(rèn)值為true蛾坯。
(37)vmSafeMode:API22引入。是否讓虛擬機(jī)運(yùn)行在安全模式下疏遏。默認(rèn)值為false脉课。
-
activity
對(duì)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" |
(1)name:Activity的子類全名倘零。
(2)allowEmbedded:此Activity是否可以作為其他Activity可嵌入的子Activity啟動(dòng)。在可穿戴的開發(fā)中此項(xiàng)需要設(shè)置為true戳寸。默認(rèn)值為false呈驶。
(3)taskAffinity:設(shè)置Activity所屬任務(wù)棧的名稱。
(4)allowTaskReparenting:設(shè)置為true的時(shí)候:如果某個(gè)任務(wù)棧中的Activity啟動(dòng)了此Activity疫鹊,則此Activity會(huì)移動(dòng)到它本來(lái)所屬的taskAffinity任務(wù)棧的最上面袖瞻。
(5)alwaysRetainTaskState:是否保持APP任務(wù)棧的狀態(tài)。
(6)autoRemoveFromRecents:當(dāng)設(shè)置了此項(xiàng)的activity所啟動(dòng)的任務(wù)棧上的所有activity都關(guān)閉時(shí)订晌,是否在預(yù)覽屏幕(overview screen虏辫,其實(shí)也是最近人物列表)中移除。
(7)clearTaskOnLaunch:當(dāng)APP從桌面(Home Screen)切換回來(lái)是锈拨,是否移除掉任務(wù)棧上除了根Activity外的所有Activity砌庄,true為移除,false為不移除奕枢,默認(rèn)值為false娄昆。此項(xiàng)只對(duì)根Activity起作用。
(8)banner:在AndroidTV主頁(yè)上的Activity進(jìn)行輪播圖片缝彬。
(9)默認(rèn)情況下當(dāng)Activity的配置在運(yùn)行時(shí)改變時(shí)萌焰,會(huì)被銷毀掉并重啟,此時(shí)一些信息會(huì)得不到保存谷浅,如輸入框的信息扒俯,典型的例子就是橫豎屏切換。配置此項(xiàng)的相關(guān)信息一疯,可以避免配置改變帶來(lái)的信息遺失撼玄,當(dāng)設(shè)置的條件發(fā)生時(shí),會(huì)觸發(fā)Activity的onConfigurationChanged()回調(diào)方法墩邀。此項(xiàng)的值可以設(shè)置多種情況掌猛,用“|”分開。
(10)directBootAware:Activity是否可以在鎖屏的上運(yùn)行和顯示眉睹。
(11)documentLaunchMode:Android 5.0添加荔茬。此項(xiàng)屬性允許同一個(gè)APP能夠有多個(gè)Activity展現(xiàn)在預(yù)覽界面上(最近使用過(guò)的任務(wù)列表)废膘。
(12)enabled:Activity是否設(shè)置為系統(tǒng)進(jìn)行實(shí)例化。默認(rèn)值為true慕蔚。
(13)excludeFromRecents:以此Activity為根Activity的任務(wù)棧(task)是否從最近人物列表上移除丐黄,true為移除,false為包含坊萝。默認(rèn)值為false孵稽。
(14)exported:設(shè)置Activity是否可以被其他APP的組件啟動(dòng)。true可以十偶;false不允許菩鲜,不管是隱式調(diào)用還是顯示調(diào)用。默認(rèn)值為false惦积。
(15)finishOnTaskLaunch:當(dāng)用戶再次啟動(dòng)任務(wù)時(shí)(例如從預(yù)覽界面切換)接校,是否finish掉此Activity。默認(rèn)值為false狮崩。當(dāng)此項(xiàng)和allowTaskReparenting 同時(shí)設(shè)置為true時(shí)蛛勉,會(huì)忽略掉allowTaskReparenting 屬性。
(16)hardwareAccelerated:開啟硬件渲染加速睦柴。true為開啟诽凌,false不開啟。默認(rèn)值為false坦敌。
(17)icon:Activity的圖標(biāo)侣诵。作為任務(wù)棧的根Activity的icon可以在預(yù)覽界面顯示,并且會(huì)覆蓋掉application的icon狱窘,也可以在intent-filter彈出的多選的activity顯示icon杜顺。此項(xiàng)缺省的話和application設(shè)置的icon一樣。
(18)label:顯示給用戶看的Activity標(biāo)簽名蘸炸。同icon顯示的地方一樣躬络,一樣會(huì)覆蓋掉application的label。缺省的話和application設(shè)置的icon一樣搭儒。
(19)launchMode:Activity的四種啟動(dòng)模式穷当。(standard |singleTop|singleTask|singleInstance)
(20)maxRecents:以此Activity啟動(dòng)的任務(wù)棧(task)的最大數(shù)目,范圍為1-50淹禾,默認(rèn)值為16馁菜。超過(guò)數(shù)目會(huì)以最近最少使用的原則移除掉。
(21)multiprocess:是否可以將Activity的實(shí)例啟動(dòng)到啟動(dòng)它的那個(gè)組件所屬的進(jìn)程中稀拐。true為允許,false為不允許丹弱。默認(rèn)值為false德撬。
(22)noHistory:當(dāng)Activity不可見時(shí)铲咨,是否將其從任務(wù)棧中移除并finish掉。true移除蜓洪,activity不會(huì)留在任務(wù)棧內(nèi)纤勒,所以此時(shí)onActivityResult()方法不會(huì)被調(diào)用。false不移除隆檀。默認(rèn)為false摇天。
(23)parentActivityName:向上導(dǎo)航跳轉(zhuǎn)到的Activity類名,必須要和目標(biāo)Activity的name一致恐仑。
(24)permission:對(duì)Activity設(shè)置權(quán)限保護(hù)泉坐。如果調(diào)用方未設(shè)置指定權(quán)限,則intent不會(huì)傳遞給Activity裳仆。
(25)persistableMode:數(shù)據(jù)持久化腕让。設(shè)置任務(wù)棧里的Activity在設(shè)備重啟的時(shí)候是否進(jìn)行數(shù)據(jù)的持久化處理。當(dāng)設(shè)備重啟后啟動(dòng)對(duì)應(yīng)的Activity時(shí)能夠?qū)?shù)據(jù)進(jìn)行恢復(fù)歧斟。
(26)process:設(shè)置運(yùn)行此Activity的進(jìn)程名字纯丸。
(27)relinquishTaskIdentity:聲明此屬性的Activity是否放棄任務(wù)標(biāo)識(shí)符而交由其任務(wù)棧上面的Activity。
(28)resizeableActivity:是否支持多窗口展示静袖。API 24引入
(29)screenOrientation:Activity在設(shè)備的顯示方向觉鼻。如果是多屏顯示,則會(huì)忽略此項(xiàng)队橙。
(30)stateNotNeeded:Activity在被kill掉的時(shí)候是否需要保存相關(guān)狀態(tài)坠陈,在重啟的時(shí)候是否需要回復(fù)狀態(tài)。true不需要喘帚,此時(shí)在kill掉的時(shí)候不會(huì)調(diào)用onSaveInstanceState() 方法畅姊,onCreate()傳null值,而不是Bundle吹由。默認(rèn)值為false若未。
(31)supportsPictureInPicture:是否支持畫中畫。如果resizeableActivity設(shè)置為false則此項(xiàng)會(huì)被忽略掉倾鲫。API 24引入粗合。
(32)theme:Activity的主題設(shè)置,如果此項(xiàng)缺省乌昔,則繼承application的theme隙疚。
(33)uiOptions:API 14引入。為Activity的UI添加額外的操作磕道。
(34)windowSoftInputMode:Activity 的主窗口與包含屏幕軟鍵盤的窗口的交互方式供屉。 -
activity-alias
Activity的別名,為目標(biāo)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>
(1)enabled:目標(biāo)Activity是否可通過(guò)別名被系統(tǒng)實(shí)例化。默認(rèn)為true伶丐。如果為false悼做,則activity-alias無(wú)效。當(dāng)application的enabled和此項(xiàng)都為true時(shí)哗魂,才能夠?qū)δ繕?biāo)activity進(jìn)行實(shí)例化肛走。
(2)exported:其他APP的組件是否可通過(guò)此別名來(lái)啟動(dòng)目標(biāo)Activity。true為可以录别,false為不可以朽色。如果為false,則只能由其所屬的APP或相同User ID的APP啟動(dòng)组题。
(3)icon:展示的圖標(biāo)葫男。
(4)label:展示的名字。
(5)name:別名的唯一字符串名字往踢,命名風(fēng)格和Java類名全路徑一樣腾誉,必須唯一。
(6)permission:通過(guò)別名啟動(dòng)目標(biāo)Activity所需要的權(quán)限峻呕。
(7)targetActivity:目標(biāo)Activity在Manifest中聲明的name利职。 -
meta-data
??以鍵值對(duì)的形式為其父級(jí)組件元素提供額外的數(shù)據(jù),且其父組件可以包含任意多個(gè)meta-data元素瘦癌。父組件元素包括:<application>猪贪、<activity>、<activity-alias>讯私、<service>热押、<receiver>、<provider>斤寇。最終meta-data的值都會(huì)被封裝到Bundle對(duì)象放到PackageItemInfo.metaData字段桶癣。
(1)name:meta-data的名字,必須具有唯一性娘锁。為了確保唯一性牙寞,最好用Java風(fēng)格的規(guī)范命名。
(2)value:對(duì)應(yīng)的值莫秆。
(3)resource:資源的引用间雀,此處為資源的ID。
-
service
聲明一個(gè)服務(wù)組件镊屎。
<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>
(1)description:對(duì)service做描述的字符串惹挟。
(2)directBootAware:是否可以在鎖屏的時(shí)候運(yùn)行。默認(rèn)值為false缝驳。
(3)enabled:是否可被系統(tǒng)實(shí)例化连锯。
(4)exported:是否允許其他APP的組件對(duì)其進(jìn)行調(diào)用或交互归苍。
(5)icon:service展示的圖標(biāo)。
(6)isolatedProcess:如果設(shè)置為true运怖,則此服務(wù)會(huì)運(yùn)行在一個(gè)獨(dú)立的進(jìn)程中霜医,此進(jìn)程與系統(tǒng)的其他進(jìn)程是分開的并且沒有自己的權(quán)限。唯一能夠與此服務(wù)通信的方法是通過(guò)服務(wù)的API驳规。
(7)label:展示給用戶看的服務(wù)名字。不設(shè)置的話默認(rèn)繼承application的label署海。
(8)name:服務(wù)子類全名吗购。
(9)permission:對(duì)service設(shè)置的權(quán)限保護(hù)。如果調(diào)用方未設(shè)置指定權(quán)限砸狞,則 startService(), bindService(), 或 stopService()不會(huì)起作用捻勉。如果此項(xiàng)未設(shè)置,則繼承application的permission項(xiàng)刀森,如果application也沒設(shè)置踱启,則Activity無(wú)權(quán)限。
(10)process:服務(wù)運(yùn)行所在的進(jìn)程名研底,默認(rèn)為APP運(yùn)行所在的進(jìn)程埠偿,與包同名。 -
receiver
聲明一個(gè)廣播接收器(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>
(1)directBootAware:是否可以在鎖屏的時(shí)候運(yùn)行冠蒋。默認(rèn)值為false。
(2)enabled:是否可被系統(tǒng)實(shí)例化乾胶。默認(rèn)為true抖剿。
(3)exported:是否可接收其他APP發(fā)送的廣播消息。
(4)icon:展示的圖標(biāo)识窿。
(5)label:展示給用戶看的名字
(6)name:廣播接收器子類的全名斩郎。
(7)permission:設(shè)置保護(hù)權(quán)限。
(8)process:廣播接收器運(yùn)行所在的進(jìn)程名喻频,默認(rèn)為APP運(yùn)行所在的進(jìn)程缩宜,與包同名。 -
provider
聲明內(nèi)容提供者(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>
(1)name:ContentProvider對(duì)應(yīng)的子類的全名脓恕。
(2)authorities:指定提供給外部訪問(wèn)的URI標(biāo)識(shí),可以設(shè)置多個(gè)窿侈,用分號(hào)隔開炼幔。
(3)enabled:是否可被系統(tǒng)實(shí)例化。
(4)directBootAware:是否可以在鎖屏的時(shí)候運(yùn)行史简。
(5)exported:是否可被其他APP訪問(wèn)乃秀。
(6)icon:對(duì)應(yīng)展示的圖標(biāo)肛著。
(7)initOrder:多個(gè)ContentProvider在同一個(gè)進(jìn)程實(shí)例化的順序,為整數(shù)值跺讯,大值會(huì)優(yōu)先進(jìn)行初始化枢贿。
(8)label:展示給用戶看的名字。
(9)process:設(shè)置ContentProvider運(yùn)行所在的進(jìn)程名刀脏。
(10)multiprocess:如果APP有多個(gè)進(jìn)程在運(yùn)行局荚,則是否設(shè)置多個(gè)ContentProvider的實(shí)例,每個(gè)實(shí)例對(duì)應(yīng)一個(gè)進(jìn)程愈污。
(11)syncable:是否設(shè)置數(shù)據(jù)同步耀态。
(12)permission:連接此ContentProvider并進(jìn)行讀寫操作所需的權(quán)限。
(13)readPermission:設(shè)置客戶端連接此ContentProvider進(jìn)行讀操作(查詢)所需的權(quán)限暂雹。
(14)writePermission:設(shè)置客戶端連接此ContentProvider進(jìn)行寫操作(查詢)所需的權(quán)限首装。
(15)grantUriPermissions:是否可給平常無(wú)權(quán)對(duì) Content Provider 數(shù)據(jù)的訪問(wèn)進(jìn)行臨時(shí)授權(quán) ,使之能夠?qū)?shù)據(jù)進(jìn)行操作杭跪。 -
path-permission
定義ContentProvider數(shù)據(jù)子集相關(guān)的路徑和訪問(wèn)所需權(quán)限仙逻。
<path-permission android:path="string" android:pathPrefix="string" android:pathPattern="string" android:permission="string" android:readPermission="string" android:writePermission="string" />
(1)path 用來(lái)匹配完整的路徑,如:content://example.com/a/b/c涧尿,這里的path為“/a/b/c”系奉。
(2)pathPrefix 用來(lái)匹配路徑的開頭部分,拿上面的 Uri 來(lái)說(shuō)姑廉,這里將 pathPrefix 的值為“/a”喜最。
(3)pathPattern:使用通配符的完整路徑。
(4)permission:設(shè)置訪問(wèn)所需的權(quán)限庄蹋,讀權(quán)限和寫權(quán)限瞬内。
(5)readPermission:讀權(quán)限。
(6)writePermissio:寫權(quán)限限书。 -
uses-library
定義APP必須鏈接的公共庫(kù)虫蝶, 本元素把程序包的類裝載器中需要包含的庫(kù)代碼通知系統(tǒng)。
<uses-library android:name="string" android:required=["true" | "false"] />
(1)name:代碼庫(kù)的名字倦西。
(2)required:設(shè)置為true的話能真,如果系統(tǒng)沒有name聲明對(duì)應(yīng)的庫(kù),則程序不能安裝扰柠。設(shè)置為false粉铐,沒有name聲明對(duì)應(yīng)的包也允許程序安裝,單在APP里要做好對(duì)缺少聲明庫(kù)的相關(guān)處理卤档。
大功告成蝙泼!
參考文章
Android知識(shí)點(diǎn)回顧之Manifest文件——來(lái)自掘金的大神,知識(shí)點(diǎn)總結(jié)真的很到位劝枣。學(xué)習(xí)到了汤踏!