Android 区别:app:assembleRelease和assembleRelease

Android 区别:app:assembleRelease和assembleRelease,android,gradle,gradlew,Android,Gradle,Gradlew,我的android项目中有多个模块。如果我使用:app:assembleerelease发布apk,它会工作,但当我使用assembleerelease发布apk时,它会一直显示错误。我知道我的代码中有错误,但这不是我所质疑的。我只想知道assembleerelease和:app:assembleerelease之间的区别是:app:assembleerelease和assembleerelease之间的区别是assembleerelease在:app:assembleerelease执行app

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

之间的区别是
:app:assembleerelease
assembleerelease
之间的区别是
assembleerelease
:app:assembleerelease
执行
app
模块中的
assembleerelease
任务


显然,这两个模块的任务图都已正确填充,这意味着Android的
:app:assembleerelease
依赖于多模块Gradle项目中用作依赖项的其他模块的
assembleerelease
,如果您没有显式地引用您的模块,那么Gradle在默认情况下尝试从根项目的任务图中查找该任务

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

这就是为什么
assembleerelease
不起作用的原因&
:app:assembleerelease
起作用


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

如果查看下图,您可以看到“任务”节点,它在根项目中具有可用的公共任务

在扩展自己的节点时,可以找到其他与模块相关的任务


注意:在安卓系统中,您可以有多个模块,但默认模块始终缩写为app module,而其他模块则被视为library module,从上图中可以看出,这些模块的名称缩写为单个模块的名称,如base、db、domain等(我想您不能在同一个项目中有多个app module).

如果我运行
:db:assembleerelease
而不是
:app:assembleerelease
,会发生什么?它会生成.aar(android存档格式)如果我用
:app:assembleerelease
而不是
assembleerelease
,为playstore制作一个android apk,而不是
assembleerelease
,可以吗?@zihadrizkyef如果你上传到playstore上的apk是模块
app
的apk,并且你没有手动操作任务图,可以。