:app:assembleRelease 和 assembleRelease 之间的区别

Difference between :app:assembleRelease and assembleRelease

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

有什么区别

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

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

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

例如:如果你有多个模块命名为 module1 & module2 ,然后在评估阶段 Gradle 将每个模块的任务分配到它们自己的扩展中。这意味着您现在必须将其称为 :module1:task1 & :module2:task2

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


您可以在Android Studio/IntelliJ IDEA 中打开'Gradle' window 查看任务图表。

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

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

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