يعد إنشاء التطبيق وتشغيله عبر Gradle و Android Studio أبطأ من تطبيق Eclipse




android-studio build.gradle (18)

تحديث بعد أندرويد ستوديو 2.3

جميع الإجابات رائعة ، وأشجع على استخدام هذه الأساليب مع هذه الطريقة لتحسين سرعة الإنشاء.

بعد إصدار Android 2.2 في سبتمبر 2016 ، أصدر Android ميزة إنشاء ذاكرة التخزين المؤقت التجريبية لتسريع أداء gradle شكل 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.

تنظيف ذاكرة التخزين المؤقت:

  • هناك مهمة Gradle جديدة تسمى cleanBuildCache لك لتنظيف ذاكرة التخزين المؤقت cleanBuildCache بسهولة أكبر. يمكنك استخدامه عن طريق كتابة ما يلي في جهازك:

    ./gradlew cleanBuildCache

  • أو يمكنك تنظيف ذاكرة التخزين المؤقت لاستوديو Android 2.2 عن طريق حذف جميع ملفات التخزين في الموقع

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

لديّ مشروع متعدد (10 وحدات تقريبًا) يستغرق بناءه حوالي 20-30 ثانية في كل مرة. عندما أضغط على Run في Android Studio ، يجب علي الانتظار كل مرة لإعادة إنشاء التطبيق ، وهو بطيء للغاية.

هل من الممكن أتمتة عملية البناء في Android Studio؟ أو هل لديك أي نصيحة حول كيفية جعل هذه العملية أسرع؟

في Eclipse ، وبفضل الإنشاء التلقائي ، يستغرق تشغيل نفس المشروع على المحاكي حوالي 3-5 ثوانٍ.

هذا هو ملف build.gradle الخاص بي (وحدة التطبيق):

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

المعدات

أنا آسف ، ولكن ترقية محطة التطوير إلى SSD وأطنان من ذاكرة الوصول العشوائي ربما يكون لها تأثير أكبر من النقاط أدناه مجتمعة.

إصدارات الأدوات

تُعد زيادة أداء Gradle أولوية رئيسية لفرق التطوير ، لذا تأكد من أنك تستخدم أحدث برنامج Gradle و Android Gradle Plugin .

ملف الضبط

قم بإنشاء ملف يسمى gradle.properties في أي دليل ينطبق:

  • /home/<username>/.gradle/ (Linux)
  • /Users/<username>/.gradle/ (نظام التشغيل Mac)
  • 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

تعمل خصائص Gradle محليًا إذا قمت بوضعها في projectRoot\gradle.properties وعلى الصعيد العالمي إذا قمت بوضعها في user_home\.gradle\gradle.properties . يتم تطبيق الخصائص إذا قمت بتشغيل مهام Gradle من وحدة التحكم أو مباشرة من الفكرة:

إعدادات IDE

من الممكن تعديل قرص Gradle-IntelliJ من إعدادات واجهة المستخدم الرسومية IDE. يؤدي تمكين "العمل بلا اتصال" (التحقق من الإجابة من yava أدناه) إلى تعطيل طلبات الشبكة الحقيقية في كل "ملف مقذفي المزامنة".

الأصلية متعددة dex

واحدة من أبطأ الخطوات لبناء apk هو تحويل جافا bytecode إلى ملف واحد dex. يساعد تمكين multidex الأصلي (minSdk 21 لتصميمات debug فقط) على الأدوات لتقليل مقدار العمل (تحقق من الإجابة من Aksel Willgert أدناه).

تبعيات

تفضل تبعية @aar على المشاريع الفرعية للمكتبة.

بحث حزمة aar على mavenCentral ، jCenter أو استخدام jitpack.io لبناء أي مكتبة من جيثب. إذا لم تكن تقوم بتحرير مصادر مكتبة التبعية ، يجب ألا تقوم ببنائها في كل مرة مع مصادر مشروعك.

مضاد للفيروسات

ضع في اعتبارك استبعاد ملفات Project وذاكرة التخزين المؤقت من فحص مكافحة الفيروسات. ومن الواضح أن هذا هو المقايضة مع الأمن (لا تحاول ذلك في المنزل!). ولكن إذا قمت بالتبديل بين الفروع كثيرًا ، فسيقوم برنامج مكافحة الفيروسات بإعادة فحص الملفات قبل السماح باستخدام عملية Gradle لاستخدامها ، مما يؤدي إلى إبطاء وقت الإنشاء (خاصةً مشروع مزامنة AndroidStudio مع ملفات التجديف وفهرسة المهام). قياس وقت البناء ومعالجة وحدة المعالجة المركزية مع وبدون تمكين مكافحة الفيروسات لمعرفة ما إذا كانت ذات صلة.

التنميط بناء

لدى Gradle دعمًا مدمجًا لمشاريع التعريف . تستخدم المشروعات المختلفة مجموعة مختلفة من المكونات الإضافية والنصوص المخصصة. استخدام --profile سوف يساعد على العثور على اختناقات.


إذا كان أي شخص يعمل في مشروع تتم مزامنته من خلال Subversion ولا يزال هذا يحدث ، أعتقد أن هذا يمكن أن يبطئ سير العمل في Android Studio. على سبيل المثال ، إذا كانت تعمل ببطء شديد: أثناء التمرير في الفصل الدراسي ، xml ، وما إلى ذلك ، لا يزال تطبيقي قيد التشغيل على جهازي.

  • انتقل إلى التحكم في الإصدار في تفضيلات ، وتعيين من Subversion على بلا.

إذا كنت تستخدم خدمات google play ، فاعتمادًا على المكتبات التي تحتاج إليها فقط ، بدلاً من النقطة الكاملة ، يمكنك جعل الأشياء أسرع.

إذا كانت حاجتك الوحيدة هي الخرائط ، فاستخدم:

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

بدلا من:

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

هذا الأخير يجلب 20k أساليب (انظر بلوق) في classpath ، والتي قد تقلب مجموع طرق حساب أكثر من 64k.

من شأنه أن يفرض استخدام proguard أو multidex حتى بالنسبة multidex التصحيح. بالنسبة لأحد مشروعاتي ، كان لدي أوقات الإنشاء التالية

  • بناء multidex (مع supportlibrary) ~ 40sec
  • بناء proguard ~ 20sec
  • بناء عند حد الطريقة <64k ~ 5sec

في حالة التطوير على sdk 21+ ، من الممكن تحسين بنى multidex كما هو مذكور في وثائق Android

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

اتباع الخطوات يجعلها أسرع 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

وتحقق من هذه الخيارات في Android Studio



بحثت في كل مكان عن هذا ووجدت في نهاية المطاف حلا يعمل لنا. تمكين preferences -> compiler -> gradle -> "Compile independent modules in parallel" المتوازية (في OSX: preferences -> compiler -> gradle -> "Compile independent modules in parallel" ) وتمكين "جعل المشروع تلقائيًا" قد preferences -> compiler -> gradle -> "Compile independent modules in parallel" من ~ 1 دقيقة إلى ~ 20 ثانية. شكرا ل / ش / Covalence.

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


بعد تغيير هذه الإعدادات ، تغيرت مدة التحويل البرمجي لمدة 10 دقائق إلى ~ 10 ثوانٍ.

الخطوة 1:

الإعدادات (ctrl + Alt + S) ->

البناء والتنفيذ والنشر ->

مترجم ->

اكتب " --offline " في مربع خيارات سطر الأوامر.

الخطوة 2:

تحقق من مربع الاختيار "ترجمة الوحدات المستقلة بالتوازي".

& انقر فوق تطبيق -> موافق

المرجع - https://www.sundoginteractive.com/blog/speed-up-gradle-in-android-studio

العيب:

لن تتمكن من سحب أحدث الإصدارات من التبعيات المحددة في ملف build.gradle الخاص بك. يتم تشغيله بشكل أسرع لأنه يستخدم لقطة مخزنة لتلك المكتبات المستوردة.

ملاحظة هامة : عندما تقوم بنشر التطبيق ، قم بإزالة هذه الإعدادات وبناءها باستخدام أحدث الإصدارات من التبعيات.


لا يزال التغيير التافه (إلى xor Resoruce) يستغرق 10 دقائق . كما يقول rivare في إجابته ، فإن بناء سطر الأوامر هو mutch أسرع (أخذ هذا إلى 15 ثانية ).
فيما يلي بعض الخطوات لجعل على الأقل إنشاء سريع من سطر الأوامر لـ Windows.

  1. انتقل إلى جذر المشاريع الخاصة بك (حيث يكون gradlew.bat):

    cd c: \ android \ MaskActivity

  2. تنفيذ البنية :

    تجمع gdledebug

  3. قم بإلغاء تثبيت ملف apk من الهاتف مباشرة (قم بسحبه لإلغاء التثبيت).

  4. عند الانتهاء من الإنشاء ، قم بقتل عملية BIG java باستخدام Windows Task Manager.

أو إذا كان لديك أدوات unix على جهاز Windows الخاص بك:

ps

تظهر كلمة "pid":

kill -9 <pid>
  1. الآن قم بتثبيت ملف apk الخاص بك:

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


لقد اشتريت مؤخرًا قرصًا صلبًا جديدًا وانتقلت من نظام ويندوز إلى نظام لينكس. لقد أصبحت أوقات البناء الآن أسرع من حيث الحجم ، ولم تعد مزعجة.

على الرغم من أنه لا يجيب على سؤالك مباشرة عن سبب كونه أبطأ من الكسوف ، فإنه يدل على أن العملية محددة بالقرص وأن الترقية إلى SSD قد تكون حل (مكلف إلى حد ما). أظن أنه سيكون هناك أشخاص يذهبون إلى هذه المسألة وينتهي بهم الأمر هنا ، والذين قد يقدرون تجربتي.


مجرد محاولة هذا أولا. إنها تجربتي الشخصية.

كان لي نفس المشكلة. ما قمت به هو تعطيل مكافحة الفيروسات بشكل دائم (Mine was Avast Security 2015). فقط بعد تعطيل مكافحة الفيروسات ، ذهب الشيء بشكل جيد. الانتهاء من الخمول بنجاح. من الآن في غضون ثوان يتم الانتهاء من غراغ (فقط أخذ 5-10 ثواني).


مجرد نصيحة أخرى لتحسين الأداء:

يتضمن Android Studio 3.0 مترجم DEX جديدًا يسمى D8.

"يعمل برنامج التحويل البرمجي لـ 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.html

PS. إنها تدل على وقت بنائي بنحو 30٪.


منجم محلل مع

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

ذهبت بُنى Gradle من 8 دقائق إلى 3 ثوانٍ.


هذا الإعداد سريع للغاية بالنسبة لي (حوالي 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 procesadores lógicos
  • إلى x64
  • مايكروسوفت ويندوز 7 بروفيشنال
  • (ذاكرة الوصول العشوائي) 16،0 غيغابايت

ملفات المشروع
- كل موجود في HD المحلي


يرجى اتباع الخطوات التالية.

  1. تمكين الوضع دون اتصال: الرجاء التحقق من شاشة الطباعة أدناه.

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

  2. تمكين التشغيل الفوري: يرجى التحقق من شاشة الطباعة أدناه.

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

    إذا كنت تريد معرفة المزيد حول التشغيل الفوري ، فيرجى زيارة موقع مطور برامج Android.


يمكنك تجاهل فحوصات التحديث إلى التاريخ.

بالنسبة لنظام التشغيل Windows الذي يعمل بنظام Android Studio 1.5: انتقل إلى File -> Settings -> Build, Execution, Deployment -> Build tools -> Gradle -> Check Offline work (as shown in image)

أسفل من ~ 30 + ثانية إلى ~ 3 ثانية


يمكنك محاولة فتح قائمة Gradle على الجانب الأيمن من الاستوديو ، وتجميع الوحدات التي قمت بتغييرها فقط ، ثم تشغيل أمر التثبيت. عند الضغط على تشغيل فإنه يجمع كل شيء بغض النظر عن أي تغييرات قد قمت بها إلى رمز يتم تجميعها


تسريع بناء Gradle في Android Studio 3.0

هل شعرت أبدًا أنك تنتظر اكتمال الإنشاءات في Android Studio لمدة دقائق؟ أنا أيضًا. وانها مزعجة جدا. لحسن الحظ ، هناك بعض الطرق التي يمكنك استخدامها لتحسين ذلك. يستخدم Android Gradle للبناء. الإصدار الأحدث هو 2.14.1 لديه زيادة كبيرة في الأداء مقارنة بالإصدارات السابقة (انظر ملاحظات الإصدار للحصول على التفاصيل).

الخطوة 1: تحديث إصدار Gradle أسهل طريقة لتحقيق ذلك هي الانتقال إلى: فتح إعدادات الوحدة النمطية (مشروعك)> بنية المشروع

تحديث

التغيير إلى إصدار Gradle: 4.1 والتغيير إلى إصدار Android Plugin الإصدار: 3.0.0

تنزيل توزيع إصدار Gradle من https://services.gradle.org/distributions/gradle-3.1-all.zip ونسخه إلى مجلد Gradle:

الخطوة الأخيرة هي إضافة النص الخاص بك في الإعدادات> Gradle

لا تنس النقر على تطبيق لحفظ التغييرات.

الخطوة 2: تمكين الوضع "غير متصل" ، "الخفي" و "البناء المتوازي" للمشروع "وضع دون اتصال" يخبر Gradle تجاهل التحويلات التحديث إلى التاريخ. يطلب Gradle من التبعيات في كل مرة ، وجعل هذا الخيار يجعله يستخدم فقط ما هو موجود بالفعل على الجهاز من أجل التبعيات. انتقل إلى Gradle من إعداد استوديو android وانقر في مربع العمل دون اتصال.

  1. انتقل إلى مترجم من إعداد استوديو android وأضف "- دون اتصال" في مربع سطر الأوامر ثم انقر فوق ترجمة وحدات مستقلة في نفس الوقت.

الخطوة التالية هي تمكين الخفي Gradle والبناء المتوازي لمشروعك. سوف تتسبب البنى المتوازية في مشاريعك مع وحدات متعددة (بنى متعددة المشاريع في Gradle) ليتم بناؤها بالتوازي ، مما سيجعل المشاريع الكبيرة أو المبنية بشكل أسرع.

يمكن تمكين هذه الإعدادات من خلال تعديل ملف يسمى gradle.properties في دليل البرامج النصية لـ Gradle (أي ، ~ / .gldle / 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: تمكين dexign التزايدي وتغيير إعدادات الذاكرة يمكنك تسريع البنيات الخاصة بك عن طريق تشغيل dexing المتزايد. في ملف البناء الخاص بالوحدة النمطية الخاصة بك:

أضف هذا الخيار إلى كتلة 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 للحصول على التفاصيل.

الخطوة 4: تعطيل برنامج مكافحة الفيروسات اعتبر لاستثناء ملفات المشروع وذاكرة التخزين المؤقت من مسح مكافحة الفيروسات. ومن الواضح أن هذا هو المقايضة مع الأمن. ولكن إذا قمت بالتبديل بين الفروع كثيرًا ، فستقوم مكافحة الفيروسات بإعادة فحص الملفات قبل السماح باستخدام عملية Gradle لاستخدامها ، مما يؤدي إلى إبطاء وقت الإنشاء (خاصةً مشروع مزامنة Android Studio مع ملفات التجديف وفهرسة المهام). قياس وقت البناء ومعالجة وحدة المعالجة المركزية مع وبدون تمكين مكافحة الفيروسات لمعرفة ما إذا كان مرتبطًا. آمل أن يساعد هذا. اترك تعليقًا إذا كان لديك أي سؤال أو بعض النصائح الأخرى لتحسين أداء الإنشاء.

رابط مفيد





build.gradle