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

How can I have different manifest files for the release and debug versions?

是否可以在 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" >

我对隐藏调试清单文件并在构建之前弹出它感到迷惑,如果可能有两个单独的清单,那就太好了。

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

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

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

调试清单:../src/debug/AndroidManifest.xml

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


在Android Studio 上显示发布清单

  1. 打开 构建变体 Window
  2. 调试更改为发布
  3. 将在项目中可见 -> Android -> 清单

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

  1. 我们用源集覆盖的 order 可能是最重要的事情,因为合并 cascades 优先级链。如果我们希望 all 调试版本有清单,那么我们应该把它放在 src/debug 文件夹中 - 然后所有变体的清单将覆盖 this 一个。如果您想让调试清单应用于 特定变体,那么您应该将其放在 src/variantnameDebug/AndroidManifest.xml
  2. 变体名称必须与文件夹名称完全匹配。 Build Variants 侧边栏显示变体名称列表,以及所选全名的变体。另一种获取源集可能文件夹位置综合报告的方法是 运行 /Tasks/android/sourceSets 右侧 Gradle 侧边栏中的 gradle 任务。
  3. Merged Manifest 视图是必不可少的,并且可能是调试正在发生的事情的最有用的工具。当您打开任何 Manifest 文件时,查看编辑器选项卡栏的底部。切换到此视图会提供一份已编译的彩色报告,其中包含合并在一起的所有清单以及任何错误和建议。

有关此合并的详细文档在此处:https://developer.android.com/studio/build/manifest-merge