-
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.changxm11.myapplication">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme"><activity
android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
2.AndroidManifest.xml結(jié)構(gòu)
<?xmlversion="1.0"encoding="utf-8"?>
<manifest>
<application>
<activity>
<intent-filter>
<action/>
<category/>
</intent-filter>
</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/>
</provider>
<uses-library/>
</application>
<uses-permission/>
<permission/>
<permission-tree/>
<permission-group/>
<instrumentation/>
<uses-sdk/>
<uses-configuration/>
<uses-feature/>
<supports-screens/>
</manifest>
3.下面由外向內(nèi)開始闡述~~
(1)第一層(<manifest>):(屬性)
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.woody.test"
android:sharedUserId="string"
android:sharedUserLabel="string resource"
android:versionCode="integer"
android:versionName="string"
android:installLocation=["auto" | "internalOnly" | "preferExternal"] >
</manifest>
A、xmlns:android
定義android命名空間,一般為http://schemas.android.com/apk/res/android,這樣使得Android中各種標(biāo)準(zhǔn)屬性能在文件中使用,提供了大部分元素中的數(shù)據(jù)。
B、package
指定本應(yīng)用內(nèi)java主程序包的包名,它也是一個應(yīng)用進(jìn)程的默認(rèn)名稱
C、sharedUserId
表明數(shù)據(jù)權(quán)限,因為默認(rèn)情況下,Android給每個APK分配一個唯一的UserID,所以是默認(rèn)禁止不同APK訪問共享數(shù)據(jù)的。若要共享數(shù)據(jù),第一可以采用Share Preference方法,第二種就可以采用sharedUserId了,將不同APK的sharedUserId都設(shè)為一樣,則這些APK之間就可以互相共享數(shù)據(jù)了。詳見:http://wallage.blog.163.com/blog/static/17389624201011010539408/
D、sharedUserLabel
一個共享的用戶名,它只有在設(shè)置了sharedUserId屬性的前提下才會有意義
E、versionCode
是給設(shè)備程序識別版本(升級)用的必須是一個interger值代表app更新過多少次,比如第一版一般為1,之后若要更新版本就設(shè)置為2,3等等。。。
F、versionName
這個名稱是給用戶看的,你可以將你的APP版本號設(shè)置為1.1版,后續(xù)更新版本設(shè)置為1.2、2.0版本等等。。。
G、installLocation
安裝參數(shù),是Android2.2中的一個新特性,installLocation有三個值可以選擇:internalOnly、auto、preferExternal
選擇preferExternal,系統(tǒng)會優(yōu)先考慮將APK安裝到SD卡上(當(dāng)然最終用戶可以選擇為內(nèi)部ROM存儲上,如果SD存儲已滿,也會安裝到內(nèi)部存儲上)
選擇auto,系統(tǒng)將會根據(jù)存儲空間自己去適應(yīng)
選擇internalOnly是指必須安裝到內(nèi)部才能運行
(注:需要進(jìn)行后臺類監(jiān)控的APP最好安裝在內(nèi)部,而一些較大的游戲APP最好安裝在SD卡上?,F(xiàn)默認(rèn)為安裝在內(nèi)部,如果把APP安裝在SD卡上,首先得設(shè)置你的level為8,并且要配置android:installLocation這個參數(shù)的屬性為preferExternal)
- 第二層(<application>):屬性
一個AndroidManifest.xml中必須含有一個Application標(biāo)簽,這個標(biāo)簽聲明了每一個應(yīng)用程序的組件及其屬性(如icon,label,permission等)
<application android:allowClearUserData=["true" | "false"]
android:allowTaskReparenting=["true" | "false"]
android:backupAgent="string"
android:debuggable=["true" | "false"]
android:description="string resource"
android:enabled=["true" | "false"]
android:hasCode=["true" | "false"]
android:icon="drawable resource"
android:killAfterRestore=["true" | "false"]
android:label="string resource"
android:manageSpaceActivity="string"
android:name="string"
android:permission="string"
android:persistent=["true" | "false"]
android:process="string"
android:restoreAnyVersion=["true" | "false"]
android:taskAffinity="string"
android:theme="resource or theme" >
</application>
A、android:allowClearUserData('true' or 'false')
用戶是否能選擇自行清除數(shù)據(jù),默認(rèn)為true,程序管理器包含一個選擇允許用戶清除數(shù)據(jù)。當(dāng)為true時,用戶可自己清理用戶數(shù)據(jù),反之亦然
B、android:allowTaskReparenting('true' or 'false')
是否允許activity更換從屬的任務(wù),比如從短信息任務(wù)切換到瀏覽器任務(wù)
C、android:backupAgent
這也是Android2.2中的一個新特性,設(shè)置該APP的備份,屬性值應(yīng)該是一個完整的類名,如com.project.TestCase,此屬性并沒有默認(rèn)值,并且類名必須得指定(就是個備份工具,將數(shù)據(jù)備份到云端的操作)
D、android:debuggable
這個從字面上就可以看出是什么作用的,當(dāng)設(shè)置為true時,表明該APP在手機上可以被調(diào)試。默認(rèn)為false,在false的情況下調(diào)試該APP,就會報以下錯誤:
Device XXX requires that applications explicitely declare themselves as debuggable in their manifest.
Application XXX does not have the attribute 'debuggable' set to TRUE in its manifest and cannot be debugged.
E、android:description/android:label
此兩個屬性都是為許可提供的,均為字符串資源,當(dāng)用戶去看許可列表(android:label)或者某個許可的詳細(xì)信息(android:description)時,這些字符串資源就可以顯示給用戶。label應(yīng)當(dāng)盡量簡短,之需要告知用戶該許可是在保護(hù)什么功能就行。而description可以用于具體描述獲取該許可的程序可以做哪些事情,實際上讓用戶可以知道如果他們同意程序獲取該權(quán)限的話,該程序可以做什么。我們通常用兩句話來描述許可,第一句描述該許可,第二句警告用戶如果批準(zhǔn)該權(quán)限會可能有什么不好的事情發(fā)生
F、android:enabled
Android系統(tǒng)是否能夠?qū)嵗搼?yīng)用程序的組件,如果為true,每個組件的enabled屬性決定那個組件是否可以被 enabled。如果為false,它覆蓋組件指定的值;所有組件都是disabled。
G、android:hasCode('true' or 'false')
表示此APP是否包含任何的代碼,默認(rèn)為true,若為false,則系統(tǒng)在運行組件時,不會去嘗試加載任何的APP代碼
一個應(yīng)用程序自身不會含有任何的代碼,除非內(nèi)置組件類,比如Activity類,此類使用了AliasActivity類,當(dāng)然這是個罕見的現(xiàn)象
(在Android2.3可以用標(biāo)準(zhǔn)C來開發(fā)應(yīng)用程序,可在androidManifest.xml中將此屬性設(shè)置為false,因為這個APP本身已經(jīng)不含有任何的JAVA代碼了)
H、android:icon
這個很簡單,就是聲明整個APP的圖標(biāo),圖片一般都放在drawable文件夾下
I、android:killAfterRestore
J、android:manageSpaceActivity
K、android:name
為應(yīng)用程序所實現(xiàn)的Application子類的全名。當(dāng)應(yīng)用程序進(jìn)程開始時,該類在所有應(yīng)用程序組件之前被實例化。
若該類(比方androidMain類)是在聲明的package下,則可以直接聲明android:name="androidMain",但此類是在package下面的子包的話,就必須聲明為全路徑或android:name="package名稱.子包名成.androidMain"
L、android:permission
設(shè)置許可名,這個屬性若在<application>上定義的話,是一個給應(yīng)用程序的所有組件設(shè)置許可的便捷方式,當(dāng)然它是被各組件設(shè)置的許可名所覆蓋的
M、android:presistent
該應(yīng)用程序是否應(yīng)該在任何時候都保持運行狀態(tài),默認(rèn)為false。因為應(yīng)用程序通常不應(yīng)該設(shè)置本標(biāo)識,持續(xù)模式僅僅應(yīng)該設(shè)置給某些系統(tǒng)應(yīng)用程序才是有意義的。
N、android:process
應(yīng)用程序運行的進(jìn)程名,它的默認(rèn)值為<manifest>元素里設(shè)置的包名,當(dāng)然每個組件都可以通過設(shè)置該屬性來覆蓋默認(rèn)值。如果你想兩個應(yīng)用程序共用一個進(jìn)程的話,你可以設(shè)置他們的android:process相同,但前提條件是他們共享一個用戶ID及被賦予了相同證書的時候
O、android:restoreAnyVersion
同樣也是android2.2的一個新特性,用來表明應(yīng)用是否準(zhǔn)備嘗試恢復(fù)所有的備份,甚至該備份是比當(dāng)前設(shè)備上更要新的版本,默認(rèn)是false
P、android:taskAffinity
擁有相同的affinity的Activity理論上屬于相同的Task,應(yīng)用程序默認(rèn)的affinity的名字是<manifest>元素中設(shè)定的package名
Q、android:theme
是一個資源的風(fēng)格,它定義了一個默認(rèn)的主題風(fēng)格給所有的activity,當(dāng)然也可以在自己的theme里面去設(shè)置它,有點類似style。