Skip to content

Manifest详解

一、概念

在 Android 应用程序开发中,AndroidManifest.xml 是一个非常重要的文件,它描述了应用的基本信息、组件、权限等。

一个典型的 AndroidManifest.xml 文件结构如下:

xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapp"
    android:versionCode="1"
    android:versionName="1.0">

    <!-- 应用级别的权限声明 -->
    <uses-permission android:name="android.permission.INTERNET" />

    <!-- 声明最小和目标 SDK 版本 -->
    <uses-sdk
        android:minSdkVersion="16"
        android:targetSdkVersion="30" />

    <!-- 应用的具体描述 -->
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        
        <!-- Activity 声明 -->
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <!-- 其他组件声明,如 Service, BroadcastReceiver, ContentProvider -->
        <service android:name=".MyService" />
        <receiver android:name=".MyReceiver" />
        <provider
            android:name=".MyProvider"
            android:authorities="com.example.myapp.provider" />
        
    </application>

</manifest>

二、关键元素和属性解析

1. manifest标签

  • xmlns:android: 定义了 XML 命名空间。
  • package: 定义应用程序的包名,这是应用在设备上唯一的标识符。
  • android:versionCode: 定义应用程序的版本代码,每次发布新版本时递增。
  • android:versionName: 定义应用程序的版本名称,通常是一个用户可见的字符串。

2. uses-permission标签

  • android:name: 声明应用程序所需的权限,例如访问互联网、读取联系人等。
xml
 <uses-permission android:name="android.permission.INTERNET" />

3. uses-sdk标签

  • android:minSdkVersion: 定义应用程序支持的最小 SDK 版本。
  • android:targetSdkVersion: 定义应用程序针对的目标 SDK 版本。

4. application标签(定义应用程序的全局属性和包含的组件)

  • android:allowBackup: 是否允许应用数据备份。
  • android:debuggable: 是否允许调试
  • android:fullBackupContent: 定义备份和恢复的内容。
  • android:largeHeap: 是否启用大堆内存
  • android:icon: 应用程序的图标。
  • android🏷️ 应用程序的标签。
  • android:roundIcon: 圆形图标(用于某些设备和启动器)。
  • android:supportsRtl: 是否支持从右到左的布局。
  • android:theme: 应用程序的主题。

5. activity标签

  • android:name: Activity 类的名称。
  • intent-filter: 定义这个 Activity 如何响应 Intent,例如 MAIN 和 LAUNCHER。

6. service标签

  • android:name: Service 类的名称。

7. receiver标签

  • android:name: BroadcastReceiver 类的名称。

8. provider标签

  • android:name: ContentProvider 类的名称。
  • android:authorities: 定义 ContentProvider 的授权 URI。
xml
<provider
 android:name=".MyProvider"
 android:authorities="com.example.myapp.provider"
 android:exported="true"
 android:grantUriPermissions="true">
 <grant-uri-permission android:pathPattern=".*" />

9. meta-data标签(用于在应用程序、Activity、Service 等组件中添加任意的键值对数据)

xml
<meta-data
 android:name="com.example.MY_METADATA"
 android:value="some_value" />

10. uses-feature标签(声明应用程序使用的硬件或软件特性,例如摄像头、蓝牙等)

xml
<uses-feature android:name="android.hardware.camera" android:required="true" />

11. intent-filter标签(定义组件可以处理哪些 Intent,通常用于 Activity、Service 和 BroadcastReceiver)

12. path-permission标签(用于在 ContentProvider 中设置特定路径的权限)

xml
<path-permission
 android:path="/my_path"
 android:readPermission="com.example.myapp.permission.READ"
 android:writePermission="com.example.myapp.permission.WRITE" />

13. grant-uri-permission标签(用于授予其他应用程序访问 URI 的权限。它通常用于 ContentProvider 中,允许你授予其他应用临时的读写权限)

14. instrumentation标签(用于定义应用程序的测试和调试代码。Instrumentation 是一个运行在应用程序进程中的类,用于监控应用的交互行为)

xml
<instrumentation
 android:name=".MyInstrumentation"
 android:targetPackage="com.example.myapp"
 android:functionalTest="true" />

15. compatible-screens标签(用于指定应用程序兼容的特定屏幕配置。这通常用于限制应用程序只在特定设备上可用)

xml
<compatible-screens>
 <!-- 支持的屏幕尺寸和密度 -->
 <screen android:screenSize="normal" android:screenDensity="hdpi" />
</compatible-screens>

16. supports-screens标签(用于声明应用程序支持的屏幕尺寸和密度)

xml
<supports-screens
 android:smallScreens="true"
 android:normalScreens="true"
 android:largeScreens="true"
 android:xlargeScreens="true"
 android:anyDensity="true" />

17. uses-configuration(用于声明应用程序使用的硬件配置,例如键盘类型、导航设备等)

xml
<uses-configuration android:reqKeyboardType="qwerty" />

18. permission标签(用于声明应用程序定义的自定义权限。这些权限可以在其他应用程序中请求,以访问你的应用程序提供的功能)

xml
<permission
 android:name="com.example.myapp.permission.MY_PERMISSION"
 android:protectionLevel="normal" />

19. activity-alias标签(activity-alias> 元素用于为一个现有的 Activity 定义一个别名。它允许你为同一个 Activity 创建多个入口点,可以使用不同的 intent-filter、标签等)

xml
<activity-alias
 android:name=".AliasActivity"
 android:targetActivity=".MainActivity"
 android:label="@string/alias_activity_label">
 <intent-filter>
     <action android:name="android.intent.action.VIEW" />
     <category android:name="android.intent.category.DEFAULT" />
 </intent-filter>
</activity-alias>

Released under the MIT License.