如何为发布版本和调试版本拥有不同的清单文件?

问题描述 投票:0回答:4

Android Studio 中我的 APK 的调试版本和发布版本是否可以有不同的清单文件?

通常我不需要这样的东西,但在调试模式下,我的应用程序在不同的用户 ID 和进程中运行,这是在清单中定义的。我附上了我的调试清单的差异:

--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -1,5 +1,6 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.mridang.address"
+    android:sharedUserId="com.mridang.dashclock"
     android:versionCode="10"
     android:versionName="1.0" >

@@ -14,6 +15,7 @@
     <application
         android:allowBackup="true"
         android:icon="@drawable/ic_launcher"
+        android:process="com.mridang.dashclock"
         android:label="@string/application_name"
         android:theme="@android:style/Theme.Holo.Light.DarkActionBar" >

我在构建之前隐藏调试清单文件并弹出它而失去了理智,如果可以有两个单独的清单,那就太好了。

android android-studio apk android-gradle-plugin
4个回答
44
投票

在 src/ 下创建一个“debug”文件夹并将其放入其中:https://github.com/androidfu/Now-Playing/tree/master/app/src

我的“release”清单位于 src/main/ 中,但我很确定如果您需要两个完全独立的清单文件,您可以使用 src/release/ 和 src/debug/。


8
投票

对于我们这些应用程序中有变体并且仍然需要自定义调试清单以在其变体中使用的人来说,以下信息可能会有所帮助:

  1. 我们用源集覆盖的顺序可能是最重要的事情,因为合并级联沿着优先级链向下。如果我们希望 all 调试版本都具有清单,那么我们应该将其放在
    src/debug
    文件夹中 - 然后所有变体的清单将覆盖 this 一个。如果您想让调试清单仅应用于特定变体,那么您应该将其放在 src/variantnameDebug/AndroidManifest.xml
    变体的名称必须与文件夹的名称完全匹配。 “构建变体”侧边栏显示变体名称列表,以及所选全名的变体。获取源集可能的文件夹位置的综合报告的另一种方法是从右侧的 Gradle 侧边栏运行位于 /Tasks/android/sourceSets 的 gradle 任务。
  2. “合并清单”视图至关重要,并且可能是调试正在发生的情况最有用的工具。当您打开任何清单文件时,请查看编辑器选项卡栏的底部。切换到此视图会提供所有合并在一起的清单的已编译的彩色报告以及任何错误和建议。
  3. 有关此合并的详细文档位于:https://developer.android.com/studio/build/manifest-merge

是的,这是可能的。使用此路径:


4
投票
调试清单

:../src/debug/AndroidManifest.xml

发布清单:../src/release/AndroidManifest.xml

在 Android Studio 上显示 Release Manifest


打开构建变体

窗口
  1. debug 更改为
  2. release
  3. 将在项目 -> Android -> 清单中可见
Kotlin 多平台

0
投票

添加一个文件夹 src/androidDebug,其中包含

AndroidManifest.xml

以及特定于调试的配置。

如果您有一些特定于调试的
活动
,Android Studio 在尝试运行这些活动时会给出一个模糊的错误:“

组件激活异常

”。显然,到调试清单的链接不能 100% 工作。您可以通过在 build.gradle.kts 文件中显式指定清单的链接来解决此错误: android { ... sourceSets { getByName("debug") { manifest.srcFile("src/androidDebug/AndroidManifest.xml") } } }

    

© www.soinside.com 2019 - 2024. All rights reserved.