You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何根据Android版本配置不同启动Activity?多API清单适配可行吗?

Android 跨版本启动屏适配方案

问题背景

Android 12(API 31)及以上推出了全新的启动屏API,想在高版本用新API,低版本保留原有的SplashActivity实现——即低版本用SplashActivity作为启动入口,高版本直接用MainActivity配合新启动屏API,问能不能针对不同API版本用不同的清单文件?

解决方案

完全可以实现,有两种常用方案按需选择:

方案一:用资源布尔值控制Activity启用状态(推荐,更简洁)

不需要拆分清单文件,通过Android的版本限定资源控制SplashActivity的启用状态:

  1. 定义版本相关布尔值

    • 在res/values/bools.xml(低版本生效)中:
      <bool name="enable_legacy_splash">true</bool>
      
    • 新建res/values-v31/bools.xml(API31+生效):
      <bool name="enable_legacy_splash">false</bool>
      
  2. 修改主清单文件

    • 给SplashActivity添加android:enabled属性绑定布尔值,保留原启动intent-filter:
      <activity
          android:name=".SplashActivity"
          android:theme="@style/SplashTheme"
          android:exported="true"
          android:enabled="@bool/enable_legacy_splash">
          <intent-filter>
              <action android:name="android.intent.action.MAIN" />
              <category android:name="android.intent.category.LAUNCHER" />
          </intent-filter>
      </activity>
      
    • 给MainActivity配置新启动屏API主题(API31+生效):
      在res/values-v31/styles.xml中定义启动屏主题:
      <style name="MainActivityTheme" parent="Theme.MaterialComponents.DayNight.NoActionBar">
          <item name="android:windowSplashScreenBackground">@color/splash_bg</item>
          <item name="android:windowSplashScreenAnimatedIcon">@drawable/ic_splash_logo</item>
      </style>
      
      主清单中给MainActivity绑定该主题:
      <activity
          android:name=".MainActivity"
          android:theme="@style/MainActivityTheme"
          android:exported="true" />
      

API31以下SplashActivity会被启用作为启动入口,API31+时SplashActivity自动禁用,系统直接启动MainActivity并加载新API配置的启动屏。

方案二:使用多清单文件(按API版本拆分)

如果需要对不同版本做更多清单定制,可以直接创建分版本清单文件:

  1. 创建API31+专属清单
    在项目src目录下新建main-31文件夹(与main同级),里面创建AndroidManifest.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="你的应用包名">
    
        <application>
            <!-- 把MainActivity设为API31+的启动入口 -->
            <activity
                android:name=".MainActivity"
                android:theme="@style/MainActivityTheme"
                android:exported="true">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
            <!-- 禁用低版本的SplashActivity -->
            <activity
                android:name=".SplashActivity"
                android:enabled="false" />
        </application>
    </manifest>
    
  2. 主清单保持低版本配置
    src/main/AndroidManifest.xml保留原有内容:

    <activity
        android:name=".SplashActivity"
        android:theme="@style/SplashTheme"
        android:exported="true">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    
    <activity android:name=".MainActivity" />
    

构建时,API31+版本会自动合并main和main-31的清单,最终SplashActivity被禁用,MainActivity成为启动入口;低版本则只使用主清单配置。

内容的提问来源于stack exchange,提问作者Anon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 00:23:11