【问题标题】:There is no difference in Android Studio 2.3.3 between Clean and Rebuild, so why have both options in Build menu?在 Android Studio 2.3.3 中 Clean 和 Rebuild 之间没有区别,那么为什么 Build 菜单中有这两个选项呢?
【发布时间】:2017-11-08 01:54:48
【问题描述】:

为什么在 AS 2.3.3 中 CleanRebuild 相同,那么为什么在 Build 菜单中可以找到这两个选项?

正如 here 所解释的,在 AS 2.3.3 中,Build > CleanBuild > Rebuild 之间没有区别。只需检查Event Log 即可验证这一点。

那么为什么不修改 AS 2.3.3 Build 菜单以具有一个选项,例如 Clean and Rebuild。这是一个有趣的历史记录,Clean 曾经做过与Rebuild 不同的事情,因此这可能证明两者都在菜单中是合理的,但它令人困惑。

请注意,Visual Studio 中的 (supposedly),CleanRebuild 选项做不同的事情,无疑与 1.0 中的 AS 非常相似。


附: thisthis 指出 Gradle 4.1 并不总是按“预期”顺序解释命令。这是否解释了为什么CleanRebuild 必须 相同?

【问题讨论】:

    标签: android android-studio build android-gradle-plugin


    【解决方案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

      (这意味着必须修改一些其他帖子,例如问题中列出的帖子。)

      【讨论】:

        猜你喜欢
        • 2011-08-19
        • 1970-01-01
        • 2010-11-17
        • 2014-07-27
        • 2014-03-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多