亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

AndroidManifest.xml配置文件解析

2020-04-11 12:39:14
字體:
來源:轉載
供稿:網友

AndroidManifest.xml配置文件對于Android應用開發來說是非常重要的基礎知識,本文旨在總結該配置文件中重點的用法,以便日后查閱。下面是一個標準的AndroidManifest.xml文件樣例。

復制代碼 代碼如下:

<?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 配置 -->
<activity>
<intent-filter>
<action />
<category />
<data />
</intent-filter>
<meta-data />
</activity>
<activity-alias>
<intent-filter> . . . </intent-filter>
<meta-data />
</activity-alias>
<!-- Service 配置 -->
<service>
<intent-filter> . . . </intent-filter>
<meta-data/>
</service>
<!-- Receiver 配置 -->
<receiver>
<intent-filter> . . . </intent-filter>
<meta-data />
</receiver>
<!-- Provider 配置 -->
<provider>
<grant-uri-permission />
<meta-data />
</provider>
<!-- 所需類庫配置 -->
<uses-library />
</application>
</manifest>

從以上示例代碼中,我們可以看出Android配置文件采用XML作為描述語言,每個XML標簽都不同的含義,大部分的配置參數都放在標簽的屬性中,下面我們便按照以上配置文件樣例中的先后順序來學習Android配置文件中主要元素與標簽的用法。
<manifest>
AndroidManifest.xml配置文件的根元素,必須包含一個<application>元素并且指定xlmns:android和package屬性。xlmns:android指定了Android的命名空間,默認情況下是“http://schemas.android.com/apk/res/android”;而package是標準的應用包名,也是一個應用進程的默認名稱,以本書微博應用實例中的包名為例,即“com.app.demos”就是一個標準的Java應用包名,我們為了避免命名空間的沖突,一般會以應用的域名來作為包名。當然還有一些其他常用的屬性需要注意一下,比如android:versionCode是給設備程序識別版本用的,必須是一個整數值代表app更新過多少次;而android:versionName則是給用戶查看版本用的,需要具備一定的可讀性,比如“1.0.0”這樣的。<manifest>標簽語法范例如下。
<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>
<uses-permission>
為了保證Android應用的安全性,應用框架制定了比較嚴格的權限系統,一個應用必須聲明了正確的權限才可以使用相應的功能,例如我們需要讓應用能夠訪問網絡就需要配置“android.permission.INTERNET”,而如果要使用設備的相機功能,則需要設置“android.permission.CAMERA”等。<uses-permission>就是我們最經常使用的權限設定標簽,我們通過設定android:name屬性來聲明相應的權限名,比如在微博應用實例中,我們就是根據應用的所需功能聲明了對應的權限,相關代碼如下。
<manifest ...>
... ...
<!-- 網絡相關功能 -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!-- 讀取電話狀態 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<!-- 通知相關功能 -->
<uses-permission android:name="android.permission.VIBRATE" />
... ...
</manifest>
<permission>
權限聲明標簽,定義了供給<uses-permission>使用的具體權限,通常情況下我們不需要為自己的應用程序聲明某個權限,除非需要給其他應用程序提供可調用的代碼或者數據,這個時候你才需要使用<permission>標簽。該標簽中提供了android:name權限名標簽,權限圖標android:icon以及權限描述android:description等屬性,另外還可以和<permission-group>以及<permission-tree>配合使用來構造更有層次的、更有針對性權限系統。<permission>標簽語法范例如下。
<permission android:description="string resource"
android:icon="drawable resource"
android:label="string resource"
android:name="string"
android:permissionGroup="string"
android:protectionLevel=["normal" | "dangerous" | "signature" | "signatureOrSystem"] />
<instrumentation>
用于聲明Instrumentation測試類來監控Android應用的行為并應用到相關的功能測試中,其中比較重要的屬性有:測試功能開關android:functionalTest,profiling調試功能開關android:handleProfiling,測試用例目標對象android:targetPackage等。另外,我們需要注意的是Instrumentation對象是在應用程序的組件之前被實例化的,這點在組織測試邏輯的時候需要被考慮到。<instrumentation>標簽語法范例如下。
<instrumentation android:functionalTest=["true" | "false"]
android:handleProfiling=["true" | "false"]
android:icon="drawable resource"
android:label="string resource"
android:name="string"
android:targetPackage="string" />
<uses-sdk>
用于指定Android應用中所需要使用的SDK的版本,比如我們的應用必須運行于Android 2.0以上版本的系統SDK之上,那么就需要指定應用支持最小的SDK版本數為5;當然,每個SDK版本都會有指定的整數值與之對應,比如我們最常用的Android 2.2.x的版本數是8。當然,除了可以指定最低版本之外,<uses-sdk>標簽還可以指定最高版本和目標版本,語法范例如下。
<uses-sdk android:minSdkVersion="integer"
android:targetSdkVersion="integer"
android:maxSdkVersion="integer" />
<uses-configuration>與<uses-feature>
這兩個標簽都是用于描述應用所需要的硬件和軟件特性,以便防止應用在沒有這些特性的設備上安裝。<uses-configuration>標簽中,比如有些設備帶有D-pad或者Trackball這些特殊硬件,那么android:reqFiveWayNav屬性就需要設置為true;而如果有一些設備帶有硬件鍵盤,android:reqHardKeyboard也需要被設置為true。另外,如果設備需要支持藍牙,我們可以使用<uses-feature android:name="android.hardware.bluetooth" />來支持這個功能。這兩個標簽主要用于支持一些特殊的設備中的應用,兩個標簽的語法范例分別如下。
<uses-configuration android:reqFiveWayNav=["true" | "false"]
android:reqHardKeyboard=["true" | "false"]
android:reqKeyboardType=["undefined" | "nokeys" | "qwerty" | "twelvekey"]
android:reqNavigation=["undefined" | "nonav" | "dpad" | "trackball" | "wheel"]
android:reqTouchScreen=["undefined" | "notouch" | "stylus" | "finger"] />
<uses-feature android:name="string"
android:required=["true" | "false"]
android:glEsVersion="integer" />
<uses-library>
用于指定Android應用可使用的用戶庫,除了系統自帶的android.app、android.content、android.view和android.widget這些默認類庫之外,有些應用可能還需要一些其他的Java類庫作為支持,這種情況下我們就可以使用<uses-library>標簽讓ClassLoader加載其類庫供Android應用運行時用。<uses-library>標簽的用法很簡單,以下是語法范例。
<uses-library android:name="string"
android:required=["true" | "false"] />
小貼士
當運行Java程序時,首先運行JVM(Java虛擬機),然后再把Java類加載到JVM里頭運行,負責加載Java類的這部分就叫做ClassLoader。當然,ClassLoader是由多個部分構成的,每個部分都負責相應的加載工作。當運行一個程序的時候,JVM啟動,運行BootstrapClassLoader,該ClassLoader加載java核心API(ExtClassLoader和AppClassLoader也在此時被加載),然后調用ExtClassLoader加載擴展API,最后AppClassLoader加載CLASSPATH目錄下定義的Class,這就是一個Java程序最基本的加載流程。
<supports-screens>
對于一些應用或者游戲來說,只能支持某些屏幕大小的設備或者在某些設備中的效果比較好,我們就會使用<supports-screens>標簽來指定支持的屏幕特征。其中比較重要的屬性包括:屏幕自適應屬性android:resizeable,小屏(android:smallScreens)、中屏(android:normalScreens)、大屏(android:largeScreens)和特大屏(android:xlargeScreens)支持屬性,按屏幕渲染圖像屬性android:anyDensity以及最小屏幕寬度屬性android:requiresSmallestWidthDp等。<supports-screens>標簽的語法范例如下。
<supports-screens android:resizeable=["true"| "false"]
android:smallScreens=["true" | "false"]
android:normalScreens=["true" | "false"]
android:largeScreens=["true" | "false"]
android:xlargeScreens=["true" | "false"]
android:anyDensity=["true" | "false"]
android:requiresSmallestWidthDp="integer"
android:compatibleWidthLimitDp="integer"
android:largestWidthLimitDp="integer"/>
<application>
應用配置的根元素,位于<manifest>下層,包含所有與應用有關配置的元素,其屬性可以作為子元素的默認屬性,常用的屬性包括:應用名android:label,應用圖標android:icon,應用主題android:theme等。當然,<application>標簽還提供了其他豐富的配置屬性,由于篇幅原因就不列舉了,大家可以打開Android SDK文檔來進一步學習,以下是語法范例。
<application android:allowTaskReparenting=["true" | "false"]
android:backupAgent="string"
android:debuggable=["true" | "false"]
android:description="string resource"
android:enabled=["true" | "false"]
android:hasCode=["true" | "false"]
android:hardwareAccelerated=["true" | "false"]
android:icon="drawable resource"
android:killAfterRestore=["true" | "false"]
android:label="string resource"
android:logo="drawable 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>
<activity>
Activity活動組件(即界面控制器組件)的聲明標簽,Android應用中的每一個Activity都必須在AndroidManifest.xml配置文件中聲明,否則系統將不識別也不執行該Activity。<activity>標簽中常用的屬性有:Activity對應類名android:name,對應主題android:theme,加載模式android:launchMode(詳見2.1.3.4節),鍵盤交互模式android:windowSoftInputMode等,其他的屬性用法大家可以參考Android SDK文檔學習。另外,<activity>標簽還可以包含用于消息過濾的<intent-filter>元素,當然還有可用于存儲預定義數據的<meta-data>元素,以下是<activity>標簽的語法范例。
<activity android:allowTaskReparenting=["true" | "false"]
android:alwaysRetainTaskState=["true" | "false"]
android:clearTaskOnLaunch=["true" | "false"]
android:configChanges=["mcc", "mnc", "locale",
"touchscreen", "keyboard", "keyboardHidden",
"navigation", "orientation", "screenLayout",
"fontScale", "uiMode"]
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=["multiple" | "singleTop" | "singleTask" | "singleInstance"]
android:multiprocess=["true" | "false"]
android:name="string"
android:noHistory=["true" | "false"]
android:permission="string"
android:process="string"
android:screenOrientation=["unspecified" | "user" | "behind" |
"landscape" | "portrait" |
"sensor" | "nosensor"]
android:stateNotNeeded=["true" | "false"]
android:taskAffinity="string"
android:theme="resource or theme"
android:windowSoftInputMode=["stateUnspecified",
"stateUnchanged", "stateHidden",
"stateAlwaysHidden", "stateVisible",
"stateAlwaysVisible", "adjustUnspecified",
"adjustResize", "adjustPan"] >
... ...
</activity>
<activity-alias>
Activity組件別名的聲明標簽,簡單來說就是Activity的快捷方式,屬性android:targetActivity表示的就是其相關的Activity名,當然必須是前面已經聲明過的Activity。除此之外,其他比較常見的屬性有:Activity別名名稱android:name,別名開關android:enabled,權限控制android:permission等。另外,我們還需要注意的是,Activity別名也是一個獨立的Activity,可以擁有自己的<intent-filter>和<meta-data>元素,其語法范例如下。
<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>
<intent-filter>與<action>、<category>、<data>
<intent-filter>用于Intent消息過濾器的聲明,在前面的2.1.3.2節中我們已經對Android應用框架中的Intent消息作過比較詳細的介紹,我們了解到Intent消息對于Android應用系統來說,是非常重要的“粘合劑”,<intent-filter>元素可以放在<activity>、<activity-alias>、<service>和<receiver>元素標簽中,來區分可用于處理消息的Activity控制器、Service服務和廣播接收器Broadcast Receiver。另外,我們還知道Intent消息還包含有名稱、動作、數據、類別等幾個重要屬性。這點與該標簽的寫法也有一定的關系,比如<intent-filter>中必須包含有<action>元素,即用于描述具體消息的名稱;<category>標簽則用于表示能處理消息組件的類別,即該Action所符合的類別;而<data>元素則用于描述消息需要處理的數據格式,我們甚至還可以使用正則表達式來限定數據來源。當然,這些元素和標簽的具體用法我們還需要慢慢學習,下面是標準<intent-filter>元素標簽的語法范例。
<intent-filter android:icon="drawable resource"
android:label="string resource"
android:priority="integer" >
<action android:name="string" />
<category android:name="string" />
<data android:host="string"
android:mimeType="string"
android:path="string"
android:pathPattern="string"
android:pathPrefix="string"
android:port="string"
android:scheme="string" />
</intent-filter>
<meta-data>
用于存儲預定義數據,和<intent-filter>類似,<meta-data>也可以放在<activity>、<activity-alias>、<service>和<receiver>這四個元素標簽中。Meta數據一般會以鍵值對的形式出現,個數沒有限制,而這些數據都將被放到一個Bundle對象中,程序中我們則可以使用ActivityInfo、ServiceInfo甚至ApplicationInfo對象的metaData屬性中讀取。假設我們在一個Activity中定義了一個<meta-data>元素,相關示例用法如下。
<activity...>
<meta-data android:name="testData" android:value="Test Meta Data"></meta-data>
</activity>
ActivityInfo info = this.getPackageManager()
.getActivityInfo(getComponentName(), PackageManager.GET_META_DATA);
String testData = info.metaData.getString("testData");
System.out.println("testData:" + testData);
<service>
Service服務組件的聲明標簽,用于定義與描述一個具體的Android服務,主要屬性有:Service服務類名android:name,服務圖標android:icon,服務描述android:label以及服務開關android:enabled等。關于Service服務組件的概念和用法請參考2.1.4.2節的內容,以下是<service>標簽的語法范例。
<service 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" >
... ...
</service>
<receiver>
Boardcast Receiver廣播接收器組件的聲明標簽,用于定義與描述一個具體的Android廣播接收器,其主要屬性和<service>標簽有些類似:Boardcast Receiver接收器類名android:name,接收器圖標android:icon,接收器描述android:label以及接收器開關android:enabled等。關于Boardcast Receiver廣播接收器組件的概念和用法請參考2.1.4.3節的內容,以下是<receiver>標簽的語法范例。
<receiver 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>
<provider>與<grant-uri-permission>
除Activity、Service和Boardcast Receiver之外的另一個“四大組件”,也就是Content Provider內容提供者的聲明標簽。關于內容提供者組件的概念和用法請參考2.1.4.4節的內容,不再贅述。<provider>標簽除了和其他組件相同的android:name、android:icon和android:label等基礎屬性之外,還提供了用于支持其功能的特殊屬性,如:內容提供者標識名稱android:authorities,對指定URI授予權限標識android:grantUriPermission以及具體的讀、寫權限,即android:readPermission和android:writePermission等。當然,這些屬性的具體用法我們還需要慢慢學習,以下是<provider>標簽的語法范例。
<provider android:authorities="list"
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>

補充:本站還提供了一個關于Android Manifest功能與權限的在線查詢表供大家參考查詢:

Android Manifest功能與權限描述大全:

http://tools.VeVB.COm/table/AndroidManifest

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美一级淫片videoshd| 亚洲欧美日韩高清| 性欧美xxxx交| 久久久久女教师免费一区| 国模gogo一区二区大胆私拍| 久久久视频在线| 久久久久女教师免费一区| 91精品国产综合久久久久久蜜臀| 国产成人极品视频| 91po在线观看91精品国产性色| 精品国产老师黑色丝袜高跟鞋| 日韩精品免费综合视频在线播放| 亚洲精品视频二区| www.日韩免费| 亚洲国产精品久久| 国产精品视频永久免费播放| 久久香蕉频线观| 永久免费精品影视网站| 日韩精品在线免费观看视频| 亚洲经典中文字幕| 欧美日韩一区二区三区在线免费观看| 亚洲国产婷婷香蕉久久久久久| 日日骚久久av| 亚洲精品suv精品一区二区| 国产日本欧美一区二区三区| 国产免费一区二区三区香蕉精| 亚洲人精选亚洲人成在线| 色综合久久悠悠| 日韩在线观看成人| 日韩欧美一区视频| 欧美裸体xxxxx| www.欧美免费| 欧美中文在线观看国产| 日韩av网址在线| 668精品在线视频| 亚洲女同性videos| 国产精品久久久精品| 欧美日韩免费在线| 亚洲第一福利视频| 精品美女国产在线| 日韩av在线免费看| 视频直播国产精品| 亚洲国产高清福利视频| 国产伦精品免费视频| 国产精品伦子伦免费视频| 日韩av高清不卡| 亚洲剧情一区二区| 国产亚洲欧洲黄色| 亚洲风情亚aⅴ在线发布| 亚洲精品中文字幕女同| 奇米一区二区三区四区久久| 成人看片人aa| 精品国产一区二区三区在线观看| 国产精品久久久久影院日本| 在线成人激情黄色| 亚洲精品国产suv| 精品视频久久久| 国产精品日韩一区| 国产精品美女主播在线观看纯欲| 热99精品只有里视频精品| 青青精品视频播放| 日韩在线播放av| 成人黄色片网站| 中文字幕亚洲无线码a| 亚洲精品网址在线观看| 国产精品久久不能| 日韩欧美大尺度| 亚洲国产福利在线| 91理论片午午论夜理片久久| 一本大道久久加勒比香蕉| 午夜精品三级视频福利| 成人伊人精品色xxxx视频| 成人午夜小视频| 国产性色av一区二区| 国产精品444| 久久视频在线直播| 欧美巨大黑人极品精男| 热久久免费国产视频| 成人黄色影片在线| 亚洲aaa激情| 亚洲精品久久久久久久久久久| 91av在线视频观看| 国产精品嫩草视频| 26uuu亚洲国产精品| 亚洲免费精彩视频| 欧美在线观看网站| 亚洲精品动漫100p| 欧美成人午夜免费视在线看片| 日韩精品免费在线播放| 国产香蕉一区二区三区在线视频| www.亚洲成人| 久久免费福利视频| 亚洲欧美国产日韩中文字幕| 国产精品96久久久久久又黄又硬| 亚洲高清一二三区| 精品久久久久久亚洲国产300| 日韩视频免费在线观看| 欧美电影免费观看大全| 亚洲xxxxx性| 欧美激情第6页| 美女扒开尿口让男人操亚洲视频网站| 国产精品热视频| 亚洲欧美一区二区三区情侣bbw| 日韩欧美一区二区三区| 欧美性videos高清精品| 97在线视频国产| 2025国产精品视频| 伦理中文字幕亚洲| 亚洲欧洲高清在线| 久久久久久久久久久免费| 91精品国产色综合久久不卡98| 91久久精品国产91久久| 97视频在线观看免费高清完整版在线观看| 亚洲精品美女在线观看| 亚洲999一在线观看www| 国产精品盗摄久久久| 欧美激情影音先锋| 成人在线视频网| 日韩免费不卡av| 国产精品成人久久久久| 久久亚洲精品一区| 91影视免费在线观看| 欧美日韩在线免费| 欧美丰满老妇厨房牲生活| 欧美成人精品h版在线观看| 中文字幕日韩av电影| 亚洲第一免费网站| 欧美限制级电影在线观看| 免费91麻豆精品国产自产在线观看| 欧美裸体xxxx极品少妇软件| 国产日韩在线亚洲字幕中文| 4388成人网| 亚洲精品xxxx| 久久久国产精品一区| 日韩视频永久免费观看| 九九热这里只有精品免费看| 国产精品视频午夜| 97精品欧美一区二区三区| 成人激情电影一区二区| 国产91热爆ts人妖在线| 久久人人爽人人爽爽久久| 亚洲精品videossex少妇| 色婷婷av一区二区三区久久| 国产精品老牛影院在线观看| 欧美夜福利tv在线| 91精品国产91久久久久| 久久精品91久久久久久再现| 欧美一级电影在线| 日韩中文字幕网站| 亚洲欧美制服另类日韩| 亚洲国产日韩欧美在线图片| 亚洲石原莉奈一区二区在线观看| 国产精品无码专区在线观看| 韩国三级日本三级少妇99| 精品国模在线视频| 大量国产精品视频| 91亚洲精品一区| 欧美电影在线观看| 午夜伦理精品一区| 日韩成人av网| 欧美黄色成人网| 国产欧美日韩精品专区| 精品福利视频导航| 色先锋久久影院av|