`
streamh
  • 浏览: 8315 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

AndroidManifest 解析

阅读更多
預設的 Activity 清單

我們使用 eclipse Android 開發工具打開「BMI/AndroidManifest.xml」檔案。切換到「AndroidManifest.xml」分頁標籤,查看預設的 「BMI/AndroidManifest.xml」檔案原始碼:

1  <?xml version="1.0" encoding="utf-8"?>
2  <manifest xmlns:android="http://schemas.android.com/apk/res/android"
3      package="com.demo.android.bmi"
4      android:versionCode="1"
5      android:versionName="1.0">
6      <application android:icon="@drawable/icon">
7          <activity android:name=".Bmi" android:label="@string/app_name">
8              <intent-filter>
9                  <action android:name="android.intent.action.MAIN" />
10                 <category android:name="android.intent.category.LAUNCHER" />
11            </intent-filter>
12          </activity>
13     </application>
14     <uses-sdk android:minSdkVersion="X" />
15 </manifest>

我們分行講解如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    ....>
    ....
</manifest>

「AndroidManifest.xml」這個檔案也是以 XML 格式描述,每個 Android 應用程式都需要一個「AndroidManifest.xml」檔案,每份「AndroidManifest.xml」檔案的開頭都會出現這段敘述。而整個「AndroidManifest.xml」檔案的敘述,都包含在「manifest」(清單)這個主要標籤中。

package="com.demo.android.bmi"

「package」 是「manifest」(清單)標籤的一個特別屬性,範例中的內容可用來標明,這個應用程式的進入點存在於「com.demo.android.bmi」這個名稱空間/路徑中。

android:versionCode="1"
android:versionName="1.0"

「android:versionCode」和「android:versionName」是應用程式版本號。 這兩個屬性是可選的(非必要)。「android:versionName」是給使用者看的版本號,如「1.0」、「2.0」。「android:versionCode」則是開發者用的內部版本號,一般使用流水號。

<application android:icon="@drawable/icon" android:label="@string/app_name">
...
</application>

「manifest」標籤中主要包含一個「application」標籤(備註1)。「application」標籤裡面,定義了所有這個應用程式用到的 Activity、服務等資訊。「application」標籤中的「android:icon」屬性,定義了這個應用程式將顯示在 Android 主畫面中的應用程式圖示。「android:icon="@drawable/icon"」表示應用程式圖示的資源檔存在於「res/drawable/icon」 中。圖示的大小必須超過 64x64 像素(Pixel)。「application」標籤中的「android:label」屬性可用來指定應用程式將顯示在 Home 主畫面上的名稱。也就是預設剛開好機時,可以從桌面下方拉出的應用程式列表。

<activity android:name=".Bmi" android:label="@string/app_name">
...
</activity>

「application」標籤中所有用到的 Activity ,都要包含在一個個「activity」標籤中(備註2)。 Activity 是 Android 應用程式與使用者互動的主要元素,當使用者開啟一個應用程式,第一個看到的畫面就是一個 Activity。若是一個應用程式中包含多個畫面時,會定義多個不同的 Activity,我們也必須在「application」標籤中,使用多個「activity」標籤,為不同的 Activity 添加描述。如果我們已經在程式碼中定義好了 Activity ,卻忘了在「AndroidManifest.xml」檔案中加入對應的「activity」標籤,那麼在執行中呼叫到這個 Activity 的時候,將無法開啟這個 Activity。

「activity」標籤的「android:name」屬性,指出了這個 Activity 所對應的類別(class)。「activity」標籤中的「android:label」屬性可用來指定應用程式將顯示在 Activity 畫面上方的名稱。也可以在程式碼中透過「setTitle(“名稱”)」來動態修改。

因為在上一層「Manifest」標籤屬性中已經定義了「package="com.demo.android.bmi"」,因此在「activity」標籤的「android:name」屬性中,「.Bmi」代表著「com.demo.android.bmi.Bmi」的簡寫。也可以寫成「Bmi」,一樣是代表「com.demo.android.bmi.Bmi」這個類別。

<intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

「intent- filter」標籤定義了這個「activity」的性質。「intent-filter」中主要包含了兩個標籤:「action」跟「category」標籤。「action」標籤中的「android:name」屬性,其內容「android.intent.action.MAIN」表示:這個 Activity 是此應用程式的進入點(就像程式中常見的 main 主程式),開啟這個應用程式時,應先執行這個 Activity。。常見的還有「android.intent.action.EDIT」等標籤,會在之後章節用上的時候講解。「category」標籤中的「android:name」屬性,其內容「android.intent.category.LAUNCHER」表示:這個 Activity 將顯示在 Launcher 的應用程式列表中。

我們把整個檔案合到一起看,可以總結出這個檔案所傳達的訊息:在「com.demo.android.bmi」路徑下的「Bmi.java」這個檔案中,已定義了一個主要的 Activity; 當我們打開 Android 的時候,顯示的是位於「res/drawable/icon」的圖示。一旦我們按下圖示來啟動這個應用程式,Android 應用程式框架會去尋找到定義了「android.intent.action.MAIN」內容的 「.Bmi」activity,並呼叫執行。

<uses-sdk android:minSdkVersion="X" />

Android SDK 1.1 版之後引入了這條敘述,「X」代表了目標版本代號。透過指定這個參數,系統可以依此辨別應用程式是否使用相容的 SDK 版本,好決定能否在這台機器上安裝執行。這也是一個可選填的選項。但如果我們的應用程式要發佈出去,一些強勢的通路如 Google Android Market 已規定所有新發佈的應用程式必須指定「android:minSdkVersion」這個參數。

各目標版本與代號對應表如下:

目標版本 代號
2.1 7
2.0.1 6
2.0 5
1.6 4
1.5 3
1.1 2
1.0 1

目前各版本佔有率可以參考官方的版本佔有率圖表: http://developer.android.com/resources/dashboard/platform-versions.html

這個圖表是根據最近 2 周間連上 Android Market 設備的比率來繪製。

備註1

    除了「application」標籤外,還有「uses-permission」(例如允不允許存取SMS、能否存取聯絡簿、相機功能)、「permission」、「instrumentation」等主要標籤。相關的內容在後續章節用到時再一併解說。

備註2

    除了「activity」標籤外,對應於 Android 應用程式的運作流程,還有「service」、「receiver」、「provider」等主要元件。相關內容會在後續章節提到時作解說。

參考資料

    * Android manifest http://developer.android.com/reference/android/R.styleable.html#AndroidManifest
    * Intent Action http://developer.android.com/reference/android/content/Intent.html
分享到:
评论

相关推荐

    AndroidManifest解析,apk读取

    用C#写的解压apk,并解析AndroidManifest.xml的类。这个可以读取android安装包apk的安装信息,例如软件包的名字,版本等数据。 这个之前只有java版,并且不开放源码。无意中发现了一个java的AndroidManifest.xml的...

    Android代码-android-manifest-parser

    AndroidManifest解析器 一个纯Java、实现了SAX接口、无任何第三方依赖的 AndroidManifest.xml 解析工具。 AndroidManifest.xml文件格式 Binary AndroidManifest.xml Magic Number(0x00080003) 4bytes // 魔数 ...

    Android学习笔记之AndroidManifest.xml文件解析

    ### AndroidManifest.xml 文件解析知识点 #### 一、概述 `AndroidManifest.xml` 是 Android 应用的核心配置文件,它位于应用项目的根目录下。该文件主要用于描述应用的基本信息及其组件,比如 Activity、Service、...

    java解析AndroidManifest文件工具类

    java解析AndroidManifest.xml文件。 输入xml文件路径。 输出APK包名,入口点,Activity列表,权限列表。

    AndroidManifest文件格式解析调试代码

    本文将深入解析`AndroidManifest`文件的格式,并通过调试代码来揭示其工作原理,帮助开发者更深入地理解这一核心配置文件。 `AndroidManifest.xml`文件的结构主要由以下几个部分组成: 1. **应用信息**:包括应用...

    AndroidManifest_parser

    `AndroidManifest_parser`是一个Python接口,专门设计用于解析这个二进制格式的XML文件,为开发者提供了便利的工具来分析和理解Android应用的结构。 在Python中,通常我们使用标准库如`xml.etree.ElementTree`来...

    c#解析AndroidManifest.xml

    最近用c#做apk采集,需要解析采集后的android包名和版本号,网上搜了很久只有java版本,尝试自己写了下,比较麻烦,索性网上找了java转c#的方法,把AXMLPrinter2.jar给转成了dll,看到不少人也需要这个,发来共享一下

    AndroidManifest二进制文件格式分析

    可以借助反编译工具,如Apktool、dex2jar等,来查看和解析二进制`AndroidManifest`。这些工具能够将二进制数据重新转换回可读的XML格式,帮助开发者理解和调试应用。 在实际开发中,了解`AndroidManifest`的二进制...

    AndroidManifest.xml解析

    《深入理解AndroidManifest.xml解析》 在Android应用开发中,AndroidManifest.xml文件扮演着至关重要的角色。它是每个Android程序的核心配置文件,位于应用程序的根目录下,用于定义应用程序的全局特性,包括应用...

    Android教程之AndroidManifest.xml文件详细介绍及用法解析

    Android教程之AndroidManifest.xml文件 详细介绍及用法解析

    AndroidManifest.xml 最新解析包

    本教程将深入探讨`AndroidManifest.xml`的最新解析方法,针对使用`AXMLPrinter-latest.jar`工具时遇到的异常`java.lang.ArrayIndexOutOfBoundsException: 588`进行分析,并提供解决方案。 `AndroidManifest.xml`...

    解析AndroidManifest源码

    本文将深入解析`AndroidManifest`源码,理解其背后的AXML解析机制。 首先,我们需要了解AXML是什么。AXML(Android XML)是Android系统中用来存储布局和资源信息的二进制XML格式,它比普通的XML文件更小、加载更快...

    AndroidManifest.xml编译器

    1. **解析XML**:`aapt`读取`AndroidManifest.xml`,解析其结构和内容,验证元素和属性的正确性。 2. **资源处理**:`aapt`识别出文件中引用的资源(如字符串、颜色、图像等),并将它们打包到资源文件中。 3. **...

    parse_androidmanifest.py

    python2.7实现解析AndroidManifest.xml格式的源码的解析

    androidmanifest.xml详解

    详细阐述androidmanifest.xml各个属性的含义和用法

    Android开发逆向解析Manifest清单文件

    主要针对已经打包为apk的程序,还原其内部的...因为Android程序打包为apk以后,其AndroidManifest.xml文件已经被编译为二进制内容了,无法进行正常阅读,所以必须进行解析才可以。本工具就可以很好的解决这个问题。

Global site tag (gtag.js) - Google Analytics