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

Com*_*are 13 android android-studio android-gradle-plugin

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

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


对于那些有其他想法的人来说,这个背景故事:

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

  • A L:项目A的库
  • A D:项目A的演示应用程序
  • B L:项目B的图书馆
  • B D:项目B的演示应用程序

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

但是如果我想让B L依赖A L呢?

因为release,如果我希望这些库进入Maven风格的工件库,我需要releaseB L的变体来依赖于已发布的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
Run Code Online (Sandbox Code Playgroud)

(在哪里richedit是B L并且在我的命名法中demo是B D)

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

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

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

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

  • 我不能尝试使用一个大号的变化,直到我发布release一个大号,在这种情况B 大号可取决于两个发布的神器debugrelease.然而,这似乎会在A项目中引起很多补丁级别的流失,因为我的主要消费者"这个新功能的用例"是B.仅仅因为我在A中的变化通过了仪器测试并不意味着他们将是B需要的东西,直到我可以用A中的变化构建B,我才会知道.

  • 上述解决方法的变体可能是SNAPSHOT发布,我会以某种方式启用检查SNAPSHOT发布debug但不适用于release某些内容.然而,Maven,Gradle,Android和SNAPSHOT所有这些的混合看起来似乎没有记录,我不知道这是否是我应该追求的东西.并且,与前面的子弹一样,这仍然会导致release不必要的构建; 在我的情况下,构建将成功.

有一些摇篮的Android设置的地方,我很想念,说debug只是 debug

Sla*_*ast 2

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

评论 #35 即

尝试在依赖项目中设置它

android {
    publishNonDefault true
    ...
}
Run Code Online (Sandbox Code Playgroud)

这在使用它的项目中

dependencies {
    releaseCompile project(path: ':theotherproject', configuration: 'release')
    debugCompile project(path: ':theotherproject', configuration: 'debug')
}
Run Code Online (Sandbox Code Playgroud)

取自此处: https://code.google.com/p/android/issues/detail?id=66805

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