बिल्डिंग और रनिंग ऐप ग्रैडल और एंड्रॉइड स्टूडियो के माध्यम से ग्रहण की तुलना में धीमी है


460

मेरे पास एक मल्टी-प्रोजेक्ट (~ 10 मॉड्यूल) है जिसमें से प्रत्येक बार इमारत में लगभग 20-30 सेकंड लगते हैं। जब मैं एंड्रॉइड स्टूडियो में रन दबाता हूं, तो मुझे ऐप के पुनर्निर्माण के लिए हर बार इंतजार करना पड़ता है, जो बेहद धीमा है।

क्या एंड्रॉइड स्टूडियो में निर्माण प्रक्रिया को स्वचालित करना संभव है? या क्या आपके पास इस प्रक्रिया को तेज बनाने के बारे में कोई सलाह है?

ग्रहण में, स्वचालित भवन के लिए धन्यवाद, एक एमुलेटर पर एक ही परियोजना को चलाने में लगभग 3-5 सेकंड लगते हैं।

यह मेरी बिल्ड.ग्रेडल फ़ाइल (ऐप मॉड्यूल) है:

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
    }
}

23
कृपया ध्यान रखें कि इस समय न तो ग्रेड-आधारित बिल्ड सिस्टम और न ही एंड्रॉइड स्टूडियो उत्पादन-ग्रेड हैं।
कॉमन्सवेयर

11
यहां बिताया जाने वाला समय DEXing चरण में सबसे अधिक संभावना है। दुर्भाग्य से, एंड्रॉइड स्टूडियो का मेक हर एक बार साफ-सुथरा प्रदर्शन करता है, जिससे पहले की डेक्सलाइड फाइलें डिलीट हो जाती हैं। उम्मीद है, हम जल्द ही एक वृद्धिशील निर्माण देखेंगे।
रिचर्ड जे। रॉस III

3
इस बीच, क्या डिफ़ॉल्ट ग्रेडल कार्यों को बदलने के बारे में बताने का कोई सरल तरीका है कि वे हमेशा एक साफ प्रदर्शन नहीं करते हैं?
सिगमाबेटा

10
@CommonsWare अच्छी तरह से, अब कोई बहाना नहीं है हम 1.02 संस्करण पर हैं, लेकिन यह अभी भी एक प्रमुख मुद्दा है। एंड्रॉइड स्टूडियो के साथ मेरा 4 जीबी क्वाड कोर लैपटॉप चल रहा है, इसके 3.75 जीबी के रैम का उपयोग केवल एक हैलो वर्ल्ड प्रोजेक्ट का एक उदाहरण है। यह भी एक परिणाम के रूप में बहुत सुस्त है। मेरे लिए जो एक गंभीर और डिजाइन दोष को इंगित करता है। मुझे उम्मीद है कि चीजें जल्द ही हल हो जाएंगी।
एंड्रयू एस

7
@ और मुझे लगता है कि हमें अपने ओएस को बदलने की जरूरत है, पिछले उपकरणों की तुलना में एक उचित गति से चलने के लिए केवल ग्रेड पाने के लिए।
रिचर्ड ले मेसियर

जवाबों:


441

हार्डवेयर

मुझे खेद है, लेकिन एसएसडी और टन के विकास स्टेशन को अपग्रेड करना संभवत: संयुक्त से नीचे के बिंदुओं की तुलना में बड़ा प्रभाव है।

उपकरण संस्करण

बिल्ड प्रदर्शन में वृद्धि करना विकास टीमों के लिए प्रमुख प्राथमिकता है, इसलिए सुनिश्चित करें कि आप नवीनतम ग्रैडल और एंड्रॉइड ग्रैडल प्लगिन का उपयोग कर रहे हैं ।

विन्यास फाइल

gradle.propertiesजो भी निर्देशिका लागू होती है, उसमें एक फ़ाइल बनाएं :

  • /home/<username>/.gradle/ (लिनक्स)
  • /Users/<username>/.gradle/ (मैक)
  • C:\Users\<username>\.gradle (खिड़कियाँ)

संलग्न:

# 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। यदि आप कंसोल से या सीधे विचार से वर्गीकृत कार्य चलाते हैं तो गुण लागू होते हैं:

आईडीई सेटिंग्स

आईडीई सेटिंग्स जीयूआई से ग्रैडल-इंटेलीज एकीकरण को ट्विक करना संभव है। "ऑफ़लाइन कार्य" को सक्षम करना ( नीचे के जावा से जांच का जवाब ) हर "सिंक ग्रेड फ़ाइल" पर वास्तविक नेटवर्क अनुरोधों को अक्षम कर देगा।

आईडीई सेटिंग्स

देशी बहु-डेक्स

एपीके बिल्ड के सबसे धीमे कदमों में से एक जावा बायटेकोड को डेक्स फाइल में बदलना है। देशी मल्टीडेक्स (केवल डिबग बिल्ड के लिए मिन्सक 21) को सक्षम करने से टूलिंग को काम की मात्रा कम करने में मदद मिलेगी ( नीचे एक्सेल विलगर्ट से उत्तर की जांच करें)।

निर्भरता

@aarपुस्तकालय उप-परियोजनाओं पर निर्भरता को प्राथमिकता दें ।

पर आर पैकेज खोजें mavenCentral , jCenter या उपयोग jitpack.io GitHub से किसी भी पुस्तकालय का निर्माण। यदि आप निर्भरता लाइब्रेरी के स्रोतों का संपादन नहीं कर रहे हैं, तो आपको इसे अपने प्रोजेक्ट स्रोतों के साथ हर बार नहीं बनाना चाहिए।

एंटीवायरस

एंटीवायरस स्कैनिंग से प्रोजेक्ट और कैश फ़ाइलों को बाहर करने पर विचार करें। यह स्पष्ट रूप से सुरक्षा के साथ एक व्यापार है (घर पर यह कोशिश मत करो!)। लेकिन यदि आप शाखाओं के बीच बहुत अधिक स्विच करते हैं, तो एंटीवायरस इसे उपयोग करने के लिए ढाल प्रक्रिया की अनुमति देने से पहले फाइलों को फिर से तैयार करेगा, जो निर्माण समय को धीमा कर देता है (विशेष रूप से एंड्रॉइडस्टाइन सिंक प्रोजेक्ट में ग्रेड फ़ाइलों और अनुक्रमण कार्यों के साथ)। उपाय के साथ और बिना एंटीवायरस के सीपीयू का निर्माण समय और प्रक्रिया को देखने के लिए कि क्या यह संबंधित है सक्षम है।

एक प्रोफ़ाइल का निर्माण

ग्रेडेल ने प्रोफाइलिंग परियोजनाओं के लिए अंतर्निहित समर्थन किया है । अलग-अलग प्रोजेक्ट प्लगइन्स और कस्टम स्क्रिप्ट के एक अलग संयोजन का उपयोग कर रहे हैं। उपयोग --profileकरने से बाधाओं को खोजने में मदद मिलेगी।


1
@AR के बारे में अवसाद: उदाहरण के dependencies {compile 'com.android.support:support-v4:21.0.+'}लिए एक धीमी गति से समाधान है? समझ में नहीं आ रहा है
younes0

1
इमेजिंग, आपने इस तरह से पुस्तकालय जोड़ा है: github.com/novak/numberpicker । इसका एक मूल्य है, एक समस्या के लिए कोड समाधान प्रदान करना, लेकिन लेखक ने इसे मावेन या जेकारेंट की तरह कहीं भी प्रकाशित नहीं किया है। अब आप या तो उस लाइब्रेरी को अपनी परियोजना में स्रोत के रूप में ला रहे हैं और इसे हर समय बना रहे हैं मुख्य परियोजना इसे जीवन भर बनाती है या संकलित करती है और आपके प्रोजेक्ट रिपॉजिटरी में केवल @AR करती है। तो यह वास्तव में एक स्रोत / द्विआधारी निर्भरता विकल्प है। यदि आप स्रोत का संपादन नहीं कर रहे हैं, तो आपको अपनी निर्भरता को पूर्वनिर्धारित बाइनरी के रूप में लाना चाहिए। सादा जावा पुस्तकालयों कि .jar है, एंड्रॉयड पुस्तकालयों के लिए के लिए कि .aar है
सेर्गेई Pechenizkyi

1
यह परियोजना सेटिंग्स> वर्गीकृत है। नीचे स्क्रीनशॉट देखें: i.stack.imgur.com/wrwgo.png
Sergii Pechenizkyi

2
मैंने वर्णित सभी अनुकूलन को सेटअप कर दिया है, हालांकि एंड्रॉइड स्टूडियो में मुझे अपना ऐप शुरू करने में 3 से 4 मिनट लगते हैं, जबकि ग्रहण में यह लगभग 30 सेकंड था। बकवास। केवल 12 प्रोजेक्ट, चलाने के लिए एक एकल ऐप! एंड्रॉइड देव अब इतना बोझिल हो गया है, और यह एक साल से अधिक समय बाद है।
सी 31१

1
मैंने सभी ऑप्टिमाइज़ेशन लागू किए और ग्रहण में 2-3 सेकंड की तुलना में HelloWorld APK बनाने में अभी भी लगभग 20 सेकंड लगते हैं।
पावेल

148

आप ग्रेड-टू-डेट चेक-अप को अनदेखा कर सकते हैं।

यहाँ छवि विवरण दर्ज करें

विंडोज चलाने के लिए एंड्रॉइड स्टूडियो 1.5: पर जाएं File -> Settings -> Build, Execution, Deployment -> Build tools -> Gradle -> Check Offline work (as shown in image)

~ 30 + सेकंड से नीचे ~ 3 सेकंड


24
यह बहुत मजेदार है। यह एक बहुत तेजी से है। लेकिन यह क्या टूटता है?
जॉन बॉलिंगर

2
सबसे अच्छा उपाय। क्या मैं इस समाधान के दुष्प्रभाव को जान सकता हूं
काविन वर्नन

26
@JohnBallinger ऑफ़लाइन कार्य - ऑफ़लाइन मोड में ग्रेडल के साथ काम करने के लिए इस चेक बॉक्स का उपयोग करें। इस मामले में ग्रैडल कैश से निर्भरता का उपयोग करेगा। ग्रेडेल निर्भरता रिज़ॉल्यूशन करने के लिए नेटवर्क तक पहुंचने का प्रयास नहीं करेगा। यदि निर्भरता कैश में आवश्यक निर्भरताएं मौजूद नहीं हैं, तो एक बिल्ड निष्पादन विफल हो जाएगा। (स्रोत: jetbrains.com/idea/help/gradle-2.html )
cprcrack

10
क्या नेटवर्क पर जाने से पहले कैश्ड निर्भरता का उपयोग करना डिफ़ॉल्ट है? मैं इस निर्भरता को अद्यतन निर्भरता के लिए जाँच नहीं कर सकता कि हर बार gradleचलाया जाता है। वह विचित्र है।
एहतेश चौधरी

1
@ ईशेश चौधरी यह बहुत विचित्र है। पूरे ग्रैडल / एंड्रॉइड स्टूडियो देव वातावरण बहुत स्लो है। ज्यादातर लोग सोचते हैं कि यह जावा की वजह से धीमा है। मैं आईडीईए पर सर्वर साइड जावा देव करता हूं और चीजें बहुत आसानी से चलती हैं।
चरण 10

34

इसके लिए हर जगह खोज की गई और आखिरकार एक समाधान मिला जो हमारे लिए काम करता है। समानांतर बिल्ड (ओएसएक्स पर preferences -> compiler -> gradle -> "Compile independent modules in parallel") को सक्षम करने और 'प्रोजेक्ट को स्वचालित रूप से बनाने' को सक्षम करने से इसे ~ 1 मिनट से ~ 20 सेकंड तक नीचे लाया गया। आभार / यू / सहवास

http://www.reddit.com/r/androiddev/comments/1k3nb3/gradle_and_android_studio_way_slower_to_build/


56
20 सेकंड अभी भी भयानक रूप से धीमा है।
जोहान्स ब्रोडवॉल

6
यह स्पष्ट रूप से ध्यान रखें कि केवल तभी मदद करता है जब आपके पास कई स्वतंत्र मॉड्यूल / परियोजनाएं हों। मैंने इसे एकल मॉड्यूल ऐप पर परीक्षण किया है, और इससे कोई फर्क नहीं पड़ा।
सैम

मेरे पास एक बहुत बड़ी परियोजना है और मैकबुक प्रो 2012 कोर i7, 8 जीबी रैम पर 2 - 3 मिनट लगते हैं। ठीक है न?
उपसंहार

25

मैंने हाल ही में एक नया एसएसडी खरीदा है और विंडोज से लिनक्स पर चला गया है। मेरा निर्माण समय अब ​​तेजी से परिमाण का एक क्रम है, और अब कोई कष्टप्रद नहीं है।

हालांकि यह सीधे आपके सवाल का जवाब नहीं देता है कि यह ग्रहण की तुलना में धीमा क्यों है, यह दर्शाता है कि प्रक्रिया डिस्क-बाउंड है और SSD का अपग्रेड एक (कुछ महंगा) समाधान हो सकता है। मैं अनुमान लगा रहा हूं कि इस मुद्दे को समझने वाले और यहां समाप्त होने वाले लोग होंगे, जो मेरे अनुभव की सराहना कर सकते हैं।


11
मेरी टीम के डेवलपर्स के पास बहुत सारी मेमोरी के साथ फास्ट मशीनों में एसएसडी हैं। एक गैर-तुच्छ ऐप के लिए, एक मामूली कोड परिवर्तन के बाद फिर से तैयार करना अभी भी लगभग ~ 45 सेकंड लेता है, जबकि ग्रहण में लगभग तुरंत फिर से तैनाती की तुलना में। यहां तक ​​कि एक सादा, गैर-एंड्रॉइड JUnit चलाना भी पूरी तरह से धीमा है। एंड्रॉइड स्टूडियो और ग्रैडल के लिए "अपग्रेडिंग" अब तक एक बड़ा डाउनग्रेड है। : - /
Spaaarky21

@ Lionleaf कितनी तेजी से विंडोज़ से लिनक्स में स्विच हो रहा है?
younes0

@ younes0 मुझे नहीं पता। मैंने उसी समय लिनक्स पर स्विच किया था जब मैंने एक एसएसडी में स्विच किया था। मैं यह नहीं कह रहा हूं कि इसका कोई सकारात्मक प्रभाव है, यह सिर्फ उन दो चर थे जो मैंने स्पीडअप के लिए बदल दिए थे।
एंड्रियास लावे सेल्विक

4
मेरे मामले में विंडोज से लिनक्स पर स्विच करने के परिणामस्वरूप 40% तेजी से एंड्रॉइड का निर्माण हुआ ... इसलिए यह निश्चित रूप से इसके लायक है
kosiara - बार्टोज़ कोसार्ज़ी

मैं दूसरा जो @Bartosz Kosarzycki ने कहा। मैंने अपने देव मशीन पर वर्चुअलबॉक्स के साथ एक उबंटू वीएम चलाना समाप्त कर दिया। ~ 54 सेकंड का निर्माण विंडोज़ पर, ~ 7sec उसी हार्डवेयर पर वर्चुअल मशीन के अंदर बनाने के लिए। लिनक्स पर जाकर पागल स्पीडअप।
एरिक कॉर्नेलसन

20

एंड्रॉइड स्टूडियो 3.2.1 में ग्रैडल बिल्ड स्पीड

कभी ऐसा महसूस होता है कि आप मिनटों के लिए एंड्रॉइड स्टूडियो में पूरा होने का इंतजार कर रहे हैं? मैं भी। और यह बहुत कष्टप्रद है। सौभाग्य से, वहाँ कुछ तरीके हैं जो आप इसे सुधारने के लिए उपयोग कर सकते हैं। एंड्रॉइड बिल्डिंग के लिए ग्रेड का उपयोग करता है। नवीनतम संस्करण 4.6 में पिछले संस्करणों की तुलना में बहुत बड़ा प्रदर्शन है (विवरण के लिए रिलीज़ नोट देखें)।

चरण 1: ग्रेड संस्करण को अपडेट करें इसे पूरा करने का एक आसान तरीका यह है: इसके लिए मॉड्यूल सेटिंग्स खोलें (आपकी परियोजना)> परियोजना संरचना

यहाँ छवि विवरण दर्ज करें

अपडेट करें

ग्रैडल संस्करण में बदलें : 4.6 और एंड्रॉइड प्लगइन संस्करण में बदलें : 3.2.1

यहाँ छवि विवरण दर्ज करें

डाउनलोड ग्रेडल रिलीज वितरण https://services.gradle.org/distributions/gradle-4.6-all.zip से करें और इसे ग्रेड फ़ोल्डर में कॉपी करें :

यहाँ छवि विवरण दर्ज करें

अंतिम चरण सेटिंग> ग्रेडल में अपने डिस्क्रिब्यूशन को जोड़ना है

यहाँ छवि विवरण दर्ज करें

परिवर्तनों को सहेजने के लिए लागू करें पर क्लिक करना न भूलें।

चरण 2: ऑफ़लाइन मोड सक्षम करें, प्रोजेक्ट के लिए ग्रेडल डेमॉन और समानांतर बिल्ड ऑफ़लाइन मोड अपडेट को अद्यतन चेक को अनदेखा करने के लिए ग्रेडल को बताता है। ग्रैडल हर समय निर्भरता के लिए पूछता है और इस विकल्प के होने से यह निर्भरता के लिए मशीन पर पहले से ही उपयोग करता है। एंड्रॉइड स्टूडियो सेटिंग से ग्रैडल पर जाएं और ऑफ़लाइन काम बॉक्स में क्लिक करें।

यहाँ छवि विवरण दर्ज करें

  1. एंड्रॉइड स्टूडियो सेटिंग से कंपाइलर पर जाएं और कमांड लाइन बॉक्स में "ऑफ़लाइन" जोड़ें और समानांतर में कंपाइल स्वतंत्र मॉड्यूल पर क्लिक करें।

यहाँ छवि विवरण दर्ज करें

अगला कदम ग्रेडल डेमॉन को सक्षम करना और अपनी परियोजना के लिए समानांतर निर्माण करना है। समानांतर बिल्ड आपके प्रोजेक्ट्स को कई मॉड्यूल (ग्रेड में मल्टी-प्रोजेक्ट बिल्ड) के साथ समानांतर में बनाए जाएंगे, जिससे बड़ी या मॉड्यूलर परियोजनाएं तेजी से बननी चाहिए।

यहाँ छवि विवरण दर्ज करें

ये सेटिंग्स ग्रैड स्क्रिप्ट निर्देशिका (यानी, ~ .gradle / gradle.properties) में gradle.properties नामक एक फ़ाइल को संशोधित करके सक्षम की जा सकती हैं। इनमें से कुछ विकल्प (जैसे समानांतर में Complie मॉड्यूल) एंड्रॉइड स्टूडियो से उपलब्ध हैं और वहां भी सक्षम हैं। डिफ़ॉल्ट, लेकिन उन्हें 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

डेमॉन का उपयोग करने से आपका बिल्डअप तेजी से शुरू होगा क्योंकि इसे हर बार पूरे ग्रेडेल एप्लिकेशन को शुरू नहीं करना पड़ेगा। ग्रैडल डेमन डिफ़ॉल्ट रूप से सक्षम नहीं है, लेकिन यह हमेशा डेवलपर्स की मशीनों के लिए इसे सक्षम करने की सलाह देता है (लेकिन इसे निरंतर एकीकरण सर्वर के लिए अक्षम कर देता है)। इस मोड के बारे में अक्सर पूछे जाने वाले प्रश्न यहां 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/ आप सेटिंग फ़ाइल में ग्रेड मापदंडों को भी कॉन्फ़िगर कर सकते हैं, उदाहरण के लिए यदि आपके पास कोई बड़ी परियोजना है तो अधिकतम हीप आकार बढ़ाएँ:

# 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 विवरण के लिए।

चरण 4: एंटीवायरस को अक्षम करें प्रोजेक्ट और कैश फ़ाइलों को एंटीवायरस स्कैनिंग से बाहर करने पर विचार करें। यह स्पष्ट रूप से सुरक्षा के साथ एक व्यापार है। लेकिन अगर आप शाखाओं के बीच स्विच करते हैं, तो एंटीवायरस फ़ाइलों को उपयोग करने की अनुमति देने से पहले फ़ाइलों को फिर से लिख देगा, जो निर्माण समय को धीमा कर देता है (विशेष रूप से एंड्रॉइड स्टूडियो सिंक प्रोजेक्ट में ग्रेड फ़ाइलों और अनुक्रमण कार्यों के साथ)। उपाय के साथ और बिना एंटीवायरस के सीपीयू का निर्माण समय और प्रक्रिया को देखने के लिए कि क्या यह संबंधित है सक्षम है। आशा है कि ये आपकी मदद करेगा। बिल्ड परफॉर्मेंस को बेहतर बनाने के लिए अगर आपके पास कोई सवाल है या कुछ अन्य टिप्स हैं तो एक टिप्पणी छोड़ दें।

उपयोगी लिंक


19

यदि Google Play सेवाओं का उपयोग कर रहे हैं, तो केवल पूरी तरह से बूँद के बजाय आपको आवश्यक पुस्तकालयों के आधार पर चीजों को तेज कर सकते हैं।

यदि आपकी एकमात्र आवश्यकता मानचित्र है, तो उपयोग करें:

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

के बजाय:

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

उत्तरार्द्ध क्लासपैथ में 20k विधियाँ (ब्लॉग देखें) लाता है , जो 64k से अधिक की कुल पद्धति को टिप कर सकता है।

यह डिबग बिल्ड के लिए प्रोजगार्ड या मल्टीडेक्स के उपयोग को भी मजबूर करेगा । मेरी एक परियोजना के लिए मेरे पास निम्नलिखित बिल्ड समय थे

  • मल्टीडेक्स बिल्ड (सपोर्टलिफ्ट के साथ) ~ 40 सेकेंड
  • proguard बिल्ड ~ 20sec
  • निर्माण जब विधि सीमा <64k ~ 5sec

यदि sdk 21+ पर विकसित हो रहा है, तो एंड्रॉइड डॉक्यूमेंटेशन में बताए गए मल्टीडेक्स बिल्ड को ऑप्टिमाइज़ करना संभव होगा

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
        }
    }
    ...
}

2
सभी संकलन करने के बजाय play-serviceपुस्तकालय, मैं केवल संकलित mapsऔर locations और अक्षम multidex। मुझे बड़ा फर्क महसूस होता है। धन्यवाद +1
सामी एल्तामावी

16

स्वीकृत उत्तर एंड्रॉइड स्टूडियो के पुराने संस्करणों के लिए है और उनमें से अधिकांश अभी भी काम करते हैं। एंड्रॉइड स्टूडियो को अपडेट करने से यह थोड़ा तेज हो गया। एक्सपी और एक्सएमएक्स की वृद्धि के साथ स्वचालित रूप से वृद्धि होगी क्योंकि हीप आकार निर्दिष्ट करने के लिए परेशान न करें। यहाँ VMoptions के साथ कुछ संशोधन है

  1. बिन फ़ोल्डर में पर्यावरण कॉन्फ़िगरेशन सेट करने के लिए एक स्टूडियो .vmoptions फ़ाइल है। मेरे मामले में यह स्टूडियोज 64.vmoptions है। यदि वे पहले से नहीं जोड़े गए हैं और फाइल को सेव करें तो निम्नलिखित पंक्तियों को जोड़ें। मेरे मामले में मेरे पास 8GB रैम है।

    -Xms4096m
    -Xmx4096m
    -XX:MaxPermSize=2048m
    -XX:+CMSClassUnloadingEnabled
    -XX:+CMSPermGenSweepingEnabled 
    -XX:+HeapDumpOnOutOfMemoryError
    -Dfile.encoding=utf-8`
  2. Android स्टूडियो प्रारंभ करें। फाइल पर जाएं-> सेटिंग्स-> बिल्ड, एक्ज़ीक्यूशन, डिप्लॉयमेंट-> कंपाइलर

    • समानांतर में स्वतंत्र मॉड्यूल की जाँच करें
    • कमांड-लाइन विकल्प में लिखें: --ऑफलाइन
    • स्वचालित रूप से परियोजना की जाँच करें
    • मांग पर कॉन्फ़िगर की जाँच करें

मैक का उपयोग करने के मामले में, पहली बार में मुझे vmoptions नहीं मिला। वैसे भी, यहां एक अच्छा लेख है कि हम मैक ओएसएक्स में vmoptions को कैसे बदल सकते हैं । इस लेख से यहाँ उद्धृत।

अपना टर्मिनल खोलें और मैक OSX में vmoptions खोलने के लिए यह कमांड डालें:

open -e /Applications/Android\ Studio.app/Contents/bin/studio.vmoptions

1
2.3.2 के रूप में आप मदद के द्वारा विम विकल्पों को बदल सकते
सैम

15

बस निम्नलिखित निर्देशिका में gradle.properties नामक एक फ़ाइल बनाएँ:

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

इस लाइन को फाइल में जोड़ें:

org.gradle.daemon=true

मेरे लिए अब गति ग्रहण के बराबर है।

स्रोत: https://www.timroes.de/2013/09/12/speed-up-gradle/


मैं मैक में .gradle फ़ोल्डर को देखने में सक्षम नहीं हूं। इसे कैसे खोलें?
धर्मिक

@ धार्मिक: हो सकता है कि आपने एक अलग उपयोगकर्ता नाम के तहत Android स्टूडियो स्थापित किया हो। अन्यथा, यह सही ढंग से स्थापित नहीं है मुझे लगता है।
यॉस्टर

1
नहीं, यह अन्य मुद्दा था .. ".ग्रेडल" सिस्टम फ़ोल्डर छिपा हुआ था .. इसलिए मैं Go => Go To Folder और जितना पाया गया। .ग्रेड फ़ोल्डर .. फास्ट रिप्लाई के लिए धन्यवाद ..
Dharmik

14

यदि आप कमांड लाइन से ग्रेडेल का उपयोग करते हैं, तो आप इस प्रक्रिया को तेज़ कर सकते हैं। आईडीई डेवलपर्स के लिए करने के लिए बहुत अधिक अनुकूलन है। लेकिन यह अभी शुरुआती संस्करण है।

अधिक जानकारी के लिए जी + पर कुछ देवों के साथ इस चर्चा को पढ़ें ।


3
यह अब भी 2016 में सही लगता है
लियो मोनिका सेलियो

11

अगर कोई भी एक ऐसी परियोजना पर काम कर रहा है जो कि तोड़फोड़ के माध्यम से समन्वयित है और यह अभी भी हो रहा है, मुझे लगता है कि यह एंड्रॉइड स्टूडियो में वर्कफ़्लो की प्रक्रिया को धीमा कर सकता है। उदाहरण के लिए अगर यह बहुत धीमी गति से काम करता है: एक कक्षा, xml आदि में स्क्रॉल करना, जबकि मेरा ऐप अभी भी मेरे डिवाइस पर चल रहा है।

  • प्राथमिकता पर संस्करण नियंत्रण पर जाएं, और तोड़फोड़ से कोई भी करने के लिए सेट करें।यहाँ छवि विवरण दर्ज करें

1
आप मेरा दिन बचाते हैं: 2/4 मिनट -> 15 सेकंड (मैं परियोजना के लिए कछुआ एचजी को निष्क्रिय कर दिया)।
कफ्तानती

3
यदि कोई भी अभी भी तोड़फोड़ का उपयोग कर रहा है, तो उन्हें Git या Mercurial पर स्विच करना चाहिए
लियो मोनिका सेलियो

8

एंड्रॉइड स्टूडियो 2.3 के बाद अपडेट करें

सभी उत्तर महान हैं, और मैं बिल्ड गति को बेहतर बनाने के लिए उन तरीकों का उपयोग करने के लिए प्रोत्साहित करता हूं।

सितंबर 2016 को एंड्रॉइड 2.2 की रिलीज़ के बाद, एंड्रॉइड ने बिल्ड प्रदर्शन को तेज करने के लिए प्रयोगात्मक बिल्ड कैश सुविधा जारी की gradle, जो अब एंड्रॉइड स्टूडियो 2.3 कैनरी से आधिकारिक है। (आधिकारिक रिलीज नोट)

यह एक नई बिल्ड कैश सुविधा का परिचय देता है, जो डिफ़ॉल्ट रूप से सक्षम है, बिल्ड समय को पूर्ण कर सकता है (पूर्ण बिल्ड, वृद्धिशील बिल्ड और तत्काल रन सहित) फ़ाइलों / निर्देशिकाओं को संग्रहीत करने और पुन: उपयोग करके जो उसी या अलग एंड्रॉइड के पिछले बिल्ड में बनाए गए थे परियोजना।

कैसे इस्तेमाल करे:

अपनी 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बिल्ड कैश को अधिक आसानी से साफ़ करने के लिए आपके लिए एक नया ग्रेडल कार्य कहा जाता है । आप अपने टर्मिनल में निम्नलिखित लिखकर इसका उपयोग कर सकते हैं:

    ./gradlew cleanBuildCache

  • या आप स्थान पर सभी फ़ाइलों को हटाकर एंड्रॉइड स्टूडियो 2.2 के लिए कैश को साफ कर सकते हैं

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


7

इस सेटिंग को बदलने के बाद मेरी संकलित अवधि 10 मिनट बदलकर ~ 10 सेकंड हो गई।

चरण 1:

सेटिंग्स (ctrl + Alt + S) ->

निर्माण, निष्पादन, तैनाती ->

संकलक ->

--offlineकमांड लाइन विकल्प बॉक्स में " " टाइप करें ।

चरण 2:

"समानांतर में स्वतंत्र मॉड्यूल की जाँच करें" चेकबॉक्स।

लागू करें पर क्लिक करें -> ठीक है

यहाँ छवि विवरण दर्ज करें

संदर्भ - https://www.sundoginteractive.com/blog/speed-up-gradle-in-android-studio

हानि:

आप अपनी build.gradle फ़ाइल में पहचानी गई निर्भरता के नवीनतम संस्करणों को नीचे नहीं खींच पाएंगे। यह तेजी से चलता है क्योंकि यह उन आयातित पुस्तकालयों के कैश्ड स्नैपशॉट का उपयोग करता है।

महत्वपूर्ण नोट : जब आप एप्लिकेशन को तैनात करते हैं तो इस सेटिंग्स को हटा दें और निर्भरता के नवीनतम संस्करणों के साथ निर्माण करें।


6

के साथ हल किया

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

ग्रैड बिल्ड 8 मिनट से 3 सेकंड तक चला गया।


4

यहां बताया गया है कि Android Studio 2.2 को तेज करने में इस शुरुआत ने एंड्रॉइड प्रोग्रामर (पूर्व पेशेवर प्रोग्रामर, वर्षों पहले) की मदद की। मुझे पता है कि यह एक पुनर्वसन है, लेकिन, सिर्फ संक्षेप में एक जगह में।

प्रारंभिक बिल्ड अभी भी बेरहमी से धीमा हो सकता है, लेकिन चल रहे ऐप्स के पुनरारंभ अब आमतौर पर बहुत सहनशील हैं। मैं एक उप-इष्टतम पीसी का उपयोग कर रहा हूं: एएमडी क्वाड-कोर ए 8-7410 सीपीयू, 8 एमबी रैम, नॉन-एसएसडी एचडी, विन 10. (और, यह मेरी पहली स्टैक ओवरफ्लो पोस्टिंग है ....);

सेटिंग में -> कोण:

"ऑफ़लाइन काम" के लिए हाँ (यह शायद सबसे अधिक आयात सेटिंग है)।

सेटिंग में -> संकलनकर्ता:

हाँ "समानांतर में स्वतंत्र मॉड्यूल संकलित करें" (यह सुनिश्चित नहीं है कि क्या यह वास्तव में मल्टीकोर सीपीयू का उपयोग करने में मदद करता है)।

GRCR SCRIPTS में , "build.gradle (मॉड्यूल: ऐप)":

defaultConfig {
    ...
   // keep min high so that restarted apps can be hotswapped...obviously, this is hugely faster.
   minSdkVersion 14
   ...
    // enabling multidex support...does make big difference for me.
    multiDexEnabled true

ग्रैड स्क्रैप में भी , "gradle.properties (परियोजना गुण)":

org.gradle.jvmargs = -Xmx3048m -XX: MaxPermSize = 512m -XX: + HeapDumpOnOutOfMemoryError -Dfile.encoding = UTF-8

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

इसके अतिरिक्त , एमुलेटर के बजाय एक भौतिक उपकरण पर परीक्षण मेरे लिए अच्छी तरह से काम कर रहा है; एक छोटी गोली जो खड़ी है वह सुविधाजनक है।


4

बस एक और प्रदर्शन imporvement टिप:

Android Studio 3.0 में D8 नामक नया DEX कंपाइलर शामिल है।

"डेक्स कंपाइलर आपके दिन-प्रतिदिन के विकास में हुड के तहत काम करता है, लेकिन यह सीधे आपके ऐप के निर्माण समय, .dex फ़ाइल आकार और रनटाइम प्रदर्शन को प्रभावित करता है।"

"और जब वर्तमान डीएक्स संकलक के साथ नए डी 8 कंपाइलर की तुलना की जाती है, तो डी 8 तेजी से संकलित करता है और समान या बेहतर ऐप रनटाइम प्रदर्शन करते हुए, .dex फ़ाइलों को आउटपुट करता है।"

D8 वैकल्पिक है - इसका उपयोग हम परियोजना के gradle.properties के लिए डाल दिया है

android.enableD8=true

अधिक जानकारी: https://android-developers.googleblog.com/2017/08/next-generation-dex-compiler-now-in.html

पुनश्च। यह मेरा निर्माण समय लगभग 30% बढ़ाता है।


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) पेंटियम (R) CPU G2030 @ 3.00GHz, 3000 Mhz, 2 प्रोसैसोरेस प्रिंसिपल, 2 प्रोसैडोरेस लॉजिक
  • 64
  • माइक्रोसॉफ्ट विंडोज 7 प्रोफेशनल
  • (रैम) 16,0 जीबी

परियोजना फाइलें
- सभी स्थानीय एचडी में स्थित हैं


1

कृपया निम्न चरणों का पालन करें।

  1. ऑफ़लाइन मोड सक्षम करें: कृपया नीचे प्रिंट स्क्रीन देखें।

    https://i.stack.imgur.com/RF9uG.png

  2. इंस्टेंट रन सक्षम करें: कृपया प्रिंट स्क्रीन के नीचे देखें।

    https://i.stack.imgur.com/mvHKJ.png

    यदि आप तत्काल रन के बारे में अधिक जानना चाहते हैं तो कृपया Android डेवलपर साइट पर जाएं।


1

आप स्टूडियो के दाईं ओर ग्रेड मेनू खोल सकते हैं, और केवल आपके द्वारा बदले गए मॉड्यूल को इकट्ठा कर सकते हैं, फिर इंस्टॉल कमांड को चला सकते हैं। जब आप इसे चलाते हैं तो यह सबकुछ असेंबल करता है, चाहे आप किसी भी बदलाव के बारे में बताएं जो आपने कोड के लिए किया है


0

मैं ग्रैडल के विशेषज्ञ होने से बहुत दूर हूं लेकिन मेरे पर्यावरण में .gradle / init.gradle की निम्न पंक्ति थी

gradle.projectsLoaded {
    rootProject.allprojects {
        repositories {
            mavenRepo name: 'libs-repo', url: 'http://guest-vm/artifactory/repo'
        }
    }
}

फिर भी मुझे पता नहीं है कि वह रेखा क्यों थी, लेकिन मैं इसे बदलने की कोशिश करता हूं

gradle.projectsLoaded {
    rootProject.allprojects {
        repositories {
            mavenCentral()
        }
    }
} 

और अब मैं अंततः एंड्रॉइड स्टूडियो और ग्रैडल बिल्ड योजना के लिए शपथ ग्रहण किए बिना काम कर सकता हूं।


आपके मामले में आर्टिफैक्ट का उपयोग संभवतः लाइब्रेरी कैश के रूप में किया गया था। आप आर्टिफैक्ट सर्वर से संपर्क करते हैं जो यह देखते हैं कि यह लाइब्रेरी है। यदि हाँ, तो यह आपको वापस कर देता है अन्यथा यह चला जाता है और इसे mavencentral से प्राप्त करता है और फिर आपके पास वापस आ जाता है।
Fabio Marcolini

0

हमारे विशिष्ट मामले में, रेट्रोलंबा होने के कारण समस्या थी प्लगइन , जिसने सभी परियोजनाओं और को हर बार पुन: मजबूर किया था, भले ही हमने अपने एप्लिकेशन को लॉन्च करने की कोशिश की हो, भले ही हमारे मुख्य मॉड्यूल में कोई कोड नहीं बदला गया हो।

निकाला जा रहा है retrolamba हमारे लिए तय की। आशा है कि यह किसी की मदद करता है।


0

बस पहले यह कोशिश करो। यह मेरा निजी अनुभव है।

मुझे भी यही समस्या थी। मैंने जो किया था, वह केवल स्थायी रूप से एंटीवायरस को अक्षम करना था (मेरा अवास्ट सिक्योरिटी 2015 था)। एंटीवायरस को अक्षम करने के बाद, बात अच्छी तरह से चली गई। ग्रेडेल सफलतापूर्वक समाप्त हो गया। अब सेकंड के भीतर से ग्रेडेल खत्म हो रहा है (केवल 5-10 सेकंड ले रहा है)।


0

हाय मुझे पता है कि यह बहुत देर से जवाब है, लेकिन शायद
मेरे मामले में कोई मेरी मदद कर रहा था

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

मेरे ऐप ग्रैडल निर्भरता में
लेकिन मेरी एक लाइब्रेरी में यह था

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

मेरी समस्या को हल करने के लिए सभी नवीनतम संस्करण में परिवर्तन के बाद।


0

चरणों का पालन करने से यह 10 गुना तेज हो जाएगा और निर्माण समय 90% कम हो जाएगा

पहले निम्नलिखित निर्देशिका में gradle.properties नामक एक फ़ाइल बनाएँ:

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

इस लाइन को फाइल में जोड़ें:

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

और एंड्रॉइड स्टूडियो में इस विकल्प की जांच करें

यहाँ छवि विवरण दर्ज करें


0

0

एक तुच्छ परिवर्तन (एक resoruce xml के लिए) अभी भी 10 मिनट लगे । जैसा कि @rivare अपने जवाब में कहते हैं, एक कमांड लाइन का निर्माण तेजी से होता है (इसे 15 सेकंड तक ले जाया जाता है )।
कम से कम विंडोज के लिए कमांड लाइन से तेजी से एक तुच्छ निर्माण करने के लिए कुछ कदम यहां दिए गए हैं।

  1. अपने प्रोजेक्ट रूट पर जाएं (जहां gradlew.bat है):

    सीडी c: \ android \ MaskActivity

  2. बिल्ड निष्पादित करें :

    gradlew असेंबलडबग

  3. फोन से सीधे APK को अनइंस्टॉल करें (इसे अनइंस्टॉल करने के लिए खींचें)।

  4. जब बिल्ड समाप्त हो जाता है, तो Windows टास्क मैनेजर का उपयोग करके BIG java प्रक्रिया को मारें

या यदि आपके पास अपने विंडोज मशीन पर यूनिक्स उपकरण हैं:

ps

"पिड" दिखाए गए हैं:

kill -9 <pid>
  1. अब स्थापित करें अपना एपीके करें:

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



0

कम विन्यास मशीन पर एंड्रॉइड एनवायरमेंट चलाने के लिए।

  1. ब्राउज़र में अनसेस्सरी वेब टैब बंद करें
  2. एंटीवायरस यूजर्स के लिए, उस बिल्ड फोल्डर को बाहर करें, जो ऑटो जनरेट होता है
  3. Android स्टूडियो में 1.2 Gb डिफॉल्ट हीप में 512 MB तक की कमी हो सकती है> कस्टम VM विकल्पों को संपादित करें ।vmoptions -Xmx512m Layouts के प्रदर्शन में तेजी आएगी

  4. एंड्रॉइड स्टूडियो Mkae में मुख्य घटक में से एक ग्रेडेल के लिए निश्चित रूप से अभी जैसे 3.0beta नवीनतम है

नीचे दिए गए सुझाव कोड गुणवत्ता को प्रभावित कर सकते हैं, इसलिए कृपया सावधानी के साथ उपयोग करें:

  1. स्टूडियो में पावर सेफ मोड होता है, जब इसे ऑन किया जाता है तो बैकग्राउंड ऑपरेशंस बंद हो जाएंगे जो लिंट, कोड कंप्लेनल्स इत्यादि।

  2. जरूरत पड़ने पर आप मैनुअली लिंटचेक चला सकते हैं

  3. अधिकांश एंड्रॉइड एमुलेटर का उपयोग कर रहे हैं औसतन यह 2 जीबी रैम की खपत करता है इसलिए यदि संभव हो तो वास्तविक एंड्रॉइड डिवाइस का उपयोग करें ये आपके कंप्यूटर पर आपके संसाधन लोड को कम कर देंगे। वैकल्पिक रूप से आप एमुलेटर की रैम को कम कर सकते हैं और यह स्वचालित रूप से आपके कंप्यूटर पर वर्चुअल मेमोरी खपत को कम कर देगा। आप इसे वर्चुअल डिवाइस कॉन्फ़िगरेशन और अग्रिम सेटिंग में पा सकते हैं।

  4. ग्रेडल ऑफलाइन मोड बिल्ड निर्भरता के डाउनलोड को निष्क्रिय करने के लिए बैंडविड्थ सीमित उपयोगकर्ताओं के लिए एक सुविधा है। यह पृष्ठभूमि ऑपरेशन को कम करेगा जो एंड्रॉइड स्टूडियो के प्रदर्शन को बढ़ाने में मदद करेगा।

  5. एंड्रॉइड स्टूडियो समानांतर में कई मॉड्यूल संकलित करने के लिए एक अनुकूलन प्रदान करता है। कम रैम मशीनों पर इस सुविधा के प्रदर्शन पर नकारात्मक प्रभाव पड़ेगा। आप इसे कंपाइलर सेटिंग डायलॉग में डिसेबल कर सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.