Gradleスピードアップ:毎日コーヒーを飲む時間を節約します.


前言
Android開発の同級生として、あなたの工事とコードが一定の規模に達したとき、コンパイル速度が遅すぎるという問題に遭遇したことがあると信じています.例:
コンパイルを待つ時間は、まるで1世紀が過ぎたようで、ありますか!
プログラム猿にとって、時間は特に貴重で、BUGを修正したり、機能を検証したりしたとき、コンパイル速度が遅すぎてあなたの考えを中断せざるを得ず、開発効率にも深刻な影響を与えます.
いわゆる、研削刀は薪を誤って切らないので、あなたの工事のコンパイル速度を減らして向上させることはすぐに始める価値のある重要な仕事です.
最適化方法
Gradleの公式のいくつかの最適化の提案
  • はできるだけ最新バージョンのGradleとJVMを使用します.これは最も簡単で直接的な方法です.Gradle開発チームはGradleバージョンを更新し続け、構築速度を最適化し、新しい特性を提供します.新しいバージョンのJVMを使用するのは、GradleがJVM上で実行されているため、新しいバージョンのJVMがパフォーマンスを向上させると、Gradleをより速く走ることができます.
  • Parallel execution、Gradleのtasksを並列に実行し、gradle.propertiesファイルに次の構成を追加します:
        org.gradle.parallel=true
    
  • Build Scanは、コンパイル速度の遅い問題を分析し、解決するのに役立つ良い診断ツールです.

  • 使用方法:Gradle構築プロジェクトで次のコマンドを実行します.
        ./gradlew build --scan 
    
    >       ,Build Scan       Gradle(4.3+)        ,     (4.3  )  Gradle                ,        :[Build Scan Plugin User Manual
    ](https://docs.gradle.com/build-scan-plugin/?&_ga=2.100043736.79666310.1541473383-2130798346.1527486300#getting_set_up)
    
  • 構成フェーズ
  • 不要なapply pluginを減らし、必要に応じて使用します.プラグインがすべてのモジュールで使用されるわけではない場合は、allprojects{}を使用しないでください.
  • は、構成段階において、IOオペレーションやネットワーク要求などの
  • のような時間のかかる作業を回避する.
  • 依存解析
  • 動的(2.+)バージョンとSNAPSHOTバージョンの依存ライブラリを削減します.通常、この方法の依存は、Gradleが遠隔倉庫に行って新しい変化があるかどうかを強制します.
  • 不必要および未使用の依存を回避する
  • .
  • タスク実行フェーズ
  • 増分構築、詳細は「in the user guide」をクリックしてください.

  • Daemon
  • は、旧バージョンのGradleでDaemon構成を開始し、3.0以降のGradleバージョンではデフォルトでサポートされています.
  • daemon’sのスタックサイズを調整します.デフォルトは1 GBです.大きくする必要がある場合は、gradle.propertiesで設定できます.
        org.gradle.jvmargs=-Xmx2048M
    
  • implementationの代わりにcompileを使用し、コンパイル時の依存項目を効果的に削減し、Gradle 3.4バージョン
  • にアップグレードする必要がある.
  • インクリメンタルコンパイルでは、変更の影響を受けたクラスのみを再コンパイルするために、依存関係を単一のクラスレベルに分析できます.インクリメンタルコンパイルはGradle 4.10以降のデフォルトコンパイルです.古いバージョンでは、
    tasks.withType(JavaCompile) {
        options.incremental = true
    }
    
  • のようにアクティブ化できます.
  • 分析レポートを使用して、コンパイルが完了した後、ローカルの分析レポートを生成できます.
    ./gradlew assembleDebug --profile
    
  • Androidの公式のいくつかの最適化の提案
  • 最新バージョンのツールを使用
  • Android Studio and SDK tools
  • The Android plugin for Gradle

  • 不要なリソースのコンパイルを回避します.たとえば、不要な言語のローカライズを回避するには、次の例に示すように、言語リソースとスクリーンアダプタを1つだけ指定できます.
        android {
          ...
          productFlavors {
            dev {
              ...
              // The following configuration limits the "dev" flavor to using
              // English stringresources and xxhdpi screen-density resources.
              resConfigs "en", "xxhdpi"
            }
            ...
          }
        }
    
  • オフラインモード、
    ![](https://user-gold-cdn.xitu.io/2018/11/6/166e8123654236ee?w=1584&h=506&f=png&s=74335)
    
  • オンデマンド構成
    ![](https://user-gold-cdn.xitu.io/2018/11/6/166e819b7cbbde69?w=1766&h=758&f=png&s=189902)
    
    >    :        Gradle 4.6   ,  `com.android.tools.build:gradle`     3.0.1    3.1.0,                   ,         Android Gradle         
    
    >    :     Android Studio    ,configuration on demand     
    
  • を開く.
  • WebP形式の画像を使用すると、構築時に圧縮する必要がなく、画像ファイルのサイズを効果的に削減できます.構築
  • を高速化できます.
  • PNG crunchingをオフにし、構築速度を速める自動画像圧縮を無効にすることで、Gradle 3.0以降はdebugの構築タイプでデフォルトでオフになっています.他のコンストラクションタイプを手動で構成する必要がある場合は、次の例を示します:
    android {
    
    buildTypes {
        release {
            // Disables PNG crunching for the release build type.
            crunchPngs false
        }
    }
    
    // If you're using an older version of the plugin, use the
    // following:
    // aaptOptions {
    // cruncherEnabled false
    // }
    }
  • Instant Run
    ![](https://user-gold-cdn.xitu.io/2018/11/6/166e823fa2f75df0?w=1178&h=432&f=png&s=65707)
    
  • をオン
    最後に一言
    実は、一部の学生はあまり重視しないで、あまり精力を使ってこれらを振り回したくないので、我慢したいと思っています.しかし、コンパイル回数が増えるにつれて、実際に浪費される時間は想像をはるかに超え、チームの生産性を向上させる観点から見ると、これは投入産出比がかなり高いことであり、本人が参加したプロジェクトを例にとると、最適化後は最適化前の構築時間より50%減少し、コーヒーを飲む時間が多くなるのは楽ですが、チーム全体が節約した時間は、code reviewすることができます.勉強もできるし、早く退勤もできるし、とにかく、構築を待ちながらぼんやりしているよりはましだ.
    リファレンスドキュメント
  • Optimize your build speed
  • Improving the Performance of Gradle Builds
  • How to decrease your Gradle build time by 65%?

  • 著者:yonglan.whl
    原文を読む
    本文は雲栖コミュニティのオリジナル内容で、許可を得ずに転載してはならない.