Android Studio Gradle Build Hızlandırıldı


163

Son güncellemeden bu yana (25 Haziran'dan itibaren oluştur) Android stüdyosu Gradle'daki herhangi bir değişiklik acı verici bir şekilde yavaş. Ayrıca, dosyayı düzenlediğinizde ve keyup üzerinde yeniden derlediğinizde değişiklikleri otomatik olarak izliyor gibi görünüyor.

Her değişiklik i5 cihazımda birkaç dakika sürer.

Gradle değişikliklerimi nasıl hızlandırabileceğim hakkında bir fikrin var mı?



1
Cevabı ve soruyu okumak için zaman ayıranlar için, @Dave Jarvis'in önerdiği gibi, bu yinelenen bir soru değildir. Ancak AS'nin eski bir beta sürümü ile son derece ilgilidir ve muhtemelen mevcut sürümlerde çok az veya hiç etkisi yoktur.
Einar Sundgren


Yanıtlar:


41

Geliştiriciler üzerinde çalışıyor. Bu cevapta yayınladığım gibi, şu anda en hızlı çözüm komut satırından kepçe kullanmaktır ve geliştirmediğiniz tüm modüller için ikili kütüphanelere geçmelisiniz. G + ' da geliştiricilerle ilgili bir tartışma var.


Açıkçası araç tartışma grubuna daha önce katılmalıydım .
Einar Sundgren

99

Kesinlikle bir fark yaratır: Nasıl Yapılır? Gradle oluşturma süresini hızlandırın

Sadece gradle.propertiesaşağıdaki dizinde bir dosya oluşturun :

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

Bu satırı dosyaya ekleyin:

org.gradle.daemon=true

2
İyi cevap. Daha ayrıntılı ve ayrıntılı okuma için bu SO cevabını kontrol edin .
Sufyan

12
Bağlantınızdan: "Not: Bu yalnızca konsol yapılarını etkiler. Android Studio her zaman bir Gradle arka plan programı kullanır (ve ayarlarınıza bağlı olarak diğer bazı optimizasyonlar)."
ChiefTwoPencils

2
Ben .gradle ile dizin gradle.properties dosyası. Ama yine de çok zaman ayırın. Herhangi bir öneri
CoDe

4
Fark etmez
Vlado Pandžić

Değişiklik yaptıktan sonra Android Studio'yu yeniden başlatın.
Iman Marashi

78

Bu ayarları değiştirdikten sonra derleme sürem 10 dakika 10 saniyeye düşürüldü.

Aşama 1:

Ayarlar (ctrl + Alt + S) ->

Oluşturma, Yürütme, Dağıtım ->

Derleyici ->

--offlinekomut satırı Seçenekler kutusuna " " yazın.

Adım 2:

“Bağımsız modülleri paralel olarak derleyin” onay kutusunu işaretleyin.

& Uygula -> Tamam'ı tıklayın

resim açıklamasını buraya girin

Adım 3: gradle.properties dosyanızda -> Aşağıdaki satırları ekleyin

org.gradle.jvmargs=-Xmx2048M -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
org.gradle.parallel=true
org.gradle.configureondemand=true
org.gradle.daemon=true

Güncelleme:

Android studio 2.0 veya daha yenisini kullanıyorsanız Instant Run'ı deneyin

Ayarlar → Derleme, Yürütme, Dağıtım → Anında Çalıştırma → Anında Çalıştırmayı Etkinleştir.

Instant Run hakkında daha fazla bilgi - https://developer.android.com/studio/run/index.html#instant-run


6
Ben bunu denedim ve gerçekten benim inşa önemli ölçüde hızlandırır. Bu seçeneğin şimdi çevrimdışı oluşturmasına neden olacağını biliyorum, bu çevrimdışı oluşturmanın herhangi bir dezavantajı var mı?
Simon

5
@Simon - Dezavantajı, build.gradle dosyanızda belirtilen bağımlılıkların en son sürümlerini geri çekemeyeceğinizdir. İçe aktarılan kitaplıkların önbelleğe alınmış bir anlık görüntüsünü kullandığından daha hızlı çalışır. Bazı geliştiriciler için, kararlılık çok önemlidir, ancak çok uzun süre çevrimdışı olmak, nihayet çevrimiçi olduklarında onları devre dışı bırakabilir ve bu bağımlılıklar gelişti ve böylece söz konusu projeyi geride bıraktı.
Mark Lapasa

1
Teşekkürler kardeşim bu benim için iyi çalıştı ve benim gradle inşa hızı arttı
Android_programmer_office

@Simon, geliştirmeye başladığınızda, yukarıdaki ayarları kolayca ayarlayabilir, ardından bir kez durun, tıpkı gece bittikten sonra bunları kapatarak her şeyi senkronize etmek için uygulamayı son bir kez çalıştırabilirsiniz. Yoksa bununla ilgili bir sorun olur mu?
Sauron

1
33 saniyeden 5 saniyeye düştü :))
Miron

62

Android stüdyosunda gradle.properties dosyasına aşağıdaki ekleyerek eski core2duo dizüstü bilgisayarımda (linux nane çalıştırıyor) 43 saniyeden 25 saniyeye kadar gradle derlememi azaltabildim

org.gradle.parallel=true
org.gradle.daemon=true

daemon ayarının neden daha hızlı oluşturulduğuna dair bir kaynak: https://www.timroes.de/2013/09/12/speed-up-gradle/


3
Bağlantınızdan: "Not: Bu yalnızca konsol yapılarını etkiler. Android Studio her zaman bir Gradle arka plan programı kullanır (ve ayarlarınıza bağlı olarak diğer bazı optimizasyonlar)."
ChiefTwoPencils

2
Paralel seçenek AS'de bile yapımı geliştirdi. Teşekkür ederim :)
jonathanrz

3
Paralel seçenek yapımı geliştirmedi.
Vlado Pandžić

Teşekkürler. Bu çözüm, yapım süremi 7 dakikadan 23 saniyeye
çıkardı

teşekkürler 3 saniyede iki dakika yapımın üzerinde yapılan
Pouya Samie

12

Adımları takip etmek 10 kat daha hızlı olacak ve inşa süresini% 90 azaltacaktır

Önce aşağıdaki dizinde gradle.properties adlı bir dosya oluşturun:

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

Bu satırı dosyaya ekleyin:

org.gradle.daemon=true
org.gradle.parallel=true

Android Studio'da bu seçenekleri işaretleyin

resim açıklamasını buraya girin

resim açıklamasını buraya girin


7

Gradle'ın daha yeni bir sürümü var (sürüm 2.4).

Bunu Dosya menüsünden 'Proje Yapısı' iletişim kutusunu açarak projeleriniz için ayarlayabilirsiniz,

Project Structure -> Project -> Gradle version

ve '2.4' olarak ayarlayın.
Performansı artırma hakkında daha fazla bilgiyi bu bağlantıda bulabilirsiniz .


2
Teşekkürler, Gradle sürüm 2.4 neredeyse ~ 14s kurtardı.
Miao1007

5
Bu, yapım
süremi uzattı


6

Ben de bunu yaptım ve kepçe üretim hızım önemli ölçüde arttı! İlk derleme için 1 dakikadan 20 saniyeye kadar ve sonraki derlemeler 40 saniye ile 5 saniye arasında oldu.

Gradle.properties dosyasında Bunu ekleyin:

org.gradle.jvmargs=-Xmx8192M -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

Gelen , komut satırı bağımsız Dosya> Diğer Ayarlar> Varsayılan Ayarları> Build'a, Yürütme dağıtma> complier git aracılığı ile, komut satırı bağımsız aşağıdaki argümanları ekleyin

Bunu ekle:

--debug --stacktrace -a, --no-rebuild -q, --quiet --offline

Buradaki resme bakın


6

Android geliştirme yaparken yalnızca 8 GB RAM'e sahip bir Mac / PC kullanmaktan kaçının. 1 öykünücüyü bile (Genymotion veya başka bir şekilde) başlattığınızda, derleme süreleriyle Android Studio'da derleme süreleriniz son derece yavaşlar. Bu, 1 kaynak dosyada tek satırlık basit bir değişiklik yapsanız bile olur.

Emülatörü kapatmak ve gerçek bir cihaz kullanmak çok yardımcı olur, ancak elbette bu çok sınırlayıcı ve daha az esnektir. Emülatörün RAM kullanım ayarını azaltmak yardımcı olabilir, ancak en iyi yol dizüstü bilgisayarınızın en az 12-16 GB RAM'e sahip olmasını sağlamaktır.

Güncelleme (Haziran 2017): Artık Android Studio gradle yapılarını nasıl hızlandıracağınızı açıklayan birkaç iyi medium.com makalesi var ve 8 GB'lık makinelerde bile çalışıyor:

Özetlenen fikir birliği:

Bir gradle.properties dosyası oluşturun ( ~/.gradle/gradle.propertiesprojede global veya projede yerel) ve aşağıdaki satırları ekleyin:

org.gradle.daemon=true
org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
org.gradle.parallel=true
org.gradle.configureondemand=true

4
  1. Çevrimdışı Çalışmayı Etkinleştir

  2. Aşağıdaki kodu ekleyerek Gradle Performansını artırın gradle.properties

org.gradle.daemon = true
org.gradle.parallel = true

Adım adım kılavuz: http://www.viralandroid.com/2015/08/how-to-make-android-studio-fast.html


Bu cevapları çeşitli tutalım ve OP sorununun ayrıntılarına odaklanalım. re: stackoverflow.com/a/34828203 ... stackoverflow.com/a/34827929 ... stackoverflow.com/a/34827858 ... stackoverflow.com/a/34827827 ... stackoverflow.com/a/34827788
Drew


3

Wikimedia Apps Android Ekibinin bu sayfasına göre Gradle yapılarını optimize etmenin iyi bir yolu bu satırları ~ / .gradle / gradle.properties klasörüne eklemektir.

org.gradle.daemon=true                                                          
org.gradle.parallel=true
org.gradle.configureondemand=true
org.gradle.jvmargs=-Xmx2048M

Dosyaya sahip olmayanlar için iki yol vardır:

  1. Proje kökünde gradle.properties adlı bir dosya oluşturarak dosyayı projenize yerel olarak ekleyin veya,

  2. Ana dizinde aynı dosyayı oluşturarak bunları tüm projeleriniz için global olarak ayarlayabilirsiniz ( Windows'ta % UserProfile% .gradle, Linux ve Mac OS X'te ~ / .gradle )

    Özellikleri proje düzeyinde değil, ana dizininizde ayarlamak iyi bir uygulamadır .


2

Daha iyi performans için komut satırını da kullanabilirsiniz ./gradlew komutunu kullanabilirsiniz. <task name> gradlew gibi linux veya kullanım gradlew.bat dosyasından projenizin kök klasörünün içindeki dan <task name>önce bir verilen Gradle için yukarıdaki komutlardan birini çalıştırın .her sürümü, ilgili Gradle dağıtımını indirecek ve derlemeyi yürütmek için kullanacaktır.

Bir Gradle projesini ambalajı üzerinden alırken, IDE'niz Gradle 'all' dağıtımını kullanmayı isteyebilir. Bu gayet iyi ve IDE'nin yapı dosyaları için kod tamamlama sağlamasına yardımcı oluyor. Bu sadece Gradle'ı kendiniz manuel olarak yüklemeniz gerekmediği anlamına gelmez, aynı zamanda yapının tasarlandığı Gradle sürümünü de kullandığınızdan emin olabilirsiniz. Bu, tarihi yapılarınızı daha güvenilir hale getirir. Daha fazla bilgi için bakınız Wrapper ile yapı yürütme


2

Daha hızlı sürümler için Gradle arka plan programı için maksimum yığın boyutunu 2048 MB'den fazla artırın .

Bunu
org.gradle.jvmargs=-Xmx2048M
proje gradle.properties içinde yapmak için .


1

build.gradleDosya ekle :

android {
...
dexOptions {
        javaMaxHeapSize "4g" //specify the heap size for the dex process
    }
...
}

Umut ediyorum bu yardım eder.


1

Windows 10 ve 1 TB Katı Hal ile 5. nesil i7 çalıştırıyorum. Android Studio Projects klasörünü sıkıştırdım ve yaklaşık% 80 artış sağladım. Bu yardımcı olur umarım.

Daha sonra yukarıdaki çözümlerle birleştirdim (org.gradle.parallel = true, org.gradle.daemon = true). Performans artışı oldukça etkileyiciydi.

Bunlara ek olarak:

Yukarıdaki tüm cevaplar tamamen doğru ama ben bir deneyim Android geliştirici olarak belirtmek gerekir (4 buçuk yıl): Hiçbir Android / Gradle geliştirici bir spinner sürücü ile bir makinede çalışıyor olmalıdır, bir çatal için gerekir Katı hal. Hepimiz IDE'de günde 100 kez oynat düğmesine basıyoruz. Bir iplikçiden SSD'ye (Gradle sonrası) gittiğimde, hızım ve verimliliğim tam anlamıyla 2-4 kat daha hızlıydı ve size söz veriyorum burada abartmıyorum.

Şimdi küçük bir SSD ve büyük bir döndürücüye sahip bir makineden bahsetmiyorum, 1 büyük SSD'den bahsediyorum. Zaten küçük bir SSD ve büyük bir döndürücüye sahip bir makineniz varsa, küçük döndürücüyü 500 GB'lık bir SSD söylemek için yükseltebilir ve SSD'yi, üzerinde yüklü geliştirici araçlarınızla ana işletim sistemi sürücünüz olarak ayarlayabilirsiniz.

Hızlı tempolu bir ortamda çalışıyorsanız, lütfen bu gönderiyi patronunuza gösterin. İyi bir 1 TB SSD, sizi yaklaşık 300 £ (KDV dahil) veya 500 GB SSD için yaklaşık 160 £ geri getirecektir. Küçük veya üst düzey bir Android geliştiricisi olmanıza bağlı olarak, sürücü 1-2 iş haftasında veya daha küçük bir yatırım yaparsanız yaklaşık 2 buçuk ila 5 iş günü içinde (ücret giderlerinde) kendisi için ödeme yapar; 500 GB SSD deyin.

Birçok geliştirici bunun böyle olmadığını iddia edebilir, ancak Gradle sistemi doğrudan disk erişiminde çok zor olduğu için Gradle için durum böyle. .NET / C # / VB Net veya diğer geliştirme araçlarıyla çalışıyorsanız, çok fazla fark görmeyeceksiniz, ancak Gradle'daki fark BÜYÜK. Bu yazı üzerinde hareket edersen sana söz veriyorum, hayal kırıklığına uğramayacaksın. Şahsen, orijinal olarak 1 TB Spinner ile gelen 8GB RAM ile beşinci nesil i7 kullanıyorum ve Samsung SSD 840 EVO 1 TB'ye yükselttim ve o zamandan beri hiç geriye bakmadım. Benimkini https://www.aria.co.uk adresinden satın aldım .

Bu yardımcı olur umarım. Ayrıca, bunun ticari olarak motive edilmiş bir yazı olmadığını belirtmeliyim, daha önce birçok kez kullandığım ve her zaman güvenilir oldukları için sadece Aria'yı tavsiye ediyorum.


1

gradle.properties dosyasına ekleyebileceğimiz birkaç komut:

org.gradle.configureondemand = true - Bu komut, gradle'a yalnızca gerçekten inşa etmesi gereken projeleri inşa etmesini söyleyecektir. Daemon kullanın - org.gradle.daemon = true - Daemon, derleme örneğini derlemeniz bittikten sonra bile arka planda çalışır durumda tutar. Bu, sınıfın başlatılması için gereken süreyi kaldıracak ve yapım zamanlamanızı önemli ölçüde azaltacaktır.

org.gradle.parallel = true - Gradle'ın projenizi paralel olarak inşa etmesine izin ver. Projenizde birden fazla modül varsa, bunu etkinleştirerek, gradle bağımsız modüller için oluşturma işlemlerini paralel olarak çalıştırabilir.

Öbek Boyutunu Artırın - org.gradle.jvmargs = -Xmx3072m -XX: MaxPermSize = 512m -XX: + HeapDumpOnOutOfMemoryError -Dfile.encoding = UTF-8 - Android studio 2.0'dan bu yana, sürüm için derleme zamanlamalarını azaltmak için dex kullanıyor projesi. Genellikle, uygulamalar oluşturulurken birden çok dx işlemi farklı VM örneklerinde çalışır. Ancak Android Studio 2.0'dan başlayarak, tüm bu dx işlemleri tek bir VM'de çalışır ve VM de sınıfla paylaşılır. Bu, tüm dex işlemi aynı VM örneklerinde çalıştığından oluşturma süresini önemli ölçüde azaltır. Ancak bu, tüm dex süreçlerini ve sınıfını alabilmek için daha büyük bellek gerektirir. Bu, gradle arka plan programının gerektirdiği yığın boyutunu artırmanız gerektiği anlamına gelir. Varsayılan olarak, arka plan programının yığın boyutu yaklaşık 1 GB'dir.

Dinamik bağımlılığın kullanılmadığından emin olun. yani 'com.android.support:appcompat-v7:27.0.+' uygulamasını kullanmayın. Bu komut, sürümün çevrimiçi olacağı ve uygulamayı her oluşturduğunda en son sürümü kontrol edeceği anlamına gelir. Bunun yerine "com.android.support:appcompat-v7:27.0.2" gibi sabit sürümleri kullanın


1

Bunu gradle.propertiesdosyanıza ekleyin

org.gradle.daemon=true                                                          
org.gradle.parallel=true
org.gradle.configureondemand=true
org.gradle.jvmargs=-Xmx2048M

1

Android klasöründen gradle.properties açın ve vurgulanan satırları uncomment ve makine yapılandırmanıza göre bellek değerleri sağlayın. Makinemde 8GB RAM var, bu yüzden sırasıyla maksimum 4096mb ve 1024mb verdim.

# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
# Default value: -Xmx10248m -XX:MaxPermSize=256m
//Uncomment below line for providing your system specific configuration
#org.gradle.jvmargs=-Xmx4096m -XX:MaxPermSize=1024m -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
 //Uncomment below line to allow parallel process execution.
 #org.gradle.parallel=true

Bundan sonra yapım sürem yarıya indirildi. Mutlu bina !!


0

Genellikle projenizde multidex'i etkinleştirdiğinizde olur. Bu, potansiyel olarak geliştirme sürecinizi yavaşlatabilir !! Doc göre :

multidex yapılandırması, derleme sisteminin birincil DEX dosyasına hangi sınıfların dahil edilmesi gerektiği ve hangi sınıfların ikincil DEX dosyalarına dahil edileceği konusunda karmaşık kararlar alması gerektiğinden, önemli ölçüde artırılmış derleme işlem süresi gerektirir. Bu, multidex kullanan artımlı yapıların genellikle daha uzun sürdüğü ve geliştirme sürecinizi potansiyel olarak yavaşlatabileceği anlamına gelir.

ancak bunu optimize edebilirsiniz:

Daha uzun artımlı derleme sürelerini azaltmak için derlemeler arasında multidex çıktısını yeniden kullanmak için pre-dexing kullanmalısınız.

Android Studio 2.3 ve üzerini kullanıyorsanız, IDE, uygulamanızı Android 5.0 (API düzey 21) veya üstü çalıştıran bir cihaza dağıtırken bu özelliği otomatik olarak kullanır.

Bu yüzden minSdkVersion'ı 21 veya daha yüksek bir değere ayarlamanız gerekir !

Ancak üretim sürümünüz minSdkVersion'u 21'den düşük, örneğin 19'u desteklemeniz gerekiyorsa

devS sürümü için minSdkVersion 21'i ayarlamak için productFlavors'u kullanabilirsiniz :

    android {
    defaultConfig {
        ...
        multiDexEnabled true
        // The default minimum API level you want to support.
        minSdkVersion 15
    }
    productFlavors {
        // Includes settings you want to keep only while developing your app.
        dev{
            //the IDE automatically uses  pre-dexing feature to mitigate longer incremental when deploying your app to a device running Android 5.0 !
            minSdkVersion 21
        }
        prod {

        }
    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'),
                                                 'proguard-rules.pro'
        }
    }
}
dependencies {
    compile 'com.android.support:multidex:1.0.3'
}

0

Daha iyi inşa süreleri için komut satırından bina yapmayı tercih ederim. Uygulama kodu tabanınız büyükse ve birden fazla modülünüz varsa, burada açıklandığı gibi Yerel AAR yaklaşımını deneyebilirsiniz , bu size Android Studio performansı ve sınıf oluşturma sürelerinde büyük bir artış sağlayacaktır. Komut satırı ile de uyumludur

https://blog.gojekengineering.com/how-we-improved-performance-and-build-times-in-android-studio-306028166b79

Entegrasyon talimatları içeren demo projesi burada bulunabilir: https://github.com/akhgupta/AndroidLocalMavenRepoAARDemo

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.