[Android] 認識AndroidManifest.xml

APP是跑在Android系統上,既然要跑在其上,就必須提供資訊給Android System。這些資訊就存在AndroidManifest中。

AndroidManifest 存放在 app/src/main/ 目錄下

它的功能如下:
1. 命名Java package,這個命名提供了唯一的名稱,
2. 描述application的組成元件,再透過類別來啟動這些組成元件,例如運用 Intent 這個class
-activities
-services
-broadcast receivers
-content providers
3. 決定哪些processes主持application
4. 宣告這個App有哪些權限
5. 也宣告其他App要存取application components需要哪些權限
6. 列出Instrumentation這個class來分析application執行時的情形
7. 需告要執行此Application最低的API版本
8. 列出application需要link的library


Manifest架構

允許的Element,藍字是預設常見的Element,其中的<manifest>與<application>是必要且只能出現一次。每個Element有各自的屬性,屬性數量不一定,每個屬性有其預設值,可視需求進行設定。

<action>
<activity> 
<activity-alias>
<application> 
<category>
<data>
<grant-uri-permission>
<instrumentation>
<intent-filter> 
<manifest> 
<meta-data>
<permission>
<permission-group>
<permission-tree>
<provider>
<receiver>
<service>
<supports-screens>
<uses-configuration>
<uses-feature>
<uses-library>
<uses-permission>
<uses-sdk>


預設的AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.bmi" 名稱空間
    android:versionCode="1"   開發者使用流水版號
    android:versionName="1.0" >  供使用者看的版本號

    <uses-sdk
        android:minSdkVersion="8" 最低相容SDK版本
        android:targetSdkVersion="21" /> 目標版本,若沒設定預設為最低minSdkVersion

    <application
        android:allowBackup="true" 是否允許備份
        android:icon="@drawable/ic_launcher" App Icon
        android:label="@string/app_name" App名稱
        android:theme="@style/AppTheme" > App風格
        <activity activity, service, receiver, provider是組成application的4個主要項目
            android:name=".MainActivity" activity名稱,可和manifest package串在一起
            android:label="@string/app_name" > APP開啟後,顯示在畫面上方的名稱
            <intent-filter> activity操作方式
                <action android:name="android.intent.action.MAIN" /> .MAIN表示activity是APP進入點

                <category android:name="android.intent.category.LAUNCHER" /> 顯示在應用程式列表
            </intent-filter>
        </activity>
    </application>

</manifest>

完整的架構
<?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>
            <intent-filter>
                <action />
                <category />
                <data />
            </intent-filter>
            <meta-data />
        </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 />
            <path-permission />
        </provider>

        <uses-library />

    </application>
</manifest>

沒有留言:

張貼留言