Android应用双Launcher Activity配置:调试入口仅Debug版本可用的问题求解
Android Debug专属双Launcher入口配置方案
方案一:Manifest占位符控制(推荐)
利用Android Gradle插件的Manifest占位符功能,动态控制调试Activity的Launcher过滤是否生效:
配置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" } } }在主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未生效,大概率是合并规则错误,正确步骤:
在
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>主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
相关产品推荐
相关产品推荐

