Android基础知识之Manifest文件的组织结构
原文:http://android.eoe.cn/topic/android_sdk
是AndroidManifest.xml文件中的根標(biāo)簽,她必須包含一個(gè)標(biāo)簽和指定的xmlns:android、 package兩個(gè)屬性。
屬性:
xmlns:android
定義了Android的命名空間。這個(gè)屬性一般可以設(shè)置為:
"http://schemas.android.com/apk/res/android".
package
一個(gè)Java語言風(fēng)格的應(yīng)用程序包名,這個(gè)包名必須唯一。這個(gè)包名可以包含大寫或小寫字母('A'到'Z'、'a'到'z')、數(shù)字和下劃線('_')。當(dāng)然個(gè)別 包名最好還是以字母開頭比較好。
為了避免和其他開發(fā)人員沖突,你應(yīng)該使用互聯(lián)網(wǎng)域名作為你的基礎(chǔ)包名(域名的反寫)。例如,Google發(fā)布的應(yīng)用程序包名是以com.google開頭的,所以你絕不要使用usr.example來發(fā)布你的應(yīng)用程序。
包名作為應(yīng)用程序的唯一標(biāo)示,同時(shí)它也是應(yīng)用進(jìn)程(application process)屬性的默認(rèn)名稱(詳情參考標(biāo)簽的android:process屬性),也是activity的任務(wù)關(guān)聯(lián)(task affinity)屬性的默認(rèn)值(詳情參考標(biāo)簽的taskAffinity屬性)。
* 注意* :你一旦發(fā)布了應(yīng)用程序,包名就不能修改了。這個(gè)包名定義了你的應(yīng)用程序的身份,所以如果你修改包名,它會(huì)被認(rèn)為是一個(gè)完全不同的應(yīng)用程序,從而以前版本的用戶無法更新到新的版本。
android:sharedUserId
指定一個(gè)Linux用戶的ID,這個(gè)ID會(huì)被其他應(yīng)用程序所共享。通常情況下,Android會(huì)給每個(gè)應(yīng)用程序分配一個(gè)唯一標(biāo)示他們的ID。然而,如果多個(gè)應(yīng)用程序的android:sharedUserId屬性值相同且簽署了相同的證書,它們將共享相同的ID。共享相同ID的應(yīng)用程序可以訪問彼此的數(shù)據(jù),如果需要的話,還會(huì)運(yùn)行同一個(gè)進(jìn)程中。
android:sharedUserLabel
為android:sharedUserId而生的一個(gè)用戶只讀標(biāo)簽,這個(gè)標(biāo)簽設(shè)值的時(shí)候必須引用string資源文件,而不能直接使用string。
這個(gè)屬性在API Level3里將介紹到。只有android:sharedUserId屬性設(shè)置的時(shí)候android:sharedUserLabel屬性才有意義。
android:versionCode
內(nèi)部版本號(hào)。這個(gè)數(shù)字用來確定當(dāng)前版本是否比另一個(gè)版本更新,數(shù)字越大版本越新。這個(gè)版本號(hào)并不會(huì)展現(xiàn)給用戶,真正展現(xiàn)給用戶的版本號(hào)是versionName這個(gè)屬性的值。
這個(gè)值必須是整數(shù),比如“100”。你可以任意定義它的值,只要后續(xù)版本是更高的數(shù)字。例如,它可以是一個(gè)編號(hào):x.y這種格式的,你只需要把x和y單獨(dú)的轉(zhuǎn)化成數(shù)字就可以了(可以通過lower and upper 16 bits),或者你你可以在發(fā)布新版本的時(shí)候簡單加1。
android:versionName
這個(gè)版本號(hào)就是展現(xiàn)給用戶的。這個(gè)屬性可以直接設(shè)值或引用string資源文件。這個(gè)版本號(hào)展現(xiàn)給用戶并沒有別的目的,這個(gè)versionCode屬性意味著有重大的版本變化。
android:installLocation
應(yīng)用程序的默認(rèn)的安裝位置。
以下關(guān)鍵字字符串:
<!-- 表格開始 -->
{|style="border-spacing: 0px;margin: 4px 4px; width: 90%; border-left:1px solid #ccc;border-top:1px solid #ccc; "
<!-- 這段是表頭 -->
|-style="background:#DEE8F1; "
! style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px;" | 關(guān)鍵字
! style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px;" | 描述
<!-- 這段是表格 -->
|- style=" vertical-align:top;"
| style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " | "internalOnly"
| style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " | 應(yīng)用程序會(huì)只在內(nèi)部存儲(chǔ)設(shè)備上安裝。如果設(shè)了這個(gè)值,這個(gè)應(yīng)用程序就不會(huì)在外部存儲(chǔ)設(shè)備上安裝,如果這時(shí)候內(nèi)部存儲(chǔ)設(shè)備空間滿了,系統(tǒng)就不會(huì)安裝這個(gè)應(yīng)用程序了。如果你不定義android:installLocation屬性的話,它的默認(rèn)值就是internalOnly。
|- style=" vertical-align:top;"
| style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " | "auto"
| style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " | 應(yīng)用程序可以安裝在外部存儲(chǔ)設(shè)備上,但是系統(tǒng)默認(rèn)安裝在內(nèi)部存儲(chǔ)設(shè)備上。不過盡管已經(jīng)安裝完成,用戶還是可以通過系統(tǒng)設(shè)置來把應(yīng)用程序移動(dòng)到內(nèi)部存儲(chǔ)設(shè)備上或者外部存儲(chǔ)設(shè)備上(移動(dòng)到SD卡 or 移動(dòng)到手機(jī)內(nèi)存)。
|- style=" vertical-align:top;"
| style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " | "preferExternal"
| style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " | 應(yīng)用程序大多會(huì)安裝到外部存儲(chǔ)設(shè)備上(SD卡),但是系統(tǒng)并不會(huì)保證這個(gè)請(qǐng)求會(huì)被優(yōu)先處理。比如說當(dāng)外部存儲(chǔ)設(shè)備不可用或者滿了或者應(yīng)用程序使用了forward-locking(不支持外部存車設(shè)備的機(jī)制)機(jī)制,這個(gè)時(shí)候應(yīng)用程序就會(huì)被安裝到內(nèi)部存儲(chǔ)設(shè)備上,不過盡管已經(jīng)安裝完成,用戶還是可以通過系統(tǒng)設(shè)置來把應(yīng)用程序移動(dòng)到內(nèi)部存儲(chǔ)設(shè)備上或者外部存儲(chǔ)設(shè)備上(移動(dòng)到SD卡 or 移動(dòng)到手機(jī)內(nèi)存)。
|}
<!-- 表格結(jié)束 -->
* 注意:* 如果你使用了Google Play的Copy Protection組件,你的應(yīng)用程序?qū)⒉粫?huì)安裝到SD卡上,不過你可以用同是Google Play的Application Licensing來代替,這樣你的應(yīng)用程序就又可以安裝不管是內(nèi)部還是外部存儲(chǔ)設(shè)備上,當(dāng)然包括SD。
* 提示:* 默認(rèn)情況下,你的應(yīng)用程序只能安裝到內(nèi)部存儲(chǔ)設(shè)備上,而不能安裝到外部存儲(chǔ)設(shè)備上,除非你定義了android:installLocation的屬性值為auto" or "preferExternal"。
當(dāng)應(yīng)用程序安裝到外部存儲(chǔ)設(shè)備上的時(shí)候:
* apk安裝文件會(huì)保存在外部存儲(chǔ)設(shè)備上,但是與應(yīng)用程序相關(guān)的任何數(shù)據(jù)(比如數(shù)據(jù)庫)仍然會(huì)保存在內(nèi)部存儲(chǔ)設(shè)備上。
* 保存apk安裝文件的容器(SD卡)會(huì)對(duì)其進(jìn)行加密,只允許在當(dāng)前設(shè)備上運(yùn)行(用戶是沒有辦法直接把SD卡移動(dòng)到另一臺(tái)設(shè)備上并進(jìn)行安裝的)。盡管如此,同一個(gè)設(shè)備還是可以使用多個(gè)SD卡。
* 當(dāng)用戶有需求的時(shí)候,應(yīng)用程序還是可以移動(dòng)到內(nèi)部存儲(chǔ)設(shè)備(手機(jī)內(nèi)存)上的。
當(dāng)然用戶也會(huì)有這樣的需求:把應(yīng)用程序從內(nèi)部存儲(chǔ)設(shè)備移動(dòng)到外部存儲(chǔ)設(shè)備。但是如果應(yīng)用程序使用了默認(rèn)的android:installLocation屬性即internalOnly屬性,系統(tǒng)是不能夠把應(yīng)用程序從內(nèi)部存儲(chǔ)設(shè)備移動(dòng)到外部存儲(chǔ)設(shè)備上的。
關(guān)于android:installLocation這個(gè)屬性,詳情請(qǐng)參考App Install Location (包括如何處理向后兼容的問題)
參考:API Level 8。
參考:
API Level1下的所有屬性,在屬性描述中單獨(dú)注明的除外
轉(zhuǎn)載于:https://www.cnblogs.com/vus520/p/3152718.html
總結(jié)
以上是生活随笔為你收集整理的Android基础知识之Manifest文件的组织结构的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 为什么必须是final的呢?
- 下一篇: “稽首前致诚”下一句是什么