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

Android应用双Launcher Activity配置:调试入口仅Debug版本可用的问题求解

Android Debug专属双Launcher入口配置方案

方案一:Manifest占位符控制(推荐)

利用Android Gradle插件的Manifest占位符功能,动态控制调试Activity的Launcher过滤是否生效:

  1. 配置build.gradle(或build.gradle.kts)的构建类型:
    对于Groovy:

    android {
        buildTypes {
            debug {
                manifestPlaceholders += [DEBUG_LAUNCHER_ENABLED: "true"]
            }
            release {
                manifestPlaceholders += [DEBUG_LAUNCHER_ENABLED: "false"]
            }
        }
    }
    

    对于Kotlin DSL:

    android {
        buildTypes {
            debug {
                manifestPlaceholders["DEBUG_LAUNCHER_ENABLED"] = "true"
            }
            release {
                manifestPlaceholders["DEBUG_LAUNCHER_ENABLED"] = "false"
            }
        }
    }
    
  2. 在主Manifest中声明调试Activity,用占位符控制Launcher过滤:

    <activity
        android:name=".DebugSettingsActivity"
        android:exported="true">
        <!-- 仅Debug版本启用Launcher入口 -->
        <intent-filter android:if="${DEBUG_LAUNCHER_ENABLED}">
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    

    注:android:if是AGP 3.0+支持的语法,Release构建时该intent-filter会被自动移除。

方案二:Debug专属Manifest合并(解决你之前的失效问题)

如果之前将调试Activity移到Debug目录Manifest未生效,大概率是合并规则错误,正确步骤:

  1. 在app/src/debug/目录下创建AndroidManifest.xml,仅保留调试Activity的Launcher配置:

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android">
        <application>
            <activity
                android:name=".DebugSettingsActivity"
                android:exported="true">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>
    </manifest>
    
  2. 主Manifest中仅声明调试Activity的基础信息,不要添加Launcher intent-filter:

    <activity
        android:name=".DebugSettingsActivity"
        android:exported="true" />
    

    Debug构建时,两个Manifest会自动合并,生成带双Launcher入口的APK;Release构建时,Debug目录的Manifest不会被加载,调试Activity无Launcher入口。

进阶:调试Activity仅存在于Debug版本

如果调试Activity包含仅Debug可用的逻辑,不想打包到Release:

  • 将DebugSettingsActivity类放在app/src/debug/java/[你的包名]/目录下
  • 主Manifest中不要声明该Activity,仅在Debug目录的Manifest中声明它
  • Release构建时,该类和Manifest声明都会被排除,完全不进入APK

关键注意事项

  • Android 12+要求Launcher入口的Activity必须设置android:exported="true",否则会构建失败
  • 确保调试Activity的类在对应构建版本中存在(要么全版本存在,要么仅Debug版本存在)
  • 测试时需分别构建Debug和Release版本验证效果,避免缓存影响

内容的提问来源于stack exchange,提问作者Ángel Gómez García

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 13:47:56