:app:assembleRelease 和 assembleRelease 之间的区别

Posted

技术标签:

【中文标题】:app:assembleRelease 和 assembleRelease 之间的区别【英文标题】:Difference between :app:assembleRelease and assembleRelease 【发布时间】:2020-07-14 09:05:13 【问题描述】:

我的 android 项目中有多个模块。如果我使用:app:assembleRelease 制作发布apk,它可以工作,但是当我使用assembleRelease 制作发布apk 时,它一直显示错误。我知道我的代码中有错误,但这不是我要质疑的。我只想知道assembleRelease:app:assembleRelease有什么区别

【问题讨论】:

【参考方案1】:

在多模块 Gradle 项目中,如果您没有明确地引用您的模块,那么 Gradle 默认会尝试从根项目的任务图中查找该任务。

例如:如果您有多个名为 module1module2 的模块,那么在评估阶段 Gradle 会将每个模块的任务分配到他们自己的扩展。这意味着您现在必须将其称为 :module1:task1:module2:task2

这就是assembleRelease 不起作用而:app:assembleRelease 起作用的原因。


您可以通过在 Android Studio/IntelliJ IDEA 中打开“Gradle”窗口来查看任务图表。

如果您查看下图,您可以看到 Tasks 节点,其中包含在根项目中可用的常见任务。

虽然在扩展它自己的节点中可以找到其他模块相关的任务。

注意:在 android 中你可以有多个模块,但你的默认模块总是缩写为 app 模块,而其他模块则被视为库模块,它们的名称缩写为上图中的那个单独的模块,如 base、db、domain 等(我猜你不能在同一个项目中有多个应用程序模块)

【讨论】:

如果我运行:db:assembleRelease而不是:app:assembleRelease会发生什么? 它将在其构建目录中为该模块库生成 .aar (android archive format) 文件。【参考方案2】:

:app:assembleReleaseassembleRelease的区别在于assembleRelease执行每个模块的assembleRelease任务,而:app:assembleRelease执行app模块中的assembleRelease任务。

显然,两者的任务图都正确填充,这意味着 Android 的 :app:assembleRelease 依赖于 :app 中用作依赖项的其他模块的 assembleRelease

【讨论】:

如果我用:app:assembleRelease而不是assembleRelease为playstore制作一个android apk可以吗? @zihadrizkyef 如果您上传到 Play 商店的 APK 是模块 app 的 APK,并且您没有手动操作任务图,是的。

以上是关于:app:assembleRelease 和 assembleRelease 之间的区别的主要内容,如果未能解决你的问题,请参考以下文章

我将构建签名的 apk 时出错

无法在Android Studio中构建Release APK

android - android studio中的proguard错误

[ActionScript 3.0] AS3.0和AS2.0的相互通信

[单词用法总结]-as

strptime、as.POSIXct 和 as.Date 返回意外的 NA