web-dev-qa-db-ja.com

Androidビルドグラドルが遅すぎる(依存関係の解決)

私はAndroid St​​udio(私の現在のバージョン1.5)で2年間働いています。すべては問題ありませんでしたが、Canary(2.1 p5)をダウンロードすると、すべてがうまくいきませんでした。新しいプロジェクトを作成したり、プロジェクトを開いたり、新しいlibまたは依存関係を同期またはインポートしたりするたびに、gradleのビルドに時間がかかりすぎます-ほぼ20分

私は何もせず、カナリア版をダウンロードして実行しました。

症状:

  1. インターネットに接続したときに起こった
  2. 最初の遅延はオンですGradle:依存関係の解決 ':app:_debugCompile'
  3. ...
  4. 25分後にほぼ完成

インターネットを切断すると、gradleはできるだけ早く終了します


これらの方法でこれを修正しようとしました

  1. 私はgradleをオフライン作業に変更しました(うまくいきましたが、libsまたは依存関係をインポートしたいので、この方法は望ましくありません)
  2. gradle.propertiesに新しいファイル(ファイル名はC:\Users\username\.gradle)を作成し、これらの行を書き込みました

    org.gradle.parallel=true
    org.gradle.daemon=true
    
  3. そのバージョンを削除してから、古いバージョンをインストールしましたが、問題なく動作していました:(

  4. ファイアウォールを無効/有効にする

  5. アンチウイルスの無効化/有効化(Nod32)

  6. Windows OS(8.1)を再インストールします

  7. すべてのバージョンをダウンロードしました(1.0.0、...、1.5.1、2.0.0、2.1)

  8. プロキシを使用しました


システム情報

  • CPU:Intel Core i5
  • ラム:6.00 GB
  • OS:Windows 8.1 64ビット

build.gradle(Project:appName)

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.Android.tools.build:gradle:1.5.0'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

gradle.build(Module:app)

apply plugin: 'com.Android.application'

Android {
    compileSdkVersion 23
    buildToolsVersion "23.0.3"

    defaultConfig {
        applicationId "com.example.test.myapplication"
        minSdkVersion 14
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.Android.support:appcompat-v7:23.3.0'
}

ビルド後のGradleレポート

Dependencies                  Duration
All dependencies              14m3.43s
:app:_releaseCompile          3m30.96s
:app:_debugCompile            3m30.73s
:app:_debugApk                3m30.69s
:app:_releaseApk              3m30.62s
:classpath                    0.428s
:app:_debugAndroidTestCompile 0.001s
:app:_debugAndroidTestApk     0s
:app:_debugUnitTestApk        0s
:app:_debugUnitTestCompile    0s
:app:_releaseUnitTestApk      0s
:app:_releaseUnitTestCompile  0s
:app:releaseWearApp           0s
:app:wearApp                  0s

Android studio 2.0安定版のインストール後

  • 7:23:47 PM Gradle同期開始====> 8:13:21 PM Gradle同期完了
55

問題は解決しました !

2日間検索した後、解決策を得たので、同じ問題を抱えている可能性のあるすべての人々と共有したいと思います。問題は、gradleある国のセンターリポジトリに接続できないことです。新しいプロジェクトを作成するとき、またはインポートするとき、デフォルトでセンターリポジトリはjcenter()であり、新しい外部依存関係を構築、同期、または追加するときはいつでも、gradlehttps: //bintray.com/ できませんが、構築プロセスはjcenter()に接続するまで待機するため、このプロセスには時間がかかります(+30分)でも、新しい依存関係を追加することはできません。

ソリューション:

  1. 最新の安定バージョン(現在の2.0.0)を使用していることを確認してください
  2. Build.gradleでgradleバージョンが2.0.0であることを確認してください(classpath 'com.Android.tools.build:gradle:2.0.0'
  3. 最後のステップであり、最も重要なステップは、jcenter()mavenCentral()

そのため、新しい依存関係を簡単に追加し、3秒未満でプロジェクトを同期できます!

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.Android.tools.build:gradle:2.0.0'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        mavenCentral()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

楽しんで

77

Gradleビルドプロセスを最適化できます...

次のように、外部リポジトリに接続せずに強制的にビルドするために、グラドルをオフラインモードに設定してください:

enter image description hereenter image description here

私の仕事では、すべての接続がプロキシの背後にあり、ビルド時間が増加するため、これは非常に役立ちました。

これで十分でない場合は、Gradle> Experimentalでオプションのテストに時間をかけてください。一部のオプションではパフォーマンスが向上する場合があります。

enter image description here

5
Fabio Filho

上記の@Mehdi Jahed Maneshの回答に加えて。

次のようにorg.gradle.jvmargsプロパティを使用して、Gradle Daemon VMに割り当てられたメモリ量を1 Gbずつ、最小2 Gbに増やします。

org.gradle.jvmargs=-Xmx2048m
2
ayz4sci

Ismail Iqbalの答え のように、gradleをオフラインモードにするとうまくいきます。

  1. Android studioを使用している場合は、 Fabio Filhoの答え に従ってください。

  2. 私のようなコマンドラインを使用している場合は、試すことができます

gradlew assembleReleaseStaging(your task name) --offline
1
iplus26

認証を必要とするリポジトリを使用する場合、この問題は、単一の認証スキームのみを使用するようにgradleを構成することで解決できます。

repositories {
    maven {
        credentials {
            username INTERNAL_REPO_USERNAME
            password INTERNAL_REPO_PASSWORD
        }
        // here comes the important part
        authentication {
            basic(BasicAuthentication)
        }
        url INTERNAL_REPO_URL
    }
}

リポジトリに対して認証を行うと、gradleはあらゆる種類のスキームを使用して認証を試みることが判明しました。上記の設定により、gradleは基本認証のみを使用します。 ここ は利用可能なスキームの完全なリストです。

1
Balazs Banyai

最初のビルドが完了したら、gradle設定からオフラインモードを有効にしてみてください。そのため、連続するすべてのビルドは依存関係の解決を開始せず、代わりにキャッシュから取得します。新しい依存関係を追加すると、オフラインモードを無効にして再構築するよう求められます。 image of the gradle preview

1
Ismail Iqbal

私の場合、Java JDKの新しいバージョンをインストールすることで解決しました。新しいJDKをインストールした後、ASを開き、[ファイル]→[プロジェクト構造]→[SDKの場所]に移動し、JDKの場所をJava JDKの新しいバージョンの場所に変更します。次に、ファイアウォールの許可を求められます。パブリックを確認して適用します。 gradleを解決します。