gpt4 book ai didi

android - 如何停止 Gradle for Android 在每次构建时构建 *All* 库模块构建类型?

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:27:26 27 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Why does Gradle build my module in Release mode when the app is in Debug

(4 个回答)


7年前关闭。




我确定以前有人问过这个问题,但我只是没有找到正确的关键字来找出答案,所以......

当我请求构建一种构建类型时,如何阻止 Gradle for Android(在 Android Studio 内部或外部)构建库模块的所有构建类型? IOW,如果我正在 build debug ,如何防止 Gradle for Android 也构建 release ?

对于那些有不同想法的人来说,背景故事:

假设我有两个 Android Studio 项目,A 和 B。每个项目都有两个模块:一个 Android 库模块和一个依赖于该库的演示应用程序。所以,我总共有四个模块:

  • AL:项目 A 的图书馆
  • AD:项目A的演示应用
  • BL:项目B的图书馆
  • BD:项目B的演示应用

  • 只要 A 和 B 没有血缘关系,生活就是美好的。

    但是如果我想让 BL 依赖 AL 怎么办?

    对于 release ,如果我希望这些库进入 Maven 风格的工件存储库,我需要 release BL 的变体取决于 AL 的已发布工件。这样,我的 BL POM 就有了正确的依赖信息。

    对于 debug ,如果 BL 可以依赖 AL 的工作副本,那将是理想的。虽然设置它有点hacky,但我可以让它工作。

    但是,如果我向 AL 添加一些东西,例如一个新的 Java 类,并且我尝试从 BL 中使用它,我就无法构建。我的 debug构建非常好AFAICT。然而,即使我真的真的真的不想做 release现在构建,Gradle for Android 坚持做 release无论如何构建:
    $ gradle assembleDebug
    :demo:preBuild UP-TO-DATE
    :demo:preDebugBuild UP-TO-DATE
    :demo:compileDebugNdk UP-TO-DATE
    :demo:checkDebugManifest
    :demo:preReleaseBuild UP-TO-DATE
    :richedit:compileLint
    :richedit:copyReleaseLint UP-TO-DATE
    :richedit:mergeReleaseProguardFiles UP-TO-DATE
    :richedit:preBuild UP-TO-DATE
    :richedit:preReleaseBuild UP-TO-DATE
    :richedit:checkReleaseManifest
    :richedit:prepareReleaseDependencies
    :richedit:compileReleaseAidl UP-TO-DATE
    :richedit:compileReleaseRenderscript UP-TO-DATE
    :richedit:generateReleaseBuildConfig UP-TO-DATE
    :richedit:generateReleaseAssets UP-TO-DATE
    :richedit:mergeReleaseAssets UP-TO-DATE
    :richedit:generateReleaseResValues UP-TO-DATE
    :richedit:generateReleaseResources UP-TO-DATE
    :richedit:packageReleaseResources
    :richedit:processReleaseManifest UP-TO-DATE
    :richedit:processReleaseResources
    :richedit:generateReleaseSources
    :richedit:compileReleaseJava

    (在我上面的命名法中, richedit 是 BL, demo 是 BD)

    我要求组装 debug构建,但它仍然编译 release build 。和 release build 无法编译,因为我试图让 BL 使用 AL 中未发布的新内容。

    我有理由相信,尽管不是 100% 肯定,如果 Gradle for Android 会轻率地忽略 release当我尝试构建 debug ,我会保持良好的状态。

    当然,也有可能的解决方法:
  • 我可以放弃这些是单独的库并将它们合并为一个的想法。我可能还会这样做。但它确实感觉我正在尝试做的事情应该是可能的。
  • 在发布 release 之前,我无法尝试使用 AL 更改。 AL,在这种情况下,BL 可以依赖于已发布的工件 debugrelease .然而,这似乎会在 A 项目中导致大量补丁级别的流失,因为我的这个新 A 功能的主要消费者“用例”是 B。仅仅因为我在 A 中有通过仪器测试的更改并不意味着它们'将是 B 所需要的,直到我可以用 A 中的更改构建 B 之前我不会知道这一点。
  • 上述解决方法的变体可能是 SNAPSHOT发布,我会以某种方式启用检查 SNAPSHOT debug 的发布但不适用于 release或者其他的东西。但是,Maven、Gradle、Android 和 SNAPSHOT 的混合一切似乎都记录不足,我不知道这是否是我应该追求的。并且,与前面的项目符号一样,这仍然会导致 release不必要地 build ;在我的情况下,构建只会成功。

  • 是否有一些我缺少的 Android 设置 Gradle 说 debug仅表示 debug ?

    最佳答案

    https://stackoverflow.com/a/27278352/535762
    如果您解决了您的问题,我很想知道如何解决,因为使用 gradle 构建时肯定还没有完全功能,只考虑调试。

    这里的基本部分:

    在左侧的“构建变体”面板窗口中,您应该会看到两个模块,以及它们旁边的当前“Activity ”变体。例如

    app debug 
    custom_lib debug

    Build > Make Project

    正在以当前变体构建项目中的每个模块

    https://code.google.com/p/android/issues/detail?id=52962将需要构建 custom_lib 的发布变体,因此您最终会构建两者。

    使用显示 Make Module app 的选项.此选项将根据项目面板中的当前选择或当前编辑器从 app 更改为 lib,并且始终只执行构建当前模块所需的操作。

    关于android - 如何停止 Gradle for Android 在每次构建时构建 *All* 库模块构建类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29260309/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com