Studio Android Gradle membangun kecepatan

163

Sejak pembaruan terakhir (Build from Juni 25) setiap perubahan di Android studio Gradle sangat lambat. Dan sepertinya juga untuk melacak perubahan secara otomatis saat Anda mengedit file dan mengkompilasi ulang pada keyup.

Setiap perubahan memakan waktu beberapa menit pada i5 saya.

Adakah yang tahu bagaimana saya bisa mempercepat perubahan Gradle saya?

Einar Sundgren
sumber
1
Bagi mereka yang meluangkan waktu untuk membaca jawaban dan pertanyaan, ini bukan pertanyaan rangkap, seperti yang disarankan oleh @Dave Jarvis. Tetapi ini sangat terkait dengan versi beta AS yang lama dan mungkin tidak terlalu berpengaruh pada versi saat ini.
Einar Sundgren
Lihat stackoverflow.com/a/36826562/1770868
Ahmad Aghazadeh

Jawaban:

41

Dev sedang mengerjakannya. Seperti yang saya posting dalam jawaban ini solusi tercepat saat ini adalah dengan menggunakan gradle dari baris perintah dan Anda harus beralih ke lib biner untuk semua modul yang tidak Anda kembangkan. Di g + ada diskusi dengan pengembang tentang hal itu.

menyaingi
sumber
Saya seharusnya sudah bergabung dengan grup alat diskusi sebelumnya.
Einar Sundgren
99

Pasti membuat perbedaan: Bagaimana ... Mempercepat waktu build Gradle

Cukup buat file dengan nama gradle.propertiesdi direktori berikut:

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

Tambahkan baris ini ke file:

org.gradle.daemon=true
Francois
sumber
2
Jawaban yang bagus. Untuk bacaan lebih lanjut dan terperinci, periksa jawaban SO ini .
Sufian
12
Dari tautan Anda: "Catatan: Ini hanya memengaruhi build konsol. Android Studio selalu menggunakan daemon Gradle (dan tergantung pada pengaturan Anda, beberapa optimasi lainnya)."
ChiefTwoPencils
2
Saya memiliki .gradle direktori dengan gradle.properties berkas. Tapi masih butuh banyak waktu. Ada saran
CoDe
4
Tidak ada bedanya
Vlado Pandžić
Dan restart Android Studio setelah melakukan perubahan.
Iman Marashi
78

Setelah mengubah pengaturan ini, waktu kompilasi saya 10 menit berkurang menjadi 10 detik.

Langkah 1:

Pengaturan (ctrl + Alt + S) ->

Bangun, Eksekusi, Penempatan ->

Kompiler ->

ketik " --offline" di kotak Opsi baris perintah.

Langkah 2:

centang kotak "Kompilasi modul independen secara paralel".

& klik Terapkan -> OK

masukkan deskripsi gambar di sini

Langkah 3: Di file gradle.properties Anda -> Tambahkan baris berikut

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

Memperbarui:

Jika Anda menggunakan Android studio 2.0 atau lebih baru, cobalah Instant Run

Pengaturan → Build, Eksekusi, Penempatan → Instant Run → Enable Instant Run.

Info lebih lanjut tentang Instant Run - https://developer.android.com/studio/run/index.html#instant-run

Ranjith Kumar
sumber
6
Saya mencoba ini dan itu benar-benar mempercepat pembangunan saya secara substansial. Saya tahu bahwa opsi sekarang akan membuatnya offline, apakah ada kerugian untuk membangun offline ini?
Simon
5
@Simon - Kerugiannya adalah Anda tidak akan dapat menurunkan versi terbaru dari dependensi yang diidentifikasi dalam file build.gradle Anda. Ini berjalan lebih cepat karena menggunakan snapshot cache dari perpustakaan yang diimpor itu. Untuk beberapa pengembang, stabilitas sangat penting tetapi terlalu lama offline mungkin akan mengacaukan mereka ketika mereka akhirnya online dan ketergantungan itu telah berevolusi sehingga meninggalkan proyek tersebut.
Mark Lapasa
1
Terima kasih bro yang ini berfungsi dengan baik untuk saya dan kecepatan build gradle saya meningkat
Android_programmer_office
@Simon, ketika Anda mulai mengembangkan, Anda dapat dengan mudah mengatur pengaturan di atas, lalu sekali berhenti, matikan tepat saat malam berakhir, jalankan aplikasi untuk terakhir kalinya sehingga semuanya masih sinkron. Atau akankah ada masalah dengan ini?
Sauron
1
itu menurun dari 33 detik menjadi 5 detik :))
Miron
62

Saya dapat mengurangi gradle build saya dari 43 detik menjadi 25 detik pada laptop core2duo lama saya (menjalankan linux mint) dengan menambahkan yang berikut ke file gradle.properties di android studio

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

sumber mengapa pengaturan daemon membuat build lebih cepat: https://www.timroes.de/2013/09/12/speed-up-gradle/

Sam
sumber
3
Dari tautan Anda: "Catatan: Ini hanya memengaruhi build konsol. Android Studio selalu menggunakan daemon Gradle (dan tergantung pada pengaturan Anda, beberapa optimasi lainnya)."
ChiefTwoPencils
2
Opsi paralel meningkatkan build saya bahkan di AS. Terima kasih :)
jonathanrz
3
Opsi paralel tidak meningkatkan build saya.
Vlado Pandžić
Terima kasih. Solusi ini membuat waktu build saya dari 7 menit hingga 23 detik ...
Vignesh Bala
thanx membuat bangunan saya dari dua menit menjadi 3 detik
Pouya Samie
12

Mengikuti langkah-langkah akan membuatnya 10 kali lebih cepat dan mengurangi waktu pembangunan 90%

Pertama buat file bernama gradle.properties di direktori berikut:

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

Tambahkan baris ini ke file:

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

Dan periksa opsi ini di Android Studio

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

Biswajit Karmakar
sumber
7

Ada versi gradle yang lebih baru (ver 2.4).

Anda dapat mengatur ini untuk proyek Anda dengan membuka dialog 'Struktur Proyek' dari menu File,

Project Structure -> Project -> Gradle version

dan atur ke '2.4'.
Anda dapat membaca lebih lanjut tentang meningkatkan kinerja di tautan ini .

Hamzeen Hameem
sumber
2
Terima kasih, Gradle versi 2.4 menyelamatkan hampir ~ 14d.
Miao1007
5
Ini membuat waktu saya lebih lama
Egemen Hamutçu
6

Inilah yang saya lakukan dan kecepatan build gradle saya meningkat secara dramatis! dari 1 menit hingga 20 detik untuk bangunan pertama dan selanjutnya menjadi dari 40 detik hingga 5 detik.

Dalam file gradle.properties Tambahkan ini:

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

Dalam Argumen Baris Perintah melalui Pergi ke File> Pengaturan Lainnya> Pengaturan default> Bangun, Eksekusi, Menyebarkan> Complier dan tambahkan argumen berikut ke Argumen Baris Perintah

Tambahkan ini:

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

Lihat gambar di sini

mangu23
sumber
6

Cobalah untuk menghindari penggunaan Mac / PC yang hanya memiliki 8 GB RAM ketika melakukan pengembangan Android. Segera setelah Anda meluncurkan 1 emulator (Genymotion atau lainnya), waktu build Anda menjadi sangat lambat di Android Studio dengan gradle build. Ini terjadi bahkan jika Anda membuat perubahan satu baris sederhana menjadi 1 file sumber.

Menutup emulator dan menggunakan perangkat nyata sangat membantu, tapi tentu saja ini sangat membatasi dan kurang fleksibel. Mengurangi pengaturan penggunaan RAM dari emulator dapat membantu, tetapi cara terbaik adalah memastikan laptop Anda memiliki setidaknya 12-16 GB RAM.

Pembaruan (Juni 2017): Sekarang ada beberapa artikel medium.com yang bagus yang menjelaskan cara mempercepat build Android Studio gradle secara detail, dan bahkan bekerja pada mesin 8 GB:

Konsensus yang dirangkum adalah:

Buat file gradle.properties (global ~/.gradle/gradle.propertiesatau lokal untuk memproyeksikan), dan tambahkan baris berikut:

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
Tuan-IDE
sumber
4
  1. Aktifkan Pekerjaan Offline

  2. Tingkatkan Kinerja Gradle dengan menambahkan kode berikut di gradle.properties

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

Panduan langkah demi langkah: http://www.viralandroid.com/2015/08/how-to-make-android-studio-fast.html

Sajan Rana
sumber
Mari kita jaga jawaban ini bervariasi dan fokus pada pertanyaan OP. re: stackoverflow.com/a/34828203 ... stackoverflow.com/a/34827929 ... stackoverflow.com/a/34827858 ... stackoverflow.com/a/34827827 ... stackoverflow.com/a/34827788
Drew
4
dexOptions {
    incremental true
    javaMaxHeapSize "4g"
}
AnupamChugh
sumber
1
'incremental ture' sudah usang di Android Studio 2018.
M'aiq the Coder
Ini diposting 2 tahun yang lalu.
AnupamChugh
saya tahu, saya hanya menyatakannya untuk orang-orang yang masih mencari solusi ini;)
M'aiq the Coder
3

Acording ini halaman dari Tim Android dari Wikimedia Apps , cara yang baik untuk mengoptimalkan Gradle membangun adalah menambahkan baris ini untuk Anda ~ / .gradle / gradle.properties

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

Bagi mereka yang tidak memiliki file ada dua cara untuk melakukannya:

  1. Tambahkan file secara lokal di proyek Anda dengan membuat file bernama gradle.properties di root proyek atau,

  2. Anda dapat mengaturnya secara global untuk semua proyek Anda dengan membuat file yang sama di direktori home Anda (% UserProfile% .gradle di Windows , ~ / .gradle di Linux dan Mac OS X )

    Ini adalah praktik yang baik untuk mengatur properti di direktori home Anda, bukan pada tingkat proyek.

Jorge Casariego
sumber
2

Anda juga dapat menggunakan baris perintah untuk kinerja yang lebih baik. Anda dapat menggunakan perintah ./gradlew <task name> dari dalam folder root proyek Anda dari linux atau menggunakan file gradlew.bat seperti gradlew<task name> . Ketika Anda pertama kali menjalankan salah satu perintah di atas untuk Gradle yang diberikan versi, itu akan mengunduh distribusi Gradle yang sesuai dan menggunakannya untuk menjalankan build.

Saat mengimpor proyek Gradle melalui pembungkusnya, IDE Anda mungkin meminta untuk menggunakan distribusi 'semua' Gradle. Ini sangat bagus dan membantu IDE memberikan penyelesaian kode untuk file build. Ini tidak hanya berarti Anda tidak harus menginstal Gradle sendiri secara manual, tetapi Anda juga yakin akan menggunakan versi Gradle yang dirancang untuk membangunnya. Ini membuat bangunan historis Anda lebih dapat diandalkan. untuk info lebih lanjut, rujuk Melaksanakan pembangunan dengan Wrapper

khakishoiab
sumber
2

Untuk build yang lebih cepat, tambah ukuran heap maksimum untuk daemon Gradle hingga lebih dari 2048 MB.

Untuk melakukan ini diatur
org.gradle.jvmargs=-Xmx2048M
dalam project gradle.properties .

Yuliia Ashomok
sumber
1

Tambahkan build.gradlefile:

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

Saya harap ini membantu.

alicanozkara
sumber
1

Saya menjalankan gen ke-5 i7 dengan Windows 10 dan Solid State 1TB. Saya mengompresi folder Android Studio Projects dan mendapat peningkatan sekitar 80%. Semoga ini membantu.

Saya kemudian menggabungkannya dengan solusi di atas yaitu (org.gradle.parallel = true, org.gradle.daemon = true). Peningkatan kinerja cukup mengesankan.

Selain itu:

Semua jawaban di atas benar-benar benar, tetapi saya harus menyatakan sebagai pengembang Android yang berpengalaman (selama 4 setengah tahun) bahwa: Tidak ada pengembang Android / Gradle yang dapat mengerjakan mesin dengan drive pemintal, Anda harus membayar untuk Solid state Kita semua menekan tombol putar di IDE 100 kali per hari. Ketika saya beralih dari pemintal ke SSD (post Gradle), kecepatan dan efisiensi saya benar-benar 2 - 4 kali lebih cepat dan saya berjanji kepada Anda bahwa saya TIDAK melebih-lebihkan di sini.

Sekarang saya tidak berbicara tentang memiliki mesin dengan SSD kecil dan pemintal besar, saya berbicara tentang 1 SSD besar. Jika Anda sudah memiliki mesin dengan SSD kecil dan pemintal besar, Anda dapat memutakhirkan pemintal kecil itu menjadi SSD 500GB dan mengatur SSD sebagai drive OS utama Anda dengan alat pengembang Anda yang terpasang di dalamnya.

Jadi, jika Anda bekerja di lingkungan yang serba cepat, harap tunjukkan posting ini kepada bos Anda. SSD 1TB yang layak akan membuat Anda kembali sekitar £ 300 (termasuk PPN), atau sekitar £ 160 untuk 500GB SSD. Bergantung pada apakah Anda seorang pengembang Android junior atau senior, drive akan membayar sendiri (dalam biaya upah) dalam 1-2 minggu kerja, atau sekitar 2 setengah hingga 5 hari kerja jika Anda berinvestasi dalam yang lebih kecil; katakanlah 500GB SSD.

Banyak pengembang mungkin berpendapat bahwa ini bukan masalahnya, tetapi ini adalah kasus untuk Gradle, karena sistem Gradle sangat sulit pada akses disk langsung. Jika Anda bekerja dengan .NET / C # / VB Net atau alat pengembangan lainnya Anda tidak akan melihat banyak perbedaan tetapi perbedaan dalam Gradle adalah BESAR. Jika Anda bertindak pada posting ini saya berjanji kepada Anda, Anda tidak akan kecewa. Secara pribadi saya menggunakan generasi kelima i7 dengan RAM 8GB yang awalnya datang dengan Spinner 1TB dan saya memutakhirkannya ke Samsung SSD 840 EVO 1TB dan saya tidak pernah melihat ke belakang sejak itu. Saya membeli barang saya dari: https://www.aria.co.uk .

Semoga ini membantu. Juga saya harus menyatakan bahwa ini BUKAN posting termotivasi secara komersial, saya hanya merekomendasikan Aria karena saya telah menggunakannya berkali-kali sebelumnya dan mereka selalu dapat diandalkan.

pengguna2288580
sumber
1

beberapa perintah yang bisa kita tambahkan ke file gradle.properties:

org.gradle.configureondemand = true - Perintah ini akan memberi tahu gradle untuk hanya membangun proyek yang benar-benar perlu dibangun. Gunakan Daemon - org.gradle.daemon = true - Daemon menjaga instance gradle dan berjalan di latar belakang bahkan setelah build Anda selesai. Ini akan menghilangkan waktu yang dibutuhkan untuk menginisialisasi gradle dan mengurangi waktu build Anda secara signifikan.

org.gradle.parallel = true - Izinkan gradle untuk membangun proyek Anda secara paralel. Jika Anda memiliki banyak modul dalam proyek Anda, maka dengan mengaktifkan ini, gradle dapat menjalankan operasi pembangunan untuk modul independen secara paralel.

Tingkatkan Ukuran Heap - org.gradle.jvmargs = -Xmx3072m -XX: MaxPermSize = 512m -XX: + HeapDumpOnOutOfMemoryError -Dfile.encoding = UTF-8 - Karena android studio 2.0, gradle menggunakan dex dalam proses untuk mengurangi waktu pembuatan untuk proses pembuatan untuk waktu pembuatan proyek. Secara umum, saat membangun aplikasi, banyak proses dx berjalan pada instance VM yang berbeda. Tetapi mulai dari Android Studio 2.0, semua proses dx ini berjalan di VM tunggal dan VM juga dibagi dengan gradle. Ini mengurangi waktu build secara signifikan karena semua proses dex berjalan pada instance VM yang sama. Tetapi ini membutuhkan memori yang lebih besar untuk mengakomodasi semua proses dex dan gradle. Itu berarti Anda perlu meningkatkan ukuran tumpukan yang dibutuhkan oleh daemon gradle. Secara default, ukuran heap untuk daemon adalah sekitar 1GB.

Pastikan ketergantungan dinamis tidak digunakan. yaitu tidak menggunakan implementasi 'com.android.support:appcompat-v7:27.0.+'. Perintah ini berarti gradle akan online dan memeriksa versi terbaru setiap kali membangun aplikasi. Alih-alih menggunakan versi tetap yaitu 'com.android.support:appcompat-v7:27.0.2'

Ashish Kumar
sumber
1

Tambahkan ini ke gradle.propertiesfile Anda

org.gradle.daemon=true                                                          
org.gradle.parallel=true
org.gradle.configureondemand=true
org.gradle.jvmargs=-Xmx2048M
Jay
sumber
1

Buka gradle.properties dari folder android dan batalkan komentar pada garis yang disorot dan berikan nilai memori sesuai konfigurasi mesin Anda. Saya memiliki ram 8GB di mesin saya jadi saya memberikan maksimum 4096mb dan 1024mb.

# 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

Waktu membangun saya berkurang menjadi setengah setelah ini. Selamat membangun !!

Rajesh Sharma
sumber
0

Ini sering terjadi ketika Anda mengaktifkan multidex di proyek Anda. Ini berpotensi memperlambat proses pengembangan Anda !! Menurut doc :

konfigurasi multidex memerlukan waktu pemrosesan build yang meningkat secara signifikan karena sistem build harus membuat keputusan yang kompleks tentang kelas mana yang harus dimasukkan dalam file DEX primer dan kelas mana yang dapat dimasukkan dalam file DEX sekunder. Ini berarti bahwa pembangunan bertahap menggunakan multidex biasanya memakan waktu lebih lama dan berpotensi memperlambat proses pengembangan Anda.

tetapi Anda dapat mengoptimalkan ini:

Untuk mengurangi waktu pengembangan tambahan yang lebih lama, Anda harus menggunakan pra-dexing untuk menggunakan kembali output multidex antara build.

Jika Anda menggunakan Android Studio 2.3 dan lebih tinggi, IDE secara otomatis menggunakan fitur ini ketika menggunakan aplikasi Anda ke perangkat yang menjalankan Android 5.0 (API level 21) atau lebih tinggi.

Jadi, Anda perlu mengatur minSdkVersion ke 21 atau lebih tinggi !

Tetapi jika Anda versi produksi perlu mendukung minSdkVersion lebih rendah dari 21, misalnya 19

Anda dapat menggunakan productFlavours untuk mengatur minSdkVersion 21 untuk Anda versi dev :

    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'
}
Serg Burlaka
sumber
0

Saya lebih suka membangun dari baris perintah untuk waktu pembangunan yang lebih baik. Jika basis kode aplikasi Anda besar dan Anda memiliki beberapa modul maka Anda dapat mencoba pendekatan AAR Lokal seperti yang dijelaskan di sini, itu akan memberi Anda dorongan besar dalam kinerja Android Studio & waktu pembangunan gradle. Ini kompatibel dengan build command line juga

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

Proyek demo dengan instruksi integrasi dapat ditemukan di sini: https://github.com/akhgupta/AndroidLocalMavenRepoAARDemo

Akhil
sumber