您好,登錄后才能下訂單哦!
2016-05-04
我喜歡,看別人寫的程序手記,那種真實的理解和感受,看這樣的文章,是一種享受,一種飄浮在意識空間中的獨立世界的純意識層面思考的快樂,全息而富有色彩,真實而無極限。
下面是看到一段移動端開發者的博文手記:
......“AndroidManifest.xml 是每個 android 程序中必須的文件。它位于 application 的根目錄,描述了 package 中的全局數據,包括了 package 中暴露的組件( activities, services, 等等),它們各自的實現類,各種能被處理的數據和啟動位置。”......
當我看到這段文字的時候,感到很精彩,顯然看到了作者條理邏輯分明的邏輯中樞神經,這種精彩,就像是看到了《***帝國》中描述的一個精密的控制中心,一個處理大廳或各條走廊和控制中心,,延伸開來各種處理組件和處理程序,結構清晰,邏輯豐富而充實。
以此為例,我試圖來理解看到的這段代碼:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.knight.android.test"
android:versionCode="1"
android:versionName="1.0" >
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name="AndroidTestActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<!-- 授權訪問網絡 -->
<uses-permission android:name="android.permission.INTERNET"/>
</manifest>
第一段顯然是標明xml的版本號和編碼字符集。
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中各種標準屬性能在文件中使用,提供了大部分元素中的數據。
B、package
指定本應用內Java主程序包的包名,它也是一個應用進程的默認名稱
C、sharedUserId
表明數據權限,因為默認情況下,Android給每個APK分配一個唯一的UserID,所以是默認禁止不同APK訪問共享數據的。若要共享數據,第一可以采用Share Preference方法,第二種就可以采用sharedUserId了,將不同APK的sharedUserId都設為一樣,則這些APK之間就可以互相共享數據了。詳見:http://wallage.blog.163.com/blog/static/17389624201011010539408/
D、sharedUserLabel
一個共享的用戶名,它只有在設置了sharedUserId屬性的前提下才會有意義
E、versionCode
是給設備程序識別版本(升級)用的必須是一個interger值代表app更新過多少次,比如第一版一般為1,之后若要更新版本就設置為2,3等等。
F、versionName
這個名稱是給用戶看的,你可以將你的APP版本號設置為1.1版,后續更新版本設置為1.2、2.0版本等等。。。
G、installLocation
安裝參數,是Android2.2中的一個新特性,installLocation有三個值可以選擇:internalOnly、auto、preferExternal
選擇preferExternal,系統會優先考慮將APK安裝到SD卡上(當然最終用戶可以選擇為內部ROM存儲上,如果SD存儲已滿,也會安裝到內部存儲上)
選擇auto,系統將會根據存儲空間自己去適應
選擇internalOnly是指必須安裝到內部才能運行
(注:需要進行后臺類監控的APP最好安裝在內部,而一些較大的游戲APP最好安裝在SD卡上。現默認為安裝在內部,如果把APP安裝在SD卡上,首先得設置你的level為8,并且要配置android:installLocation這個參數的屬性為preferExternal)
這位天才的博文總結如下:
此文件一個重要的地方就是它所包含的 intent-filters 。這些 filters 描述了 activity 啟動的位置和時間。每當一個 activity (或者操作系統)要執行一個操作,例如:打開網頁或聯系簿時,它創建出一個 intent 的對象。它能承載一些信息描述了你想做什么,你想處理什么數據,數據的類型,和一些其他信息。Android 比較了 intent 對象中和每個 application 所暴露的 intent-filter 中的信息,來找到最合適的 activity 來處理調用者所指定的數據和操作。
除了能聲明你程序中的 Activities, Content Providers, Services, 和 Intent Receivers,你還能指定 permissions 和 instrumentation (安全控制和測試)在 AndroidManifest.xml 文件中。天哪?!!這些都是什么啊?別著急,呵呵,這些都是運行手機app程序需要定義好的一些文件,以后會逐漸的知道,先不用管,看看有這么多的內容為我們服務,有多么好?
一般打開AS,一般我們首先會發現AndroidManifest.xml,這是什么文件呢?一個基本而重要的全局文件。
這是一個簡單的AndroidManifest.xml。
< ?xml version="1.0" encoding="utf-8"?>
< manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.my_domain.app.helloactivity">
< application android:label="@string/app_name">
< activity class=".HelloActivity">
< intent-filter>
< action android:value="android.intent.action.MAIN"/>
< category android:value="android.intent.category.LAUNCHER"/>
< /intent-filter>
< /activity>
< /application>
< /manifest>
值得一提一些常用之處:
· 幾乎所有的 AndroidManifest.xml (以及許多其他Android的xml的文件)在第一個元素中包含了命名空間的聲明xmlns:android="http://schemas.android.com/apk/res/android"。這樣使得Android中各種標準屬性能在文件中使用,提供了大部分元素中的數據。
· 大部分manifests包含了單個< application>的元素,它定義了所有的application級別組件和屬性,并能在package中使用。
· 任何被用戶看作頂層應用程序,并能被程序啟動器所用的package,需要包含至少一個Activity組件來支持MAIN操作和LAUNCHER種類,如上述代碼中所見。
這里是AndroidManifest.xml文件結構的一個詳細的列表,描述了所有能被使用的標記。
manifest
根節點,描述了package中所有的內容。在它之下能放置:
uses-permission
請求你的 package 正常運作所需賦予的安全許可。見 SecurityModel 來獲得許可的更多的信息。一個 manifest 能包含零個或更多此元素。
permission
聲明了安全許可來限制哪些程序能你 package 中的組件和功能。見 SecurityModel 來獲得許可的更多的信息。一個 manifest 能包含零個或更多此元素。
instrumentation
聲明了用來測試此 package 或其他 package 指令組件的代碼。見 Instrumentation 來獲得許可的更多的信息。一個 manifest 能包含零個或更多此元素。
application
包含 package 中 application 級別組件聲明的根節點。此元素也可包含 application 中全局和默認的屬性,如標簽,icon,主題,必要的權限,等等。一個 manifest 能包含零個或一個此元素(不允許多余一個)。在它之下能放置零個或更多下列組件聲明:
activity
Activity 是用來與用戶交互的主要工具。當用戶打開一個應用程序的初始頁面時一個 activity ,大部分被使用到的其他頁面也由不同的activity所實現并聲明在另外的 activity 標記中。
注意:每一個 activity 必須要一個 標記對應,無論它給外部使用或是只用于自己的 package 中。如果一個 activity 沒有對應的標記,你將不能運行它。
另外,為了支持運行時查找你的 activity, 你能包含一個或多個 元素來描述你 activity 所支持的操作:
intent-filter
聲明了指定的一組組件支持的 Intent 值,從而形成了 IntentFilter。除了能在此元素下指定不同類型的值,屬性也能放在這里來描述一個操作所需的唯一的標簽,icon 和其它信息。
action
組件支持的 Intentaction。
category
組件支持的 IntentCategory.
type
組件支持的 Intentdata MIME type.
schema
組件支持的 Intentdata URI scheme.
authority
組件支持的 Intentdata URI authority.
path
組件支持的 Intentdata URI path.
receiver
IntentReceiver 能使的 application 獲得數據的改變或者發生的操作,即使它當前不在運行。利用 activity 標記,你能選擇地包含一個或多個 receiver 所支持的 元素;
service
Service 是能在后臺運行任意時間的組件。利用 activity 標記,你能選擇地包含一個或多個 receiver 所支持的 元素;
provider
ContentProvider 是用來管理持久化數據并發布給其他應用程序使用的組件。AndroidManifest.xml 是每個 android 程序中必須的文件。它位于 application 的根目錄,描述了 package 中的全局數據,包括了 package 中暴露的組件( activities, services, 等等),它們各自的實現類,各種能被處理的數據和啟動位置。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。