我确信以前曾经问过这个问题,但我找不到合适的关键字来找出答案,所以...
当我请求构建一个构建类型时,如何阻止Gradle for Android(Android Studio内部或外部)构建库模块的所有构建类型? IOW,如果我正在构建debug
,如何从 构建release
来阻止Gradle for Android?
对于那些有其他想法的人来说:
假设我有两个Android Studio项目,A和B.每个项目都有两个模块:一个Android库模块和一个依赖于该库的演示应用程序。所以,我总共有四个模块:
只要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>可以取决于debug
和release
的已发布工件。然而,这似乎会在A项目中引起很多补丁级别的流失,因为我的主要消费者&#34;用例&#34;这个新的A功能是B.只是因为我有A的变化,通过仪表测试并不意味着他们将成为B需要的东西,我不会知道,直到我可以用变化构建B在A。
上述解决方法的变体可能是SNAPSHOT
版本,我会以某种方式启用SNAPSHOT
debug
版本,但不会release
或{ 。然而,Maven,Gradle,Android和SNAPSHOT
的混合似乎都没有得到充分记录,我不知道它是否应该是我应该追求的东西。并且,与前面的子弹一样,这仍然会导致release
被不必要地构建;在我的情况下,构建只会成功。
是否有某些Gradle for Android设置我错过了debug
表示只是 debug
?
答案 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
为你工作?似乎是大多数人认为工作的那个,我还没有亲自尝试过。