What are the differences between gradle assemble and gradle build tasks?

谁都会走 提交于 2019-11-28 21:02:16

Assemble will build your artifacts, and build will assemble your artifacts with additional checks.

build depends on assemble, so build is sort of a superset of assemble

You can have a look on the tasks that will be executed by using the --dry-run flag. e.g.

gradlew build --dry-run

You will see that apart from assemble also lint and test will be executed.

From gradle tasks --all:

Build tasks
-----------
assemble - Assembles the outputs of this project.
build - Assembles and tests this project.

build is effectively assemble + check (and check is test + any linting tasks).

It's true that according to gradle tasks it looks like the build is a superset of assemble, including tests. But(!) from my short experience it really looks like it's not the case.

So I ran those 2 commands in the command line using the gradle wrapper with --scan flag after running clean every time. This is the comparison:

  1. Desired built files:
    • After running assembleDebug I got all the built files i wanted - *.apk and *.aar files.
    • After running buildDebug I didn't have any of those files.
  2. Amount of tasks ran according to the scans:
    • assembleDebug - 109 tasks
    • buildDebug - 91 tasks
  3. Amount of dependencies according to the scan:
    • assembleDebug - 172 from 20 configurations
    • buildDebug - 104 from 18 configurations
    • It seems like the reason they differ is that in assembleDebug in 2 of my 3 sub projects (which are java libraries, not app) there is one more configuration, called lintClassPath. This configuration is missing in buildDebug.
  4. Another point to mention is that when I searched in the tasks list, it seemed like buildDebug didn't call assembleDebug task and assembleDebug didn't call buildDebug tasks.
  5. And the last interesting thing to mention in this context is that when I ran build from the Android Studio (Build -> Make Project), I see in my scan that the command that actually ran was the assembleDebug. More specifically, it ran :app:assembleDebug.

As you can see, I don't really understand the differences myself, but this is what I found out. If someone can explain it to me and the other users reading here, it could be awesome :) Thanks!

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!