【问题标题】:How can I have different manifest files for the release and debug versions?如何为发布和调试版本提供不同的清单文件?
【发布时间】:2015-03-28 13:23:48
【问题描述】:

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

通常我不需要这样的东西,但在调试模式下,我的应用程序在不同的用户 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


    【解决方案1】:

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

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

    【讨论】:

    • 这个例子看起来很有帮助。 Android 会自动合并这两个清单,还是我需要修改 Gradle 配置中的某些内容?该示例正是我所需要的,因为看起来我不需要两个单独的清单,而只需要 diff 部分。
    • @MridangAgarwalla:“Android 会自动合并这两个清单吗?”——是的。 “看起来我不需要有两个单独的清单,而只有差异部分” - 可能。清单合并很​​复杂,因此根据您要执行的操作,您可能需要为 Android 版 Gradle 提供更多帮助:tools.android.com/tech-docs/new-build-system/user-guide/…
    • 除了在我的 app/build.gradle 文件中定义调试 {} 和发布 {} buildTypes 之外,我什么也没做。
    • @CommonsWare:我刚试过,看起来清单是自动合并的。我没有收到 INSTALL_FAILED_UID_CHANGED 错误,并且 APK 正常工作。
    • Android Studio 1.4 仅显示 debug Manifest,但 release 不显示
    【解决方案2】:

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

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

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


    在 Android Studio 上显示 Release Manifest

    1. 打开构建变体窗口
    2. debug 更改为 release
    3. 将在 Project -> Android -> manifests 上可见

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-11-17
        • 1970-01-01
        • 2018-09-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-11
        • 1970-01-01
        相关资源
        最近更新 更多