В Android Studio 2.3.3 нет разницы между Clean и Rebuild, так почему у обоих вариантов есть меню Build?
Почему в AS 2.3.3 идентичны Clean
и Rebuild
и почему тогда оба параметра найдены в меню Build
?
Как объяснено здесь, в AS 2.3.3 нет разницы между Build
> Clean
и Build
> Rebuild
. Просто проверка Event Log
проверяет это.
Итак, почему бы не изменить меню AS 2.3.3 Build
, чтобы иметь опцию ONE, например, Clean and Rebuild
. Интересная историческая заметка о том, что Clean
использовала что-то отличное от Rebuild
, так что это могло бы оправдать наличие обоих в меню, но это запутывает.
Обратите внимание, что (предположительно) в Visual Studio параметры Clean
и Rebuild
выполняют разные вещи, без сомнения, так же, как в версии 1.0.
P.S. this и this указывают, что Gradle 4.1 не всегда интерпретирует команды в "ожидаемом" порядке. Объясняет ли это, почему Clean
и Rebuild
должны быть одинаковыми?
Ответы
Ответ 1
Я использую clean для обновления значений R, пока я нахожусь в середине кодирования. Я не хочу знать, что в моем незавершенном коде есть ошибки, я просто хочу, чтобы ссылки на R файлы были текущими.
С другой стороны, Rebuild перечисляет все ошибки.
Таким образом, за кулисами они могут быть одинаковыми, но результаты представлены пользователю по-разному.
Ответ 2
@Sam правильно. Глядя ТОЛЬКО на Event log
, довольно поверхностно, так как
только регистрирует события, а не детали. Взгляд на Gradle console
проясняет все:
Здесь Clean
, даже с ошибкой в коде, который я компилирую:
Executing tasks:
[clean, :app:generateDebugSources, :app:mockableAndroidJar,
:app:prepareDebugUnitTestDependencies,
:app:generateDebugAndroidTestSources,
:app:compileDebugSources, :app:compileDebugUnitTestSources,
:app:compileDebugAndroidTestSources]
Configuration on demand is an incubating feature.
Incremental java compilation is an incubating feature.
:clean
:app:clean
:app: preBuild UP-TO-DATE
(MY NOTE ^^^^^^^^
:app:preDebugBuild UP-TO-DATE
:app:checkDebugManifest
:app:preReleaseBuild UP-TO-DATE
:app:prepareComAndroidSupportAnimatedVectorDrawable2600Alpha1Library
:app:prepareComAndroidSupportAppcompatV72600Alpha1Library
:app:prepareComAndroidSupportConstraintConstraintLayout102Library
:app:prepareComAndroidSupportSupportCompat2600Alpha1Library
:app:prepareComAndroidSupportSupportCoreUi2600Alpha1Library
:app:prepareComAndroidSupportSupportCoreUtils2600Alpha1Library
:app:prepareComAndroidSupportSupportFragment2600Alpha1Library
:app:prepareComAndroidSupportSupportMediaCompat2600Alpha1Library
:app:prepareComAndroidSupportSupportV42600Alpha1Library
:app:prepareComAndroidSupportSupportVectorDrawable2600Alpha1Library
:app:prepareDebugDependencies
:app:compileDebugAidl
:app:compileDebugRenderscript
:app:generateDebugBuildConfig
:app:generateDebugResValues
:app:generateDebugResources
:app:mergeDebugResources
:app:processDebugManifest
:app:processDebugResources
:app:generateDebugSources
:app:mockableAndroidJar
:app:preDebugUnitTestBuild UP-TO-DATE
:app:prepareDebugUnitTestDependencies
:app:preDebugAndroidTestBuild UP-TO-DATE
:app:prepareComAndroidSupportTestEspressoEspressoCore222Library
:app:prepareComAndroidSupportTestEspressoEspressoIdlingResource222Library
:app:prepareComAndroidSupportTestExposedInstrumentationApiPublish05Library
:app:prepareComAndroidSupportTestRules05Library
:app:prepareComAndroidSupportTestRunner05Library
:app:prepareDebugAndroidTestDependencies
:app:compileDebugAndroidTestAidl
:app:processDebugAndroidTestManifest
:app:compileDebugAndroidTestRenderscript
:app:generateDebugAndroidTestBuildConfig
:app:generateDebugAndroidTestResValues
:app:generateDebugAndroidTestResources
:app:mergeDebugAndroidTestResources
:app:processDebugAndroidTestResources
:app:generateDebugAndroidTestSources
Rebuild
делает все, что ПЛЮС СЛЕДУЕТ, ЕСЛИ там ошибка в коде:
:app:incrementalDebugJavaCompilationSafeguard
:app:javaPreCompileDebug
:app:compileDebugJavaWithJavac
:app:compileDebugJavaWithJavac - is not incremental (e.g. outputs have changed, no previous execution, etc.).
C:\Users\Dov\Desktop\SQhell\app\src\main\java\com\dslomer64\sqhell\MainActivity.java:221: error: not a statement
x return true;
^
C:\Users\Dov\Desktop\SQhell\app\src\main\java\com\dslomer64\sqhell\MainActivity.java:221: error: ';' expected
x return true;
^
2 errors
:app:compileDebugJavaWithJavac FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:compileDebugJavaWithJavac'.
> Compilation failed; see the compiler error output for details.
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
BUILD FAILED
Total time: 16.398 secs
Если в коде нет ошибки, Rebuild
делает следующее:
:app:compileDebugNdk UP-TO-DATE
:app:compileDebugSources
:app:incrementalDebugUnitTestJavaCompilationSafeguard UP-TO-DATE
:app:javaPreCompileDebugUnitTest
:app:compileDebugUnitTestJavaWithJavac UP-TO-DATE
:app:processDebugJavaRes UP-TO-DATE
:app:processDebugUnitTestJavaRes UP-TO-DATE
:app:compileDebugUnitTestSources UP-TO-DATE
:app:incrementalDebugAndroidTestJavaCompilationSafeguard
:app:javaPreCompileDebugAndroidTest
:app:compileDebugAndroidTestJavaWithJavac
:app:compileDebugAndroidTestNdk UP-TO-DATE
:app:compileDebugAndroidTestSources
BUILD SUCCESSFUL
Total time: 26.83 secs
В любом случае Build
выполняет Clean
И затем формирует код, завершая, если обнаружены ошибки (и перечислены); в противном случае выполнение полной компиляции.
Итак Clean
ОТЛИЧАЮТСЯ от Rebuild
.
(Это означает, что некоторые другие сообщения, например, перечисленные в вопросе, должны быть изменены.)