: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 默认会尝试从根项目的任务图中查找该任务。
例如:如果您有多个名为 module1 和 module2 的模块,那么在评估阶段 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:assembleRelease
和assembleRelease
的区别在于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 之间的区别的主要内容,如果未能解决你的问题,请参考以下文章
无法在Android Studio中构建Release APK
android - android studio中的proguard错误