如何从构建中停止Gradle for Android *所有*库模块构建类型在每个构建?

时间:2015-03-25 15:46:30

标签: android android-studio android-gradle

我确信以前曾经问过这个问题,但我找不到合适的关键字来找出答案,所以...

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


对于那些有其他想法的人来说:

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

  • L :项目A的库
  • D :项目A的演示应用
  • B L :项目B&#39>
  • B D :项目B的演示应用

只要A和B不相关,生活就会好。

但如果我希望B L 依赖A L 怎么办?

对于release,如果我希望这些库进入Maven风格的工件库,我需要B L release变体来依赖于已发布的工件A L 。这样,我的B L POM就有了正确的依赖信息。

对于debug,如果B L 可能取决于A L 的工作副本,那将是理想的。设置它有点hacky,我可以使它工作。

但是如果我把东西添加到A L ,比如新的Java类,我尝试在B L 中使用它,我就无法构建。我的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是B L demo在我的命名法中是B D

我要求汇编debug版本,但它仍会编译release版本。并且release构建无法编译,因为我试图让B L 使用来自A L 的新未发布的东西。

我有理由相信,尽管不是100%肯定,如果我尝试构建release时Gradle for Android会轻易忽略debug,那我就会很好。

当然,有可能的解决方法:

  • 我可以放弃这些是独立的库并将它们合并为一个的想法。我可能会这样做。但它确实感觉就像我应该做的那样。

  • 在发布release A L 之前,我无法尝试使用A L 更改,在这种情况下B L < / sub>可以取决于debugrelease的已发布工件。然而,这似乎会在A项目中引起很多补丁级别的流失,因为我的主要消费者&#34;用例&#34;这个新的A功能是B.只是因为我有A的变化,通过仪表测试并不意味着他们将成为B需要的东西,我不会知道,直到我可以用变化构建B在A。

  • 上述解决方法的变体可能是SNAPSHOT版本,我会以某种方式启用SNAPSHOT debug版本,但不会release或{ 。然而,Maven,Gradle,Android和SNAPSHOT的混合似乎都没有得到充分记录,我不知道它是否应该是我应该追求的东西。并且,与前面的子弹一样,这仍然会导致release被不必要地构建;在我的情况下,构建只会成功。

是否有某些Gradle for Android设置我错过了debug表示只是 debug

2 个答案:

答案 0 :(得分:3)

https://stackoverflow.com/a/27278352/535762 如果你修复了你的问题,我会很有兴趣知道如何使用gradle构建并且只考虑调试时确实没有完全的功能。

这里的基本部分:

在左侧的“Build Variants”面板窗口中,您应该看到两个模块,并且旁边是当前的“活动”变体。例如

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,并且始终只执行构建当前模块所需的内容。

答案 1 :(得分:2)

此处有一个错误:https://code.google.com/p/android/issues/detail?id=52962

评论#35即

  

尝试在依赖项目

中设置此项
android {
    publishNonDefault true
    ...
}
     

这在使用它的项目中

dependencies {
    releaseCompile project(path: ':theotherproject', configuration: 'release')
    debugCompile project(path: ':theotherproject', configuration: 'debug')
}
     

从这里采取:   https://code.google.com/p/android/issues/detail?id=66805

为你工作?似乎是大多数人认为工作的那个,我还没有亲自尝试过。