【发布时间】:2015-03-25 15:46:29
【问题描述】:
我确定以前有人问过这个问题,但我只是找不到合适的关键字来找出答案,所以...
当我请求构建一个构建类型时,如何阻止 Gradle for Android(在 Android Studio 内部或外部)构建库模块的所有构建类型? IOW,如果我正在构建 debug,如何防止 Gradle for Android也构建 release?
背景故事,对于那些有不同想法的人:
假设我有两个 Android Studio 项目,A 和 B。每个项目都有两个模块:一个 Android 库模块和一个依赖于该库的演示应用程序。所以,我一共有四个模块:
- AL:项目A的库
- AD:项目A的demo app
- BL:项目B的库
- BD:项目B的demo app
只要 A 和 B 没有血缘关系,生活就是美好的。
但是如果我想让 BL 依赖于 AL 怎么办?
对于release,如果我希望这些库进入 Maven 风格的工件存储库,我需要 BL 的 release 变体依赖于 A 的已发布工件>L。这样,我的 BL POM 就有了正确的依赖信息。
对于debug,如果 BL 可以依赖于 AL 的工作副本,那将是理想的选择。虽然设置起来有点麻烦,但我可以让它工作。
但是,如果我向 AL 添加一些东西,例如一个新的 Java 类,并且我尝试从 BL 使用它,我将无法构建。我的debug 构建非常好 AFAICT。然而,即使我现在真的真的不想做 release 构建,Android 的 Gradle 仍然坚持做 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 构建。 release 构建无法编译,因为我试图让 BL 使用 AL 中未发布的新内容。
虽然不是 100% 肯定,但我有理由相信,如果 Gradle for Android 在我尝试构建 debug 时会愉快地忽略 release,那么我的状态会很好。
当然,也有可能的解决方法:
我可以放弃这些是独立库的想法,并将它们合并为一个。我可能还会这样做。但我确实感觉我正在尝试做的事情应该是可能的。
在发布
releaseAL 之前,我无法尝试使用 AL 更改,在这种情况下为 BL 可以依赖于debug和release的已发布工件。然而,这似乎会在 A 项目中导致大量补丁级别的流失,因为我的这个新 A 功能的主要消费者“用例”是 B。仅仅因为我在 A 中有通过仪器测试的更改并不意味着它们'将是 B 所需要的,直到我可以使用 A 中的更改构建 B 之前我不会知道这一点。上述解决方法的一个变体可能是
SNAPSHOT版本,我会以某种方式启用检查SNAPSHOT版本的debug,但不检查release或其他东西。然而,Maven、Gradle、Android 和SNAPSHOT的组合似乎都没有得到充分的记录,我不知道这是否是我应该追求的东西。而且,与前面的子弹一样,这仍然会导致release被不必要地构建;在我的情况下构建会成功。
是否有一些我缺少的 Gradle for Android 设置说 debug 表示 只是 debug?
【问题讨论】:
-
我并不精通 Gradle,所以这可能是一派胡言 :-| - 你能打开
Build Variants面板(查看> 工具窗口> 构建变体)并为richedit模块选择debug吗? -
@Vikram:就是这样。反过来,这意味着当您构建或运行项目时,它将执行
assembleDebug任务,并导致所描述的问题。我碰巧使用命令行gradle assembleDebug任务来显示 Gradle 成绩单,但结果是一样的。不过谢谢! -
@AmrutBidri:该评论仅适用于自定义构建类型。现在,我只使用
debug和release。不过谢谢!
标签: android android-studio android-gradle-plugin