Android資訊清單檔詳解(一) ---- 一切從<manifest>開始

來源:互聯網
上載者:User

標籤:android

在AndroidManifest.xml檔案中,首先看到是的<manifest>節點,它是整個應用程式的基本屬性,涵蓋了預設進程名字,應用程式識別碼,安裝位置,對系統的要求以及應用程式的版本等。它是AndroidManifest.xml檔案的根節點,其中必須包含一個<application>節點,並且必須指定xmlns:android和package屬性,其文法如下面的代碼所示:


<manifest xmlns:android="http://schemas.android.com/apk/res/android"

package="string"

android:sharedUserId="string"

android:sharedUserLabel="string resource"

android:versionCode="integer"

android:versionName="string"

android:installLocation=["auto"|"internalOnly"|"preferExternal"]>

.............

</manifest>


需要注意的是,在上面的描述的眾多屬性中,除了xmlns和package節點外,其餘都是可選節點,Android為它們提供了預設值。接下來,我們就來詳細的說明<manifest>節點中這些屬性的含義及其作用。


1.xmlns:android屬性——定義命名空間

這個屬性定義了這個XML檔案所使用的命名空間。如果需要指定特殊的命名空間,就需要手動編寫代碼,基本格式如下:


xmlns:<命名空間標識>="http://schemas.android.com/apk/res/<完整的包名>"


注意:代碼中的<>部分必須填寫的部分,千萬不可遺漏!


我們就從萬能的HelloWorld開始講解,開啟最新的android開發工具android studio,建立一個名為HelloWorld的項目,項目會自動產生AndroidManifest.xml檔案,我們來看看它的結構。




如果“標識”不匹配,產生的結果如所示:


錯誤提示:



“資源所在包名“是一個必須存在的Java包名,如果不存在,同樣也會出錯。


看到了以解,大家明白了吧!標識和資源套件名等一定要統一,不能隨性而寫,否則無論怎麼折騰都只能原地踏步了。切記!


2.package屬性——應用程式的身份證


package屬性唯一標識了一個應用程式。注意,它是唯一的!同樣,它也是應用程式進程的預設名字以及應用程式中每個Activity的預設任務(taskAffinity)。通常情況下,當我們完成建立的時候,它就有了預設值。那麼,這些預設的名字到底從哪裡來的呢?如:



運行此程式,此時Android裝置就會為這個應用啟動一個這樣的進程,如:



看清楚了嗎?說到這裡,你可能會冒出一個想法:要是我安裝另一個有相同package屬性的應用程式,會有什麼事情發生呢?會提示如下錯誤:


Failure[INSTALL_FAILED_ALREADY_EXSIST]


注意:除非特殊需要,否則不建議修改package屬性的值!原因是package是唯一標識了我們應用程式的屬性,如果你試圖改變它的值,那麼系統通常會認為這是一個不同的應用程式,會導致擁有前一版本應用程式的使用者無法擁有新版本的應用程式。


3.android:sharedUserId屬性——共用資料


該屬性定義了需要和其他應用程式共用的Linux使用者ID。預設情況下,Android系統為每一個應用程式分配一個唯一的使用者ID。然而,當這個屬性在多個應用程式中被設定為相同值的時候,它們將共用一個使用者ID。這樣做的好處是,它們之間可以相互訪問彼此的資料,如有需要,它們還將在相同的進程中運行。Helloworld應用並沒有設定這個屬性,這就意味著它沒有和別的應用程式存在共用關係,這樣它們 之間就需要通過其他手段(如處理序間通訊)實現資料互訪。


與android:sharedUserId屬性相關的屬性還有android:sharedUserLabel,這個屬性給共用的使用者ID定義了一個使用者可讀的標籤。這個標籤必須用字串資源來設定,不能使用原生的字串。這個屬性在API  LEVEL3中引用,只有設定了sharedUserId屬性時才有意義。


4.android:versionCode屬性——組建號


android:versionCode屬性的值是一個組建號,用於確定這個版本是否比另一個版本更新,數字越大表明它就越新。它不是顯示給使用者看的版本號碼,而是由versionName屬性設定的號碼。版本號碼將決定一些服務的行為,比如替換應用程式時是否執行備份還原作業等。


該號碼必須設為整數,如100。此外,我們可以隨心所欲地定義這個整數,只要每個繼任的版本能有一個更大的數字即可。例如,它可以是一個編譯號碼。


5.android:versionName屬性——顯示給使用者的版本號碼


android:versionName屬性的值是顯示給使用者的版本號碼,它可以被設定為一個原始字串或者一個字串資源的引用。這個字串除了要顯示給使用者外,沒有其他的目的。在HelloWorld中,顯示給使用者的版本號碼為1.0,如:



6.android:installLocation屬性——安裝位置


該屬性定義了應用程式預設的安裝位置,共有3個可選值,其形式如下:


android:installLocation=["auto"|"internalOnly"|"preferExternal"]


下表說明了這3個可選值的含義。


描述
auto 應用程式可能被安裝到外部存放裝置中,但預設情況下系統將會把應用程式安裝到內部存放裝置中。如果記憶體不足,那麼系統將會把應用程式安裝到外部存放裝置中。
                                      internalOnly                                               應用程式必須安裝到裝置的內部存放裝置中。如果設定了這個值,那意味著應用程式將永遠不會安裝到外部存放裝置中去。如果記憶體不足,那麼系統將不會安裝這個APK。在沒有設定android:installLocation屬性的情況下,internalOnly是該屬性的預設值。
preferExternal 應用程式將會被安裝到外部存放裝置中,如果系統不支援外部存放裝置或者外部裝置已滿,那麼系統將會把這個應用程式安裝到內部存放裝置中。


著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

Android資訊清單檔詳解(一) ---- 一切從<manifest>開始

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.