以下是重新排版后的文章:

AndroidManifest

1. <manifest>

  • 它是AndroidManifest.xml文件的根标签,包含了整个应用程序的基本信息,如应用程序的包名、版本代码、版本名称等。所有其他标签几乎都是在manifest标签内部定义的。

  • 示例:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapplication"
    android:sharedUserId="com.example.shareduser"
    android:versionCode="1"
    android:versionName="1.0"
    android:installLocation="preferExternal">
    
    <!-- 这里可以继续添加<application>、<uses - permission>等子标签 -->
</manifest>

属性

  1. xmlns:android

    • 含义:定义 Android 命名空间,用于在清单文件中引用 Android 系统提供的各种属性和标签。
    • 示例
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.myapplication">
    
    • 这个命名空间使得在后续的标签和属性设置中能够使用android:前缀来引用 Android 系统定义的标准属性,如android:iconandroid:label等。
  2. package

    • 含义:指定应用程序的包名。这个包名在整个 Android 系统中是唯一的,用于识别应用。它是应用的一个重要标识符,在很多场景下都会用到,比如组件的引用、权限的定义等。
    • 示例
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.myapplication">
    
    • 包名通常采用反向域名的格式,如com.example.myapplication,其中com.example是开发者或组织的域名倒写,myapplication是应用的具体名称部分。
  3. android:sharedUserId

    • 含义:用于多个应用之间共享用户 ID。当多个应用设置了相同的sharedUserId时,它们可以访问彼此的数据,并且在一定程度上可以共享进程等资源。不过,这种共享也需要谨慎使用,因为可能会带来安全风险。
    • 示例
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.myapplication"
        android:sharedUserId="com.example.shareduser">
    
    • 在这个例子中,设置了共享用户 ID 为com.example.shareduser,如果其他应用也设置了相同的sharedUserId,就可以在符合权限规则的情况下共享资源。
  4. android:versionCode

    • 含义:用于表示应用程序的版本号,是一个整数值。这个版本号主要用于系统和应用市场来区分应用的不同版本,用于升级等操作。例如,当新版本的versionCode大于旧版本时,系统可以提示用户进行升级。
    • 示例
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.myapplication"
        android:versionCode="1">
    
    • 开发者在更新应用时,需要逐步递增这个版本号,一般来说,每次发布一个新的版本,版本号都应该比之前的版本大。
  5. android:versionName

    • 含义:这是一个用于显示给用户的版本名称,通常是一个字符串,如1.01.1 - beta等格式。它主要用于用户在应用市场或者应用的关于页面中查看应用的版本信息。
    • 示例
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.myapplication"
        android:versionName="1.0">
    
    • versionCode不同,versionName更侧重于用户友好的版本展示,它可以包含一些额外的信息,如版本的阶段(alpha、beta、release 等)。
  6. android:installLocation

    • 含义:用于指定应用的安装位置。它可以有三个值:internalOnly(仅安装在内部存储)、preferExternal(优先安装在外部存储,如果外部存储不可用则安装在内部存储)和auto(由系统根据存储情况决定安装位置)。
    • 示例
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.myapplication"
        android:installLocation="preferExternal">
    
    • 这个设置可以帮助用户更好地管理设备的存储空间,特别是对于一些大型应用或者存储资源有限的设备。

1.2. <uses - permission>

  • 用于声明应用需要的权限。这些权限允许应用访问受保护的系统资源或执行特定的操作。例如,访问网络、读取联系人等。
  • 示例:
<uses - permission android:name="android.permission.INTERNET"/>
  • 这个标签表示应用需要访问网络的权限。

1.3. <permission>

  • 用于定义应用自己的权限。如果应用希望提供数据或者服务给其他应用,并且想要控制对这些内容的访问,就可以使用这个标签来定义权限。
  • 示例:
<permission
    android:name="com.example.myapplication.permission.MY_PERMISSION"
    android:description="@string/permission_description"
    android:label="@string/permission_label"
    android:protectionLevel="normal"/>

1.4. <instrumentation>

  • 主要用于测试。它可以用来监视应用的运行情况,例如在测试自动化框架中使用,通过它可以在应用运行时收集各种数据。
  • 示例:
<instrumentation
    android:name="android.test.InstrumentationTestRunner"
    android:targetPackage="com.example.myapplication"/>

1.5. <uses - sdk>

  • 用于指定应用所兼容的 Android SDK 版本信息,包括最小 SDK 版本、目标 SDK 版本和最大 SDK 版本。这有助于确保应用在合适的 Android 设备上运行,并且可以利用特定版本的 API。
  • Android studio3.0 以后 sdk 最小版本设置不能在 manifest.xml 设置,必须在 gradle 里设置功能。
  • 示例:
<uses - sdk
    android:minSdkVersion="21"
    android:targetSdkVersion="30"/>

1.6. <uses - feature>

  • 用于声明应用所使用的设备硬件或软件功能。例如,如果应用需要使用相机功能,就可以使用这个标签来声明。这样可以帮助应用市场等平台更好地筛选设备,确保应用在具有所需功能的设备上安装。
  • 示例:
<uses - feature android:name="android.hardware.camera"/>

1.7. <supports - screens>

  • 用于指定应用支持的屏幕尺寸和密度。这有助于确保应用在不同屏幕的设备上(如手机、平板等)都能有较好的显示效果。
  • 示例:
<supports - screens
    android:smallScreens="true"
    android:normalScreens="true"
    android:largeScreens="true"/>

1.8. <compatible - screens>

  • 这个标签与supports - screens类似,但它是更严格的屏幕兼容性定义。它可以指定应用只兼容某些特定的屏幕尺寸和密度组合。
  • 示例:
<compatible - screens>
    <screen
        android:screenSize="small"
        android:screenDensity="mdpi"/>
</compatible - screens>

1.9. <application>

  • 如前面所述,它用于描述应用程序本身的各种属性和组件,包括 Activity、Service、Broadcast Receiver 和 Content Provider 等。这是定义应用功能的核心标签之一。
  • 示例:
<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name">
    <!-- 定义 Activity、Service 等组件 -->
</application>

属性

  1. android:icon

    • 含义:用于指定应用程序的图标。
  2. android:label

    • 含义:用于设置应用程序的名称。这个名称会在应用图标旁边显示(如在主屏幕或应用抽屉中),也可能在系统的应用管理界面等地方出现。一般引用string资源,如@string/app_name
    • app_name对应的字符串会作为应用的名称展示给用户。
  3. android:allowBackup

    • 含义:AllowBackup 是在 Android 2.2 中引入的一个系统备份的功能。允许用户备份系统应用和第三方应用的 apk 安装包和应用数据,以便在刷机或者数据丢失后恢复应用,用户即可通过 adb backup 和 adb restore 来进行对应用数据的备份和恢复。第三方应用开发者需要在应用的 AndroidManifest.xml 文件中配置 allowBackup 标志(默认为 true )来设置应用数据是否能能够被备份或恢复。

    • allowBackup 会引起的高危漏洞是什么?

    • Android 属性 allowBackup 安全风险源于 adb backup 容许任何一个能够打开 USB 调试开关的人从 Android 手机中复制应用数据到外设,一旦应用数据被备份之后,所有应用数据都可被用户读取;adb restore 容许用户指定一个恢复的数据来源(即备份的应用数据)来恢复应用程序数据的创建。因此,当一个应用数据被备份之后,用户即可在其他 Android 手机或模拟器上安装同一个应用,以及通过恢复该备份的应用数据到该设备上,在该设备上打开该应用即可恢复到被备份的应用程序的状态。

    • 尤其是通讯录应用,一旦应用程序支持备份和恢复功能,攻击者即可通过 adb backup 和 adb restore 进行恢复新安装的同一个应用来查看聊天记录等信息;对于支付金融类应用,攻击者可通过此来进行恶意支付、盗取存款等;因此为了安全起见,开发者务必将 allowBackup 标志值设置为 false 来关闭应用程序的备份和恢复功能,以免造成信息泄露和财产损失。

    • android:allowBackup设置为false时,系统不会备份该应用的数据。

  4. android:backupAgent

    • 含义:用于指定备份代理类。如果android:allowBackuptrue,并且需要自定义备份行为,可以通过这个属性指定一个实现了android.app.backup.BackupAgent接口的类来处理备份和恢复操作。
    • 示例
    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:allowBackup="true"
        android:backupAgent="com.example.myapp.MyBackupAgent">
        <!-- 应用组件定义 -->
    </application>
    
    • 这里MyBackupAgent是自定义的备份代理类,用于处理应用数据的备份和恢复细节。
  5. android:debuggable

    • 含义:一个布尔值属性,用于指定应用是否可以被调试。在开发阶段,通常设置为true,这样开发工具(如 Android Studio)可以连接到应用进行调试。在发布版本中,应该设置为false以提高应用的安全性。
    • 示例
    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:debuggable="true">
        <!-- 应用组件定义 -->
    </application>
    
    • android:debuggabletrue时,应用可以被调试工具连接并进行调试操作。
  6. android:description

    • 含义:用于提供应用的详细描述。这个描述可能会在应用市场等地方显示,帮助用户了解应用的功能和用途。通常引用string资源,如@string/app_description
    • 示例
    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:description="@string/app_description">
        <!-- 应用组件定义 -->
    </application>
    
    • app_description对应的字符串内容会作为应用的详细描述展示给用户。
  7. android:enabled

    • 含义:一个布尔值属性,用于指定应用是否启用。如果设置为false,应用将无法正常启动,所有组件也不会响应。默认值为true
    • 示例
    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:enabled="false">
        <!-- 应用组件定义 -->
    </application>
    
    • android:enabledfalse时,应用处于禁用状态。
  8. android:hardwareAccelerated

    • 含义:一个布尔值属性,用于指定应用是否启用硬件加速。硬件加速可以利用设备的 GPU 来加速图形渲染等操作,提高应用的性能,特别是对于有大量图形处理的应用。默认值因 Android 版本而异。
    • 示例
    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:hardwareAccelerated="true">
        <!-- 应用组件定义 -->
    </application>
    
    • android:hardwareAcceleratedtrue时,应用会尝试使用硬件加速来提升性能。
  9. android:largeHeap

    • 含义:一个布尔值属性,用于指定应用是否可以使用较大的堆内存。默认情况下,Android 为应用分配一定大小的内存堆,当设置android:largeHeaptrue时,允许应用使用更多的内存,但这可能会影响设备的整体性能和稳定性,并且需要谨慎使用。
    • 示例
    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:largeHeap="true">
        <!-- 应用组件定义 -->
    </application>
    
    • android:largeHeaptrue时,应用有机会使用比正常情况下更多的内存。
  10. android:permission

    • 含义:用于指定访问这个应用组件的权限。如果其他应用想要访问这个应用的组件(如 Activity、Service 等),需要拥有这个指定的权限。
    • 示例
    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:permission="com.example.myapp.PERMISSION_TO_ACCESS">
        <!-- 应用组件定义 -->
    </application>
    
    • 其他应用要访问这个应用的组件,就需要声明com.example.myapp.PERMISSION_TO_ACCESS这个权限。
  11. android:process

    • 含义:用于指定应用组件运行的进程。默认情况下,所有组件都在应用的默认进程中运行,但可以通过这个属性为不同的组件指定不同的进程,甚至可以让多个应用共享一个进程。
    • 示例
    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name">
        <activity android:name=".MyActivity"
            android:process=":my_process">
            <!-- 其他内容 -->
        </activity>
    </application>
    
    • 这里MyActivity会在名为:my_process的进程中运行,而不是在应用的默认进程中。
  12. android:restoreAnyVersion

    • 含义:一个布尔值属性,用于指定在恢复应用数据时是否允许恢复任何版本的数据。如果设置为true,系统会尝试使用备份代理恢复数据,即使备份的数据是来自应用的旧版本。默认值为false
    • 示例
    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:restoreAnyVersion="true">
        <!-- 应用组件定义 -->
    </application>
    
    • android:restoreAnyVersiontrue时,系统在恢复数据时会更灵活地处理不同版本的数据备份。
  13. android:taskAffinity

    • 含义:用于指定 Activity 所属的任务相关性。它主要用于确定 Activity 在任务栈中的归属,以及与其他任务栈的关系。默认情况下,一个应用的所有 Activity 都具有相同的任务相关性,与应用的包名相关。
    • 示例
    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name">
        <activity android:name=".MyActivity"
            android:taskAffinity="com.example.myapp.my_task">
            <!-- 其他内容 -->
        </activity>
    </application>
    
    • 这里MyActivity的任务相关性被设置为com.example.myapp.my_task,这可能会影响它在任务栈中的行为,比如在启动新的 Activity 或者处理返回键操作时。
  14. android:usesCleartextTraffic

    • 含义:一个布尔值属性,用于指定应用是否允许使用明文网络流量。在一些安全要求较高的环境中,可能需要限制应用只能使用加密的网络连接(如HTTPS),此时可以将这个属性设置为false。默认值为true
    • 示例
    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:usesCleartextTraffic="false">
        <!-- 应用组件定义 -->
    </application>
    
    • android:usesCleartextTrafficfalse时,应用在网络通信中会受到限制,不能使用明文协议(如HTTP)。
  15. tools:replace
    tools:replace是一个 Android Gradle 插件中用于处理合并清单文件时的属性。

  • 含义:当在 Android 项目中使用多个清单文件(例如库项目和主项目都有自己的AndroidManifest.xml),在合并这些清单文件的过程中可能会出现冲突。tools:replace属性允许开发者指定哪些元素或属性应该在合并时被替换,而不是产生合并错误。
    如果AAR或者moudle内给Application设置过属性,如果主工程也需要设置,那么主工程需要覆盖这些属性
tools:replace="android:name,android:allowBackup,android:label,android:supportsRtl"

否则异常:

> Task :app:processDebugManifest
> 
D:\project_xxx\code\DfskAarTestDemo\app\src\main\AndroidManifest.xml:6:5-37:19 
Warning:application@android:name was tagged at AndroidManifest.xml:6 
    to replace other declarations but no other declaration present

D:\project_xxx\code\DfskAarTestDemo\app\src\main\AndroidManifest.xml:
    6:5-37:19 Warning:application@android:allowBackup was tagged at 
    AndroidManifest.xml:6 to replace other declarations but no other declaration present
  1. android:configChanges
    configChanges是 AndroidManifest.xml 文件中的一个属性,可以指定哪些配置变化不会导致重新创建 Activity。当你的应用需要在某些配置变化发生时保持用户状态或不希望发生界面重建时,可以通过这个属性来动态处理。
android:configChanges="orientation|keyboardHidden|navigation|screenSize|locale|layoutDirection|uiMode|fontScale|mcc|mnc|screenLayout|smallestScreenSize|touchscreen|keyboard"
  1. android:requestLegacyExternalStorage
    在 Android 10 中,系统对应用程序的文件访问权限进行了一些更改。默认情况下,应用程序无法访问外部存储(如SD卡)中的文件。然而,为了向后兼容性,Android 10 提供了一个属性requestLegacyExternalStorage,可以让应用程序继续使用旧的存储访问行为。

1.9.1. <activity>

  • 含义:Activity是 Android 应用中最基本的组件之一,用于实现用户界面。每个 Activity 通常对应一个屏幕的内容。
  • 示例
<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name">
    <activity android:name=".MainActivity">
        <intent - filter>
            <action android:name="android.intent.action.MAIN"/>
            <category android:name="android.intent.category.LAUNCHER"/>
        </intent - filter>
    </activity>
</application>
  • 在这个例子中,MainActivity是应用的主启动 Activity。intent - filter中的actioncategory标签组合指定了该 Activity 是应用的主入口,当用户点击应用图标时会启动这个 Activity。

属性

  1. android:name

    • 含义:指定 Activity 的类名。这是最重要的属性之一,用于在清单文件中明确标识 Activity。可以使用完整的包名和类名(如com.example.myapp.MyActivity),也可以使用相对路径(如.MyActivity,它会基于清单文件中的package属性来确定完整的类名)。
    • 示例
    <activity android:name=".MainActivity">
        <intent - filter>
            <action android:name="android.intent.action.MAIN"/>
            <category android:name="android.intent.category.LAUNCHER"/>
        </intent - filter>
    </activity>
    
    • 在这里,android:name=".MainActivity"表示该 Activity 对应的类是在当前应用包名基础上的MainActivity类。
  2. android:label

    • 含义:用于设置 Activity 的标题或标签。这个标题通常会显示在屏幕的顶部(如在 ActionBar 或 Toolbar 中),或者在任务管理器等地方作为 Activity 的标识。可以引用字符串资源(如@string/activity_label),也可以直接使用字符串。
    • 示例
    <activity android:name=".MyActivity"
        android:label="@string/activity_title">
        <!-- 其他内容 -->
    </activity>
    
    • 当应用运行时,MyActivity的标题会显示为strings.xml文件中activity_title所对应的字符串内容。
  3. android:icon

    • 含义:用于指定 Activity 的图标。图标可以用于在任务管理器、最近使用的应用列表等地方显示 Activity 的标识。和android:label一样,可以引用drawable资源(如@drawable/activity_icon)。
    • 示例
    <activity android:name=".AnotherActivity"
        android:icon="@drawable/activity_icon">
        <!-- 其他内容 -->
    </activity>
    
    • 这个属性使得AnotherActivity在需要显示图标的地方(如任务切换界面)会显示drawable文件夹下activity_icon对应的图标。
  4. android:theme

    • 含义:用于设置 Activity 的主题。主题决定了 Activity 的外观风格,包括颜色、背景、字体等方面。可以引用系统自带的主题(如@android:style/Theme.Holo.Light),也可以使用自定义主题。
    • 示例
    <activity android:name=".CustomThemeActivity"
        android:theme="@style/CustomTheme">
        <!-- 其他内容 -->
    </activity>
    
    • 这里CustomThemeActivity会应用名为CustomTheme的主题,这个主题可以在styles.xml文件中进行定义,通过修改主题的属性来改变 Activity 的整体外观。
  5. android:launchMode

    • 含义:用于指定 Activity 的启动模式。它决定了在多个 Activity 实例之间如何交互和管理任务栈。常见的启动模式有standard(默认模式,每次启动都会创建一个新的实例)、singleTop(如果目标 Activity 已经在栈顶,则复用该实例,否则创建新实例)、singleTask(如果栈中已经存在目标 Activity,则清除它上面的所有 Activity,使目标 Activity 位于栈顶)和singleInstance(该 Activity 会在一个单独的任务栈中运行)。
    • 示例
    <activity android:name=".SingleTopActivity"
        android:launchMode="singleTop">
        <!-- 其他内容 -->
    </activity>
    
    • 当启动SingleTopActivity时,如果它已经在栈顶,就不会创建新的实例,而是会调用现有实例的onNewIntent()方法来处理新的意图。
  6. android:noHistory

    • 含义:一个布尔值属性。当设置为true时,Activity 在用户离开(如按下返回键或启动其他 Activity)后不会被保留在任务栈中,即不会在用户通过返回键返回时再次出现。
    • 示例
    <activity android:name=".NoHistoryActivity"
        android:noHistory="true">
        <!-- 其他内容 -->
    </activity>
    
    • 这样NoHistoryActivity在用户离开后就不会出现在任务栈中,适用于一些临时的、不需要保留历史记录的界面,比如登录成功后的过渡页面。
  7. android:parentActivityName

    • 含义:用于指定 Activity 的父 Activity。这在处理向上导航(如在 ActionBar 中点击向上箭头)时非常有用。系统可以根据这个属性自动为 Activity 添加向上导航的功能。
    • 示例
    <activity android:name=".ChildActivity"
        android:parentActivityName=".MainActivity">
        <!-- 其他内容 -->
    </activity>
    
    • ChildActivity处于前台时,ActionBar 上可能会出现一个向上箭头,点击它可以导航回到MainActivity
  8. android:screenOrientation

    • 含义:用于指定 Activity 的屏幕方向。可以设置为portrait(竖屏)、landscape(横屏)、sensor(根据传感器自动旋转)等多种值。
    • 示例
    <activity android:name=".FixedOrientationActivity"
        android:screenOrientation="portrait">
        <!-- 其他内容 -->
    </activity>
    
    • 这个FixedOrientationActivity会一直保持竖屏状态,不会随着设备的旋转而改变屏幕方向。
  9. android:windowSoftInputMode

    • 含义:用于指定当软键盘出现时,Activity 的窗口如何调整。例如,可以设置为stateVisible(软键盘总是可见)、adjustResize(调整 Activity 的大小以适应软键盘)、adjustPan(平移 Activity 的内容以显示被软键盘遮挡的部分)等。
    • 示例
    <activity android:name=".InputActivity"
        android:windowSoftInputMode="adjustResize">
        <!-- 其他内容 -->
    </activity>
    
    • 当软键盘在InputActivity中出现时,Activity 会自动调整大小,使得内容能够适应软键盘出现后的屏幕空间。

1.9.1.1. <intent - filter>

  • 含义:用于指定 Activity 能够响应的意图(Intent)类型。它可以包含一个或多个<action><category><data>标签的组合,以定义 Activity 可以处理的不同情况。
  • 示例
<activity android:name=".MainActivity">
    <intent - filter>
        <action android:name="android.intent.action.MAIN"/>
        <category android:name="android.intent.category.LAUNCHER"/>
    </intent - filter>
</activity>
  • 在这个例子中,action标签指定了MAIN动作,category标签指定了LAUNCHER类别,这表示该 Activity 是应用的主启动 Activity,当用户点击应用图标时,系统会发送一个带有MAIN动作和LAUNCHER类别的意图,这个 Activity 就会被启动。
1.9.1.1.1. <action>
  • 含义:用于指定一个意图动作。它定义了 Activity(或其他组件)可以响应的操作类型。例如,android.intent.action.MAIN表示这是主要的启动动作,android.intent.action.VIEW通常用于查看数据等操作。
  • 示例
<intent - filter>
    <action android:name="android.intent.action.MAIN"/>
    <category android:name="android.intent.category.LAUNCHER"/>
</intent - filter>
  • 在这个示例中,action标签中的android.intent.action.MAIN表明该组件是一个主要的启动点,通常与LAUNCHER类别配合,用于启动应用。
1.9.1.1.2. <category>
  • 含义:用于进一步对意图进行分类。除了动作之外,类别可以帮助系统更精准地匹配意图和组件。例如,android.intent.category.LAUNCHER用于标记可以在启动器中显示的组件,android.intent.category.DEFAULT是一个默认类别,用于隐式意图。
  • 示例
<intent - filter>
    <action android:name="android.intent.action.VIEW"/>
    <category android:name="android.intent.category.DEFAULT"/>
    <category android:name="android.intent.category.BROWSABLE"/>
</intent - filter>
  • 这里的 Activity 可以响应VIEW动作,并且同时属于DEFAULTBROWSABLE类别。这可能意味着它可以从浏览器等其他应用中启动,用于查看某些内容,比如网页链接对应的自定义视图。
1.9.1.1.3. <data>
  • 含义:用于指定与意图相关的数据的类型、格式和位置等信息。这可以包括数据的 MIME 类型(如text/plain表示纯文本)、数据的 URI(统一资源标识符)等。
  • 示例
<intent - filter>
    <action android:name="android.intent.action.VIEW"/>
    <category android:name="android.intent.category.DEFAULT"/>
    <data android:mimeType="image/*"/>
</intent - filter>
  • 此 Activity 可以响应VIEW动作,对于DEFAULT类别,并且处理的数据类型是任意图像(image/*),可能用于显示图片。例如,当用户尝试从文件管理器或其他应用中查看一张图片时,这个 Activity 有机会被启动来展示该图像。

1.9.1.2. <meta - data>

  • 含义:为 Activity 提供额外的自定义数据。这些数据可以是各种类型,如字符串、整数等,用于配置 Activity 的特殊行为或者传递一些信息。
  • 示例
<activity android:name=".MyActivity">
    <meta - data
        android:name="custom_key"
        android:value="custom_value"/>
</activity>
  • 这里MyActivity有一个名为custom_key的元数据,其值为custom_value。在 Activity 的代码中,可以通过getMetaData()等方法获取这些元数据来进行相应的处理,例如根据这个自定义数据来决定 Activity 的某些布局或者功能。

1.9.2. <service>

  • 含义:Service用于在后台执行长时间运行的操作,不提供用户界面。例如,音乐播放服务、文件下载服务等。
  • 示例
<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name">
    <service android:name=".MyService"></service>
</application>
  • 这里定义了一个名为MyService的服务,当需要在后台执行任务时,可以在代码中启动这个服务来完成相应的操作。

属性

  1. android:name
    • 含义:指定 Service 的类名。可以是完整包名和类名,也可以是相对路径(基于清单文件中的package属性来确定完整类名)。这是用于在清单文件中明确标识 Service 的关键属性。
  • 示例
<service android:name=".MyService"></service>
  1. android:enabled
    • 含义:布尔值属性,用于确定 Service 是否启用。设置为false时,Service 无法启动,默认值为true,可用于根据条件禁用 Service。
    • 示例
<service android:name=".MyService"
    android:enabled="false"></service>
  1. android:exported
    • 含义:布尔值属性,用于指定 Service 是否可被其他应用程序组件调用。true表示可以被外部应用访问,false(默认)表示只能在应用内部访问。
    • 示例
<service android:name=".InternalService"
    android:exported="false"></service>
  1. android:icon
    • 含义:用于指定 Service 的图标。图标可能在某些调试或管理工具中显示以标识 Service,通常引用drawable资源。
    • 示例
<service android:name=".VisibleService"
    android:icon="@drawable/service_icon"></service>
  1. android:label
    • 含义:用于设置 Service 的标签或名称,可能在调试工具、系统服务管理界面等地方显示以标识 Service,一般引用string资源。
    • 示例
<service android:name=".NamedService"
    android:label="@string/service_label"></service>
  1. android:permission
    • 含义:用于指定调用该 Service 所需的权限。其他组件(包括其他应用中的组件)启动或绑定此 Service 时需要拥有该权限。
    • 示例
<service android:name=".ProtectedService"
    android:permission="com.example.myapp.ACCESS_SERVICE"></service>
  1. android:process
    • 含义:用于指定 Service 运行的进程。默认在应用主进程中运行,也可指定单独进程,用于隔离运行环境,提高稳定性和性能。
    • 示例
<service android:name=".IsolatedService"
    android:process=":service_process"></service>
  1. android:foregroundServiceType
    • 含义:从 Android 9(API 级别 28)开始引入,用于更精细地指定前台服务的类型,如locationmediaPlaybackphoneCall等,以符合系统对不同类型前台服务的管理要求。
    • 示例
<service
    android:name=".MyLocationService"
    android:foregroundServiceType="location">
    <!-- 其他服务相关内容 -->
</service>
  1. android:stopWithTask
    • 含义:布尔值属性,用于指定当与服务关联的任务结束时,服务是否随之停止。默认值为true,设置为false时,服务将在任务结束后继续运行。
    • 示例
<service
    android:name=".MyPersistentForegroundService"
    android:stopWithTask="false">
    <!-- 其他服务相关内容 -->
</service>

1.9.2.1. <intent - filter>

  • 含义:和 Activity 中的intent - filter类似,用于指定 Service 能够响应的意图类型。通过定义动作(<action>)、类别(<category>)和数据(<data>)等信息,让其他组件(如 Activity)可以通过特定的意图来启动或绑定该 Service。
  • 示例
<service android:name=".MyService">
    <intent - filter>
        <action android:name="com.example.myapp.START_MY_SERVICE"/>
    </intent - filter>
</service>
  • 在这里,定义了一个动作com.example.myapp.START_MY_SERVICE,其他组件可以通过发送带有这个动作的意图来启动MyService
1.9.2.1.1. <action>
  • 含义:用于指定服务可以响应的动作。这是intent - filter中最重要的标签之一,通过定义动作,外部组件可以发送特定动作的意图来启动或与服务交互。例如,一个音乐播放服务可能定义android.media.action.PLAY这样的动作。
  • 示例
<service android:name=".MusicService">
    <intent - filter>
        <action android:name="android.media.action.PLAY"/>
    </intent - filter>
</service>
  • 在这里,MusicService可以响应PLAY动作,当其他组件(如音乐播放控制器 Activity)发送带有android.media.action.PLAY动作的意图时,这个服务就可以执行播放音乐的操作。
1.9.2.1.2. <category>
  • 含义:用于进一步对意图进行分类,以更精确地匹配意图和服务。虽然在服务的intent - filter中不像在 Activity 中那么常用,但在某些情况下可以用于提供额外的筛选条件。例如,android.intent.category.DEFAULT类别可以用于隐式意图。
  • 示例
<service android:name=".DownloadService">
    <intent - filter>
        <action android:name="com.example.download.START_DOWNLOAD"/>
        <category android:name="android.intent.category.DEFAULT"/>
    </intent - filter>
</service>
  • 在这个例子中,DownloadService除了响应START_DOWNLOAD动作外,还属于DEFAULT类别,这有助于在使用隐式意图调用服务时更准确地匹配。
1.9.2.1.3. <data>
  • 含义:用于指定与意图相关的数据的类型、格式和位置等信息。在服务中,这可以用于处理特定类型的数据相关操作。例如,一个文件处理服务可能会根据数据的 MIME 类型或者 URI 来处理文件。
  • 示例
<service android:name=".FileService">
    <intent - filter>
        <action android:name="com.example.file.PROCESS_FILE"/>
        <data android:mimeType="text/plain"/>
    </intent - filter>
</service>
  • FileService可以响应PROCESS_FILE动作,并且处理的数据类型是纯文本(text/plain),可能用于读取、修改或其他文本文件相关的操作。

1.9.2.2. <meta - data>

  • 含义:用于为 Service 提供额外的自定义数据。这些数据可以在 Service 的代码中获取,用于配置 Service 的特殊行为或者传递一些信息。
  • 示例
<service android:name=".MyService">
    <meta - data
        android:name="custom_key"
        android:value="custom_value"/>
</service>
  • 此 Service 有一个名为custom_key的元数据,其值为custom_value,在 Service 的onCreate()或其他合适的方法中,可以通过相应的 API 获取这些元数据来进行处理。

1.9.3. <receiver>

  • 含义:Broadcast Receiver 用于接收系统或应用发出的广播消息。例如,电池电量变化、网络连接变化等广播都可以被接收。
  • 示例
<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name">
    <receiver android:name=".MyReceiver">
        <intent - filter>
            <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
        </intent - filter>
    </receiver>
</application>
  • 这个MyReceiver广播接收器可以接收网络连接改变的广播消息,当网络状态发生变化时,应用可以根据这个广播来执行相应的操作。

属性

  1. android:name
    • 含义:用于指定 Broadcast Receiver 的类名。可以是完整的包名和类名(如com.example.myapp.MyReceiver),也可以是相对路径(如.MyReceiver,它会基于清单文件中的package属性来确定完整的类名)。这是在清单文件中标识 Broadcast Receiver 的关键属性。
    • 示例
<receiver android:name=".MyReceiver">
    <intent - filter>
        <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
    </intent - filter>
</receiver>
  1. android:enabled
    • 含义:一个布尔值属性,用于确定 Broadcast Receiver 是否启用。如果设置为false,则该接收器无法接收广播,默认值为true。这可以用于在某些情况下(如根据用户配置或设备条件)禁用特定的 Broadcast Receiver。
    • 示例
<receiver android:name=".MyReceiver"
    android:enabled="false">
    <intent - filter>
        <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
    </intent - filter>
</receiver>
  1. android:exported
    • 含义:一个布尔值属性,用于指定 Broadcast Receiver 是否可以接收来自其他应用的广播。如果设置为true,则可以接收外部应用发送的广播;如果设置为false(默认值),则只能接收本应用内部发送的广播。
    • 示例
<receiver android:name=".InternalReceiver"
    android:exported="false">
    <intent - filter>
        <action android:name="com.example.myapp.INTERNAL_ACTION"/>
    </intent - filter>
</receiver>
  1. android:icon
    • 含义:用于指定 Broadcast Receiver 的图标。这个图标可能在某些调试或管理工具中显示,用于标识 Broadcast Receiver。通常引用drawable资源,如@drawable/receiver_icon。不过,在实际应用中,Broadcast Receiver 图标使用场景相对较少。
    • 示例
<receiver android:name=".VisibleReceiver"
    android:icon="@drawable/receiver_icon">
    <intent - filter>
        <action android:name="android.bluetooth.adapter.action.STATE_CHANGED"/>
    </intent - filter>
</receiver>
  1. android:label
    • 含义:用于设置 Broadcast Receiver 的标签或名称。这个名称可能在调试工具、系统广播管理界面等地方显示,用于标识 Broadcast Receiver。一般引用string资源,如@string/receiver_label
    • 示例
<receiver android:name=".NamedReceiver"
    android:label="@string/receiver_label">
    <intent - filter>
        <action android:name="android.intent.action.BATTERY_CHANGED"/>
    </intent - filter>
</receiver>
  1. android:permission
    • 含义:用于指定发送广播到这个 Broadcast Receiver 所需的权限。如果其他组件(包括其他应用中的组件)想要向这个接收器发送广播,需要拥有这个指定的权限。
    • 示例
<receiver android:name=".ProtectedReceiver"
    android:permission="com.example.myapp.SEND_BROADCAST_TO_RECEIVER">
    <intent - filter>
        <action android:name="com.example.myapp.PROTECTED_ACTION"/>
    </intent - filter>
</receiver>

1.9.3.1. <intent - filter>

  • 含义:这是 Broadcast Receiver 中最重要的标签之一。它用于指定该接收器能够接收的广播意图类型。通过在intent - filter中定义动作(<action>)、类别(<category>)和数据(<data>)等元素,来匹配系统或应用发出的广播。
  • 示例
<receiver android:name=".MyReceiver">
    <intent - filter>
        <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
    </intent - filter>
</receiver>
  • 在这个例子中,MyReceiver可以接收网络连接改变(android.net.conn.CONNECTIVITY_CHANGE)的广播。当网络状态发生变化时,系统会发送这个广播,MyReceiver就能够捕获并处理它。

1.9.3.2. <meta - data>

  • 含义:用于为 Broadcast Receiver 提供额外的自定义数据。这些数据可以在接收器的代码中获取,用于配置接收器的特殊行为或者传递一些信息。
  • 示例
<receiver android:name=".MyReceiver">
    <meta - data
        android:name="custom_key"
        android:value="custom_value"/>
</receiver>
  • 这里MyReceiver有一个名为custom_key的元数据,其值为custom_value。在接收器的onReceive()方法或者其他合适的地方,可以通过相应的 API 获取这些元数据来进行处理,比如根据这个自定义数据来决定是否处理接收到的广播。

1.9.4. <provider>

  • 含义:Content Provider 用于在不同的应用之间共享数据。例如,一个应用可以通过 Content Provider 将自己的数据(如联系人、短信等)提供给其他应用访问。
  • 示例
<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name">
    <provider
        android:name=".MyContentProvider"
        android:authorities="com.example.myapplication.provider">
    </provider>
</application>
  • android:name指定了 Content Provider 的类名,android:authorities定义了一个唯一的标识,其他应用可以通过这个标识来访问该 Content Provider 提供的数据。

属性

  1. android:name
    • 含义:用于指定 Content Provider 的类名。可以是完整的包名和类名(如com.example.myapp.MyContentProvider),也可以是相对路径(如.MyContentProvider,它会基于清单文件中的package属性来确定完整的类名)。这是在清单文件中标识 Content Provider 的关键属性。
    • 示例
<provider
    android:name=".MyContentProvider"
    android:authorities="com.example.myapplication.provider">
    <!-- 其他标签 -->
</provider>
  1. android:authorities
    • 含义:定义一个唯一的标识,用于其他应用访问该 Content Provider 提供的数据。这个标识通常是一个字符串,格式类似于域名反转的形式,并且在整个系统中应该是唯一的。
    • 示例
<provider
    android:name=".MyContentProvider"
    android:authorities="com.example.myapplication.provider">
    <!-- 其他标签 -->
</provider>
  1. android:enabled
    • 含义:一个布尔值属性,用于确定 Content Provider 是否启用。如果设置为false,则 Content Provider 无法被访问,默认值为true。这可以用于在某些情况下(如根据用户配置或设备条件)禁用特定的 Content Provider。
    • 示例
<provider
    android:name=".MyContentProvider"
    android:authorities="com.example.myapplication.provider"
    android:enabled="false">
    <!-- 其他标签 -->
</provider>
  1. android:exported
    • 含义:一个布尔值属性,用于指定 Content Provider 是否可以被其他应用访问。如果设置为true,则可以被外部应用访问;如果设置为false(默认值),则只能在本应用内部访问。
    • 示例
<provider
    android:name=".MyContentProvider"
    android:authorities="com.example.myapplication.provider"
    android:exported="false">
    <!-- 其他标签 -->
</provider>
  1. android:grantUriPermissions
    • 含义:一个布尔值属性,用于指定是否允许临时授予对 Content Provider 中 URI 的访问权限。如果设置为true,可以通过ContentResolver的相关方法在运行时动态地授予其他应用对特定 URI 的访问权限。默认值为false
    • 示例
<provider
    android:name=".MyContentProvider"
    android:authorities="com.example.myapplication.provider"
    android:grantUriPermissions="true">
    <!-- 其他标签 -->
</provider>
  1. android:icon
    • 含义:用于指定 Content Provider 的图标。这个图标可能在某些调试或管理工具中显示,用于标识 Content Provider。通常引用drawable资源,如@drawable/provider_icon。不过,在实际应用中,Content Provider 图标使用场景相对较少。
    • 示例
<provider
    android:name=".MyContentProvider"
    android:authorities="com.example.myapplication.provider"
    android:icon="@drawable/provider_icon">
    <!-- 其他标签 -->
</provider>
  1. android:label
    • 含义:用于设置 Content Provider 的标签或名称。这个名称可能在调试工具、系统内容提供管理界面等地方显示,用于标识 Content Provider。一般引用string资源,如@string/provider_label
    • 示例
<provider
    android:name=".MyContentProvider"
    android:authorities="com.example.myapplication.provider"
    android:label="@string/provider_label">
    <!-- 其他标签 -->
</provider>
  1. android:multiprocess
    • 含义:一个布尔值属性,用于指定 Content Provider 是否在每个访问它的进程中都创建一个实例。如果设置为true,每个进程都会有自己的 Content Provider 实例;如果设置为false(默认值),Content Provider 在整个应用的进程中共享一个实例。
    • 示例
<provider
    android:name=".MyContentProvider"
    android:authorities="com.example.myapplication.provider"
    android:multiprocess="true">
    <!-- 其他标签 -->
</provider>
  1. android:permission
    • 含义:用于指定访问这个 Content Provider 所需的权限。如果其他组件(包括其他应用中的组件)想要访问这个 Content Provider,需要拥有这个指定的权限。
    • 示例
<provider
    android:name=".MyContentProvider"
    android:authorities="com.example.myapplication.provider"
    android:permission="com.example.myapp.ACCESS_PROVIDER">
    <!-- 其他标签 -->
</provider>
  1. android:process
    • 含义:用于指定 Content Provider 运行的进程。默认情况下,Content Provider 在应用的主进程中运行,但可以通过这个属性为 Content Provider 指定单独的进程,这样可以在一定程度上隔离 Content Provider 的运行环境,提高应用的稳定性和性能。
    • 示例
<provider
    android:name=".MyContentProvider"
    android:authorities="com.example.myapplication.provider"
    android:process=":provider_process">
    <!-- 其他标签 -->
</provider>

1.9.4.1. <grant - uri - permission>

  • 含义:用于控制对Content Provider所提供数据的URI级别的访问权限。它可以有不同的属性来指定权限的范围,例如可以是针对特定的路径、路径模式或者所有的子路径等。这有助于精细地控制其他应用对Content Provider数据的访问。
  • 示例
<provider
    android:name=".MyContentProvider"
    android:authorities="com.example.myapplication.provider">
    <grant - uri - permission android:path="/data/user"/>
</provider>
  • 在这个例子中,grant - uri - permission允许对/data/user路径下的数据进行访问授权,其他应用在被授权的情况下可以访问Content Provider中该路径下的数据。

1.9.4.2. <meta - data>

  • 含义:和其他组件(如Activity、Service等)中的meta - data类似,用于为Content Provider提供额外的自定义数据。这些数据可以在Content Provider的代码中获取,用于配置特殊行为或者传递一些信息。
  • 示例
<provider
    android:name=".MyContentProvider"
    android:authorities="com.example.myapplication.provider">
    <meta - data
        android:name="custom_key"
        android:value="custom_value"/>
</provider>
  • 这里MyContentProvider有一个名为custom_key的元数据,其值为custom_value,在Content Provider的onCreate()或其他合适的方法中,可以通过相应的API获取这些元数据来进行处理。

1.9.4.3. <path - permission>

  • 含义:用于定义对Content Provider中特定路径的更详细的权限设置。可以指定读取、写入等权限,并且可以根据不同的路径或者路径模式来设置不同的权限规则,这对于保护Content Provider中的数据安全和隐私非常重要。
  • 示例
<provider
    android:name=".MyContentProvider"
    android:authorities="com.example.myapplication.provider">
    <path - permission
        android:path="/private/data"
        android:readPermission="com.example.myapp.READ_PRIVATE_DATA"
        android:writePermission="com.example.myapp.WRITE_PRIVATE_DATA"/>
</provider>
  • 在这个例子中,对于/private/data路径下的数据,设置了读取权限为com.example.myapp.READ_PRIVATE_DATA,写入权限为com.example.myapp.WRITE_PRIVATE_DATA,这样可以精确地控制对Content Provider中敏感数据的访问。

1.9.5. <meta - data>

  • 含义:可以用来为应用组件(如Activity、Service等)提供额外的自定义数据。这些数据可以是字符串、整数等各种类型,用于配置组件的特殊行为或者传递一些信息。
  • 示例
<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name">
    <activity android:name=".MyActivity">
        <meta - data
            android:name="custom_key"
            android:value="custom_value"/>
    </activity>
</application>
  • 在这个例子中,MyActivity有一个名为custom_key的元数据,其值为custom_value,在代码中可以获取这些元数据来进行相应的处理。

1.9.6. <activity - alias>

  • 含义:用于为一个已有的Activity创建别名。可以通过别名来启动原始的Activity,并且可以为别名设置不同的intent - filter等属性,从而实现不同的启动方式或者功能。
  • 示例
<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name">
    <activity android:name=".OriginalActivity">
    </activity>
    <activity - alias
        android:name=".AliasActivity"
        android:targetActivity=".OriginalActivity">
        <intent - filter>
            <action android:name="android.intent.action.ALIAS_ACTION"/>
            <category android:name="android.intent.category.DEFAULT"/>
        </intent - filter>
    </activity - alias>
</application>
  • 这里AliasActivityOriginalActivity的别名,通过AliasActivityintent - filter定义,可以使用ALIAS_ACTION这个动作来启动OriginalActivity

1.9.7. <service - alias>

  • 含义:类似于activity - alias,是为已有服务创建别名的标签。
  • 示例
<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name">
    <service android:name=".OriginalService">
    </service>
    <service - alias
        android:name=".AliasService"
        android:targetService=".OriginalService">
    </service - alias>
</application>
  • 可以通过AliasService来引用OriginalService,并且在某些场景下可以为别名服务设置不同的属性。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部