AndroidManifest.xml中application标签属性详解 —— 新手指南

762 阅读3分钟

一、基础配置类属性

属性用途最低API是否过时示例兼容性说明
android:name自定义 Application 子类(全局入口)1android:name=".MyApplication"必须继承自 android.app.Application
android:icon应用默认图标(Launcher/Settings 显示)1android:icon="@mipmap/ic_launcher"需提供自适应图标 (mipmap-anydpi-v26/ic_launcher.xml)
android:label应用显示名称1android:label="@string/app_name"多语言需配置 strings.xml 的翻译资源
android:theme全局主题样式1android:theme="@style/AppTheme"可被 Activity 主题覆盖
android:description应用描述(辅助功能/TTS)1android:description="@string/app_description"需配置 android:accessibilityDescription 以增强无障碍支持

二、安全与权限类属性

属性用途最低API是否过时示例兼容性说明
android:permission应用级全局权限1android:permission="android.permission.INTERNET"被组件级权限声明覆盖
android:allowBackup是否允许自动备份到云端8android:allowBackup="false"API 23+ 需配合 android:fullBackupContent 使用
android:networkSecurityConfig自定义网络安全策略(HTTPS 强制/证书固定)24android:networkSecurityConfig="@xml/network_security"API 24+ 必须使用,取代 android:usesCleartextTraffic
android:requestLegacyExternalStorage禁用分区存储(Scoped Storage)29✅ (API 30+)android:requestLegacyExternalStorage="true"​仅对 API 29~30 有效​​,API 31+ 强制分区存储
android:usesNonSdkApi声明使用非 SDK 接口(需 Google Play 白名单)28android:usesNonSdkApi="true"需使用 Veridex 检测
android:crossProfile跨用户配置文件访问权限34android:crossProfile="true"需声明 android.permission.INTERACT_ACROSS_USERS

三、性能与优化类属性

属性用途最低API是否过时示例兼容性说明
android:hardwareAccelerated全局启用硬件加速11android:hardwareAccelerated="true"默认启用,可在 Activity 级覆盖
android:largeHeap申请更大堆内存(谨慎使用)11android:largeHeap="true"可能导致系统性能下降
android:persistent声明为常驻进程(系统级应用专用)1android:persistent="true"需 android:sharedUserId="android.uid.system"
android:vmSafeMode启用虚拟机安全模式(禁用 JIT)28android:vmSafeMode="true"用于调试性能问题

四、 多进程与组件类属性

属性用途最低API是否过时示例兼容性说明
android:process指定全局进程名1android:process=":remote": 前缀表示私有进程
android:appComponentFactory自定义组件(Activity/Service)实例化逻辑28android:appComponentFactory="androidx.core.app.CoreComponentFactory"需实现 android.app.AppComponentFactory
android:zygotePreloadName指定 Zygote 预加载进程名(系统优化)28android:zygotePreloadName="webview_zygote"仅供系统应用使用

五、新兴特性类属性 (API 30+)

属性用途最低API是否过时示例兼容性说明
android:enableOnBackInvokedCallback启用系统返回手势的 Jetpack 回调33android:enableOnBackInvokedCallback="true"需配合 OnBackInvokedDispatcher 使用
android:requestForegroundServiceExemption申请前台服务豁免(免显示通知)35android:requestForegroundServiceExemption="mediaPlayback"需满足特定 豁免条件
android:enableVrMode启用 VR 模式(沉浸式头显支持)24android:enableVrMode="true"需声明 android.permission.ACCESS_VR_MANAGER

六、Android 35 配置示例

<application
    android:name=".MyApplication"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme"
    android:networkSecurityConfig="@xml/network_security"
    android:hardwareAccelerated="true"
    android:requestForegroundServiceExemption="mediaPlayback"
    android:allowBackup="false"
    tools:targetApi="35">

    <!-- API 29~30 分区存储兼容 -->
    <meta-data
        android:name="android:requestLegacyExternalStorage"
        android:value="true"
        tools:targetApi="30"/>

    <!-- 组件声明 -->
    <activity android:name=".MainActivity" />
</application>

七、 兼容性适配建议

1. 分区存储过渡

  • API 31+ 必须使用 MediaStore 或 SAF (存储访问框架)
  • 使用 Context#getExternalFilesDir() 访问应用专属目录

2. 网络安全策略

<!-- res/xml/network_security.xml -->
<network-security-config>
    <base-config cleartextTrafficPermitted="false"/>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">insecure.example.com</domain>
    </domain-config>
</network-security-config>

3. 返回手势兼容

if (Build.VERSION.SDK_INT >= 33) {
    onBackInvokedDispatcher.registerCallback(backCallback)
} else {
    onBackPressedDispatcher.addCallback(backCallback)
}

通过合理配置这些属性,可在 Android 35 设备上实现最佳性能与安全特性,同时保持对旧版本系统的兼容。

更多分享

  1. Android 存储权限兼容问题详解 —— 新手指南
  2. Android 定位权限兼容问题详解 —— 新手指南
  3. Parcelable 和 Serializable 的区别详解 —— 新手指南
  4. Android 事件分发机制详解 —— 新手指南
  5. Android Executor 与 Executors 详解 —— 新手指南