Якщо я не помиляюся gradle assemble
, працює gradle assembleDebug
і gradle assembleRelease
, але я вважаю, що gradle build
робить те саме, то чим вони між собою відрізняються?
Якщо я не помиляюся gradle assemble
, працює gradle assembleDebug
і gradle assembleRelease
, але я вважаю, що gradle build
робить те саме, то чим вони між собою відрізняються?
Відповіді:
Assemble створить ваші артефакти, а build - збере ваші артефакти за допомогою додаткових перевірок.
build
залежить від assemble
, тому build
є свого роду надмножиноюassemble
Ви можете поглянути на завдання, які будуть виконані за допомогою --dry-run
прапора. напр
gradlew build --dry-run
Ви побачите, що крім assemble
також lint
і test
буде виконано.
lint
andtest
Від gradle tasks --all
:
Build tasks
-----------
assemble - Assembles the outputs of this project.
build - Assembles and tests this project.
build
є ефективно assemble
+ check
(і check
є test
+ будь-якими завданнями зв’язування).
Це правда, що, згідно з gradle tasks
ним, виглядає як build
надмножина assemble
, включаючи тести. Але (!) З мого короткого досвіду справді здається, що це не так.
Тож я запустив ці 2 команди в командному рядку, використовуючи оболонку gradle з прапором --scan після кожного запуску чистої роботи. Ось порівняння:
assembleDebug
я отримав усі вбудовані файли, які хотів - *.apk
і *.aar
файли.buildDebug
я не мав жодного з цих файлів.assembleDebug
- 109 завданьbuildDebug
- 91 завданняassembleDebug
- 172 з 20 конфігураційbuildDebug
- 104 з 18 конфігураційassembleDebug
2 з 3 моїх підпроектів (які є бібліотеками Java, а не додатком) є ще одна конфігурація, яка називається lintClassPath
. Ця конфігурація відсутня в buildDebug
.buildDebug
що не викликав assembleDebug
завдання і assembleDebug
не викликав buildDebug
завдання.Build -> Make Project
), я бачу під час сканування, що команда, яка насправді виконувалася, була assembleDebug
. Точніше, він пробіг :app:assembleDebug
.Як бачите, я сам насправді не розумію відмінностей, але це я дізнався. Якщо хтось може пояснити це мені та іншим користувачам, які читають тут, це може бути чудово :) Дякую!
Існує суперечлива інформація про те, чи build
має це залежати assemble
.
З одного боку, Розуміння Gradle: Життєвий цикл збірки показує графік залежностей завдань, звідки build
і assemble
є незалежними:
На відміну від цього, посібник користувача Gradle для плагіна Java показує, що build
залежить assemble
, принаймні, для проектів Java:
Це суперечить графіку "Розуміння Gradle". То, можливо, плагін Android реалізує завдання збірки / збірки не так, як плагін Java? Або ця поведінка змінилася в якійсь версії Gradle.
Assemble створить ваші артефакти, а build - збере ваші артефакти за допомогою додаткових перевірок.
Які додаткові перевірки? Я запускаю завдання, щоб вам не потрібно було:
:app:lint SKIPPED
:app:bundleDebugClasses SKIPPED
:app:kaptGenerateStubsDebugUnitTestKotlin SKIPPED
:app:kaptDebugUnitTestKotlin SKIPPED
:app:compileDebugUnitTestKotlin SKIPPED
:app:preDebugUnitTestBuild SKIPPED
:app:javaPreCompileDebugUnitTest SKIPPED
:app:compileDebugUnitTestJavaWithJavac SKIPPED
:app:processDebugUnitTestJavaRes SKIPPED
:app:testDebugUnitTest SKIPPED
:app:bundleReleaseClasses SKIPPED
:app:kaptGenerateStubsReleaseUnitTestKotlin SKIPPED
:app:kaptReleaseUnitTestKotlin SKIPPED
:app:compileReleaseUnitTestKotlin SKIPPED
:app:preReleaseUnitTestBuild SKIPPED
:app:javaPreCompileReleaseUnitTest SKIPPED
:app:compileReleaseUnitTestJavaWithJavac SKIPPED
:app:processReleaseUnitTestJavaRes SKIPPED
:app:testReleaseUnitTest SKIPPED
:app:test SKIPPED
:app:check SKIPPED
:app:build SKIPPED
Як бачите, build
виконує більше завдань, ніж assemble
. Мовляв lint
, test
і check
завдання.
Повні завдання можна переглянути тут
. Оригінальний текст є build
завданням, тоді як змінений текст єassemble
завдання.
Використовуваний проект: Android Sunflower GitHub
buildRelease
я не отримую.apk
файли, а лише файли журналів. Тим НЕ менше, при роботіassembleRelease
, я робити отримати.apk
файли. Непарні