android - 通過Gradle和Android Studio構建和運行應用程序比通過Eclipse慢




14 Answers

硬件

我很抱歉,但是將開發站升級到固態硬盤和大量內存的影響可能比下面幾個點的影響更大。

工具版本

確保您使用最新的GradleAndroid Gradle插件 ,提高構建性能是開發團隊的主要優先事項。

配置文件

在適用的任何目錄中創建一個名為gradle.properties的文件:

  • /home/<username>/.gradle/
  • /Users/<username>/.gradle/
  • C:\Users\<username>\.gradle (Windows)

附加:

# IDE (e.g. Android Studio) users:
# Settings specified in this file will override any Gradle settings
# configured through the IDE.

# For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html

# The Gradle daemon aims to improve the startup and execution time of Gradle.
# When set to true the Gradle daemon is to run the build.
# TODO: disable daemon on CI, since builds should be clean and reliable on servers
org.gradle.daemon=true

# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
# https://medium.com/google-developers/faster-android-studio-builds-with-dex-in-process-5988ed8aa37e#.krd1mm27v
org.gradle.jvmargs=-Xmx5120m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
org.gradle.parallel=true

# Enables new incubating mode that makes Gradle selective when configuring projects. 
# Only relevant projects are configured which results in faster builds for large multi-projects.
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:configuration_on_demand
org.gradle.configureondemand=true

# Set to true or false to enable or disable the build cache. 
# If this parameter is not set, the build cache is disabled by default.
# http://tools.android.com/tech-docs/build-cache
android.enableBuildCache=true

如果將它們放置在projectRoot\gradle.properties並且將它們放在user_home\.gradle\gradle.properties ,則它們是user_home\.gradle\gradle.properties 。 如果您從控制台或直接從主意運行gradle任務,則應用該屬性:

IDE設置

可以從IDE設置GUI調整Gradle-IntelliJ集成。 啟用“離線工作”(檢查下面的yava答案)將禁用每個“同步gradle文件”上的真實網絡請求。

本機多功能dex

apk構建的最慢步驟之一是將java字節碼轉換為單個dex文件。 啟用本地multidex(minSdk 21僅適用於調試版本)將有助於工具減少工作量(請查看下面的Aksel Willgert的答案)。

依賴

比庫子項目更喜歡@aar依賴關係。

mavenCentraljCenter上搜索aar包,或者使用jitpack.io從github構建任何庫。 如果您不編輯依賴庫的源代碼,則不應每次使用項目源編譯它。

殺毒軟件

考慮從防病毒掃描中排除項目和緩存文件。 這顯然是安全的權衡(不要在家裡試試!)。 但是,如果您在許多分支之間切換,那麼防病毒軟件會在允許gradle進程使用它之前重新掃描文件,這會減慢構建時間(特別是AndroidStudio與Gradle文件和索引任務同步項目)。 測量構建時間並在啟用和未啟用防病毒功能的情況下處理CPU,以查看它是否相關。

分析構建

Gradle內置了對分析項目的支持。 不同的項目正在使用插件和自定義腳本的不同組合。 使用--profile將有助於找到瓶頸。

我有一個多項目(〜10個模塊),其中每次大約需要20-30秒。 當我按下Android Studio中的Run時,我必須等待每一次重建應用程序,這是非常緩慢的。

是否有可能在Android Studio中自動完成構建過程? 或者你有關於如何使這個過程更快的建議?

在Eclipse中,感謝自動構建,在模擬器上運行相同的項目大約需要3-5秒。

這是我的build.gradle文件(app模塊):

buildscript {
    repositories {
        maven { url 'http://repo1.maven.org/maven2' }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.4'
    }
}
apply plugin: 'android'

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
    compile project(':libraries:SharedLibs')
    compile project(':libraries:actionbarsherlock')
    compile project(':libraries:FacebookSDK')
    compile project(':libraries:GooglePlayServices')
    compile project(':libraries:HorizontalGridView')
    compile project(':libraries:ImageViewTouch')
    compile project(':libraries:SlidingMenu')
}

android {
    compileSdkVersion 17
    buildToolsVersion "17.0.0"

    defaultConfig {
        minSdkVersion 8
        targetSdkVersion 16
    }
}






如果使用谷歌播放服務,根據您需要的庫而不是整個blob可以使事情變得更快。

如果您唯一需要的是地圖,請使用:

compile 'com.google.android.gms:play-services-maps:6.5.+'

代替:

compile 'com.google.android.gms:play-services:6.5.+'

後者將20k個方法(參見博客)帶入類路徑,這可能會使總方法數超過64k。

即使對於調試版本,也會強制使用proguard或multidex 。 對於我的一個項目,我有以下編譯時間

  • multidex構建(支持庫)〜40秒
  • proguard構建〜20秒
  • 當方法限制<64k〜5sec時建立

如果在sdk 21+上開發,可以按照android文檔中的說明優化multidex構建

android {
    productFlavors {
        // Define separate dev and prod product flavors.
        dev {
            // dev utilizes minSDKVersion = 21 to allow the Android gradle plugin
            // to pre-dex each module and produce an APK that can be tested on
            // Android Lollipop without time consuming dex merging processes.
            minSdkVersion 21
        }
        prod {
            // The actual minSdkVersion for the application.
            minSdkVersion 14
        }
    }
    ...
}



在Android Studio 3.0中加速Gradle構建

有沒有想過等待構建在Android Studio中完成幾分鐘? 我也是。 這是一個非常煩人的。 幸運的是,有幾種方法可以用來改善這一點。 Android使用Gradle進行構建。 最新版本是2.14.1,與以前的版本相比有巨大的性能提升(詳情請參閱發行說明)。

第1步:更新Gradle版本更簡單的方法是進入:打開模塊設置(您的項目)>項目結構

UPDATE

更改為Gradle版本:4.1和更改為Android插件版本:3.0.0

https://services.gradle.org/distributions/gradle-3.1-all.zip下載Gradle發行版分發版並將其複製到Gradle文件夾中:

最後一步是在Settings> Gradle中添加你的描述

不要忘記單擊應用保存更改。

第2步:為項目啟用離線模式,Gradle守護程序和並行構建離線模式告訴Gradle忽略更新到最新的檢查。 Gradle每次都要求提供依賴關係,並且使用此選項可以使用機器上已有的依賴關係。 從android studio設置轉到Gradle,然後單擊離線工作框。

  1. 從android studio設置轉到編譯器並在命令行框中添加“ - offline”,然後單擊並行編譯獨立模塊。

下一步是為您的項目啟用Gradle守護進程和並行構建。 並行構建將使您的項目具有多個模塊(Gradle中的多項目構建)並行構建,這將使大型或模塊化項目的構建速度更快。

這些設置可以通過在Gradle腳本目錄(即〜/ .gradle / gradle.properties)中修改名為gradle.properties的文件來啟用。這些選項中的一部分(例如並行Complie模塊)可從Android Studio獲得,也可以通過默認情況下,但將它們放入gradle.properties文件將在從終端進行構建時啟用它們,並確保您的同事使用相同的設置。 但是,如果你在一個團隊中工作,有時候你不能提交這些東西。

# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit org.gradle.parallel=true
# When set to true the Gradle daemon is used to run the build. For local developer builds this is our favorite property.
# The developer environment is optimized for speed and feedback so we nearly always run Gradle jobs with the daemon.
 org.gradle.daemon=true

使用守護進程將使您的構建更快啟動,因為它不必每次都啟動整個Gradle應用程序。 Gradle Daemon默認情況下未啟用,但建議始終為其開發人員的機器啟用它(但將其禁用於持續集成服務器)。 關於這種模式的常見問題可以在這裡找到https://docs.gradle.org/current/userguide/gradle_daemon.html 。 並行構建設置對於某些項目可能不安全。 要求是您的所有模塊必須解耦,否則您的構建可能會失敗(有關詳細信息,請參閱http://gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects )。

第3步:啟用增量式設計和調整內存設置您可以通過打開增量式設計來加速構建。 在您的模塊的構建文件中:

將此選項添加到您的android塊:

dexOptions {
    incremental true
}

在該dexOptions塊中,您還可以指定dex進程的堆大小,例如:

dexOptions {
    incremental true
    javaMaxHeapSize "12g"
}

其中“12g”是12GB的內存。 關於這方面的更多信息可以在這裡找到google.github.io/android-gradle-dsl/current/你也可以在設置文件中配置Gradle參數,例如,如果你有一個大項目,增加最大堆大小:

# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
# Default value: -Xmx10248m -XX:MaxPermSize=256m
org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

有關詳細信息,請參閱此處的所有參數列表: https://docs.gradle.org/current/userguide/userguide_single.html#sec:gradle_configuration_properties : https://docs.gradle.org/current/userguide/userguide_single.html#sec:gradle_configuration_properties : https://docs.gradle.org/current/userguide/userguide_single.html#sec:gradle_configuration_properties

步驟4:禁用防病毒考慮從防病毒掃描中排除項目和緩存文件。 這顯然與安全性有關。 但是,如果您在許多分支之間切換,那麼防病毒將在允許gradle進程使用它之前重新掃描文件,這會減慢構建時間(特別是Android Studio同步項目,包含gradle文件和索引任務)。 測量構建時間並在啟用和未啟用防病毒功能的情況下處理CPU,以查看它是否相關。 我希望這有幫助。 如果您有任何問題或其他提示改善構建性能的提示,請留下評論。

有用的鏈接




如果從命令行使用gradle,則可以使進程更快。 IDE開發人員需要做很多優化。 但它只是一個早期版本。

欲了解更多信息,請閱讀有關g +的一些開發者的討論。




Android Studio 2.3之後更新

所有的答案都很好,我鼓勵使用這些方法來提高構建速度。

在2016年9月發布Android 2.2之後,Android發布了實驗性構建緩存功能,以加速gradle構建性能,現在該功能已在Android Studio 2.3 Canary中正式發布。 (官方發布說明)

它引入了一個默認啟用的新構建緩存功能,可以通過存儲和重用在以前的相同或不同Android版本中創建的文件/目錄,加快構建時間(包括完整構建,增量構建和即時運行)項目。

如何使用:

在你的gradle.properties文件中添加以下行

android.enableBuildCache = true
# Set to true or false to enable or disable the build cache. If this parameter is not set, the build cache is enable by default.

清理緩存:

  • 有一個叫做cleanBuildCache的新Gradle任務cleanBuildCache讓您更輕鬆地清理構建緩存。 您可以在終端中輸入以下內容來使用它:

    ./gradlew cleanBuildCache

  • 或者您可以通過刪除所有存儲在位置的文件清理Android Studio 2.2的緩存

    C:\Users\<username>\.android\build-cache




解決了礦難

File -> Settings -> Build, Execution, Deployment -> Build Tools -> Gradle -> Offline work

Gradle版本從8分鐘變為3秒。




只是另一個表現imporvement提示:

Android Studio 3.0包含名為D8的新DEX編譯器。

“dex編譯器大多在日常應用程序開發的底層工作,但它直接影響您的應用程序的構建時間,.dex文件大小和運行時性能。”

“當將新的D8編譯器與當前的DX編譯器進行比較時,D8編譯速度更快,輸出更小的.dex文件,同時具有相同或更好的應用運行時性能。”

D8是可選的 - 使用它我們必須把項目的gradle.properties

android.enableD8=true

更多信息: https://android-developers.googleblog.com/2017/08/next-generation-dex-compiler-now-in.htmlhttps://android-developers.googleblog.com/2017/08/next-generation-dex-compiler-now-in.html

PS。 它讓我的編譯時間減少了大約30%。




您可以嘗試打開studio右側的gradle菜單,並僅組裝已更改的模塊,然後運行install命令。 當你按下run時,它會組裝所有的東西,不管你對它正在裝配的代碼做出什麼改變




在我們的具體情況中,問題是由於使用了retrolambda插件,即使沒有代碼在我們的核心模塊中被改變,每次我們嘗試啟動我們的應用程序時都會強制所有項目和子項目重新編譯。

去除retrolamba為我們固定它。 希望它能幫助別人。




嗨,我知道這是非常遲到的答案,但也許幫助某人
在我使用的情況下

compile 'com.android.support:support-v4:23.1.1'

在我的應用程序Gradle依賴
但是在我的一個圖書館裡

 compile 'com.android.support:support-v4:23.0.1'

更改完所有的最新版本後,我的問題解決了。




這個設置對我來說非常快(大約2秒)

的build.gradle

android {

    dexOptions {
        incremental true
        preDexLibraries = false
        jumboMode = false
        maxProcessCount 4
        javaMaxHeapSize "6g"
    }
}

gradle.properties

org.gradle.daemon=true
org.gradle.parallel=true
org.gradle.jvmargs=-Xmx8192M

我的電腦:

  • CPU Intel(R)Pentium(R)CPU G2030 @ 3.00GHz,3000 Mhz,2個procesadores principales,2個procesadoreslógicos
  • 64位
  • 微軟Windows 7專業版
  • (RAM)16.0 GB

項目文件
- 所有位於當地的高清




一個微不足道的變化(恢復xml)仍然需要10分鐘 。 正如@rivare在他的回答中所說的那樣,命令行構建速度更快(將其降低到15 )。
下面是一些步驟,至少可以從Windows的命令行快速構建一個簡單的構建。

  1. 轉到您的項目根目錄(gradlew.bat所在的位置):

    cd c:\ android \ MaskActivity

  2. 執行構建

    gradlew assembleDebug

  3. 直接從手機上卸載 apk(拖動它卸載)。

  4. 構建完成後,使用Windows任務管理器終止BIG java進程。

或者如果你的Windows機器上有unix工具:

ps

顯示“pid”:

kill -9 <pid>
  1. 現在安裝你的apk:

    adb -d安裝C:\ Android \ MaskActivity \ app \ build \ outputs \ apk \ app-debug.apk




在低配置機器上運行Android環境。

  1. 關閉瀏覽器中的常規web標籤
  2. 對於防病毒用戶,排除自動生成的生成文件夾
  3. Android Studio擁有1.2 Gb的默認堆可減少到512 MB幫助>編輯自定義VM選項studio.vmoptions -Xmx512m佈局性能將加快

  4. 對於Gradle,Android studio Mkae的核心組件之一肯定就像現在3.0beta是最新的一個

以下提示會影響代碼質量,請謹慎使用:

  1. Studio打開時包含電源安全模式,它將關閉皮棉,編碼補碼等後台操作。

  2. 您可以在需要時手動運行lintcheck ./gradlew lint

  3. 大多數使用Android模擬器的平均消耗2 GB RAM,所以如果可能的話使用實際的Android設備,這些將減少您的計算機上的資源負載。 或者,您可以減少模擬器的RAM,它會自動減少計算機上的虛擬內存消耗。 你可以在虛擬設備配置和高級設置中找到它。

  4. Gradle脫機模式是帶寬受限用戶禁用構建依賴項下載的功能。 它將減少後台操作,這將有助於提高Android studio的性能。

  5. Android studio提供了並行編譯多個模塊的優化。 在低RAM機器上,此功能可能會對性能產生負面影響。 您可以在編譯器設置對話框中禁用它。




Related

android gradle android-studio build.gradle