David.Ko

          Follow my heart!
          posts - 100, comments - 11, trackbacks - 0, articles - 0
             :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          【轉(zhuǎn)】Manifest 概述

          Posted on 2009-10-28 13:47 David.Ko 閱讀(290) 評論(0)  編輯  收藏 所屬分類: Android
          轉(zhuǎn)載自:http://blog.csdn.net/xieyali/archive/2009/07/05/4323575.aspx

          任何 Android應(yīng)用程序的基礎(chǔ)都是 Manifest文件: Manifest.xml,這個文件保存在工程的根目錄下。在這個文件里聲明應(yīng)用程序用到的所有組件,例如: activities services,等等,而且說明這些組件如何組織到應(yīng)用程序系統(tǒng)中;例如:可以表明哪一個 activity(或者 activities)應(yīng)該出現(xiàn)在設(shè)備的主窗口中(例如: launcher)。

          當(dāng)你創(chuàng)建工程時,系統(tǒng)幫助生成一個原始的 manifest文件。對于只包含一個 activity的簡單的應(yīng)用程序,原始的 manifest文件夠了,或者只需要很小的改動。另外, manifest也可以很復(fù)雜,比如 Android自帶的 API樣例,該文件就超過 1000多行。你的應(yīng)用程序的 manifest行數(shù)大概也就介于此間吧。

          manifest文件的大部分有趣的功能會在以后相應(yīng)的章節(jié)更加詳細(xì)的介紹。比如 service元素會在創(chuàng)建 service章節(jié)詳細(xì)講述。現(xiàn)在,主要關(guān)注 manifest文件的作用和它的一般結(jié)構(gòu)。

          在文件開始,有根,文件基本上就正確

          manifest文件的根是這樣一個 manifest元素:

          <manifest xmlns:android="http://schemas.android.com/apk/res/android"
                package="com.commonsware.android.search">
                ...
          </manifest>

          注意命名空間聲明。奇怪的是,自動生成的 manifest文件,命名空間是應(yīng)用在屬性上,而不是元素上(例如,是 manifest,不是 android:manifest),然而,這種形式工作正確,只要 android不發(fā)生改變,就堅持用這種形式。

          根元素 manifest里面最有用的信息是 package屬性(奇怪的是 package前沒有命名空間)。這里,你可填成你的 java package的名子,以后在 manifest文件里,如果需要類的名子,就可以用點(diǎn)來代替 package的名子,例如:如果在 manifest文件需要引用 com.commonsware.android.search.Snicklefritz,你就可以寫成 .Snicklefitz,因為 com.commonsware.android.search已經(jīng)被定義成應(yīng)用程序的包。

          權(quán)限,特殊工具,和應(yīng)用程序

          manifest元素里有如下子元素:

          uses-permission元素,表示應(yīng)用程序必須據(jù)有這些權(quán)限才能工作正常- permissions章節(jié)

          permission元素,定義一些權(quán)限,當(dāng)其它的程序如果想使用你的程序的數(shù)據(jù)或者邏輯時,必須據(jù)有這些權(quán)限,參考 permissions章節(jié)

          instrumentation元素,表示某些代碼,當(dāng)一些重要的系統(tǒng)事件發(fā)生時,這些代碼被調(diào)用,例如:啟動一個 activities,打印 log或者監(jiān)視某些信息。

          uses-library元素,掛鉤( hook)進(jìn)可選的 android組件里,例如 mapping services

          application元素,定義 manifest描述的應(yīng)用程序的細(xì)節(jié)。

          在上面的例子中, uses-permission元素表明了應(yīng)用程序?qū)⒁褂玫囊恍┰O(shè)備的功能,在這個例子中,就是程序據(jù)有了定位自己的功能。 applicaton元素描述了一些 activities serives和其它組成應(yīng)用的一些組件。

          <manifest xmlns:android="http://schemas.android.com/apk/res/android"
             package="com.commonsware.android">
              <uses-permission
                   android:name="android.permission.ACCESS_LOCATION" />
              <uses-permission
                   android:name="android.permission.ACCESS_GPS" />
              <uses-permission
                   android:name="android.permission.ACCESS_ASSISTED_GPS" />
              <uses-permission
                    android:name="android.permission.ACCESS_CELL_ID" />
              <application>
                   ...
              </application>
          </manifest>

          應(yīng)用程序需要實(shí)現(xiàn)一些功能,對嗎?

          manifest文件最重要的部分就是 application元素的子元素。

          創(chuàng)建新工程時,默認(rèn)生成只含一個 activity元素的 manifest文件,如下:

          <manifest xmlns:android="http://schemas.android.com/apk/res/android"
                package="com.commonsware.android.skeleton">
               <application>
                       <activity android:name=".Now" android:label="Now">
                            <intent-filter>
                               <action android:name="android.intent.action.MAIN" />
                                <category android:name="android.intent.category.LAUNCHER" />
                            </intent-filter>
                      </activity>
                 </application>
          </manifest>

          這個 activity元素提供了如下信息, android:name-實(shí)現(xiàn) activity的類;和 android:label-當(dāng)運(yùn)行 activity時顯示的名字; intent-filter子元素-描述在什么條件下 activity才顯示。這個 activity元素設(shè)置在運(yùn)行時顯示這個 activity,現(xiàn)在你可以運(yùn)行它了。在后面的章節(jié),會看到有多個 activities的工程。

          可能還會有一個或者多個 receiver元素,表示在一定條件下,一些非 activites組件需要被觸發(fā),例如收到一條短信。這被稱作是 intent receivers,在后續(xù)章節(jié)會講到。

          可能還會有一個或者多個 provider元素,表示 content providers組件,它們負(fù)責(zé)提供數(shù)據(jù)給 activities使用,并且,如果有權(quán)限,其它應(yīng)用程序也可以使用它們提供的數(shù)據(jù)。它們把數(shù)據(jù)庫或者其它數(shù)據(jù)存儲包裝成一個接口 供其它應(yīng)用程序使用。后續(xù)章節(jié)會講怎么創(chuàng)建 content provides和如何使用 content provides。

          最后,可能會有一個或者多個 service元素,描述 services-獨(dú)立于 activity,并且長期運(yùn)行的一些代碼片段。最好的例子就是 mp3播放器,你想邊聽音樂,邊打開其它 activities,這時候 mp3播放器的使用界面被覆蓋。后面有兩章會講如何創(chuàng)建和使用 services。



          主站蜘蛛池模板: 阳山县| 格尔木市| 武穴市| 元江| 麻栗坡县| 沽源县| 宿州市| 承德市| 雷波县| 铅山县| 含山县| 贵定县| 成武县| 永胜县| 六安市| 甘洛县| 积石山| 上饶县| 拉孜县| 辉南县| 枝江市| 佛坪县| 克拉玛依市| 洛扎县| 长白| 五大连池市| 枣庄市| 肥东县| 长丰县| 出国| 陇西县| 同仁县| 宜黄县| 应用必备| 巴楚县| 黑水县| 井冈山市| 深水埗区| 峡江县| 腾冲县| 望江县|