web-dev-qa-db-ja.com

apkを構築できません:メソッド参照の数は64Kを超えることはできません

私はアプリのapkファイルをビルドしようとしましたが、次のエラーが表示されます。メソッド参照の数は64Kを超えることはできません。

エラーは次のとおりです。

エラー:.dexファイル内のメソッド参照の数は64Kを超えることはできません。 https://developer.Android.com/tools/building/multidex.html でこの問題を解決する方法を学ぶ

エラー:タスク ':app:transformClassesWithDexForDebug'の実行に失敗しました。

com.Android.build.api.transform.TransformException:com.Android.ide.common.process.ProcessException:Java.util.concurrent.ExecutionException:com.Android.ide.common.process.ProcessException:org.gradle.process。 internal.ExecException:プロセス 'command' C:\ Program Files\Java\jdk1.7.0_15\bin\Java.exe ''がゼロ以外の終了値2で終了しました

これは私のgradleファイルです、

apply plugin: 'com.Android.application'

Android {
compileSdkVersion 23
buildToolsVersion "23.0.3"

defaultConfig {
    applicationId "nikhilraghavendra.hopper"
    minSdkVersion 21
    targetSdkVersion 23
    versionCode 1
    versionName "1.0"
}
buildTypes {
    release {
        shrinkResources true
        minifyEnabled true
        useProguard true
        proguardFiles getDefaultProguardFile('proguard-Android.txt'),
                'proguard-rules.pro'
    }
}
packagingOptions {
    exclude 'META-INF/LICENSE'
    exclude 'META-INF/LICENSE-FIREBASE.txt'
    exclude 'META-INF/NOTICE'
}
}

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.Android.support:appcompat-v7:23.2.1'
compile 'com.Android.support:design:23.2.1'
compile 'com.google.Android.gms:play-services-identity:8.4.0'
compile 'com.firebase:firebase-client-Android:2.3.1'
compile 'com.Android.support:cardview-v7:23.2.1'
compile 'com.google.Android.gms:play-services:8.4.0'
}

Apkファイルをビルドして問題なく展開したいのですが、どうすればよいですか?

更新

私も次のことを試しました

apply plugin: 'com.Android.application'

Android {
compileSdkVersion 23
buildToolsVersion "23.0.3"

dexOptions {
    maxProcessCount = 4 // this is the default value
}

dataBinding{
    enabled = true
}

defaultConfig {
    applicationId "nikhilraghavendra.hopper"
    minSdkVersion 21
    targetSdkVersion 23
    resConfigs "en", "fr"
    versionCode 1
    versionName "1.0"
}
buildTypes {
    release {
        shrinkResources true
        minifyEnabled true
        useProguard true
        proguardFiles getDefaultProguardFile('proguard-Android.txt'),
                'proguard-rules.pro'
    }
    debug {
        minifyEnabled true
        useProguard false
    }
}
packagingOptions {
    exclude 'META-INF/LICENSE'
    exclude 'META-INF/LICENSE-FIREBASE.txt'
    exclude 'META-INF/NOTICE'
}
}

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.Android.support:appcompat-v7:23.2.1'
compile 'com.Android.support:design:23.2.1'
compile 'com.google.Android.gms:play-services-identity:8.4.0'
compile 'com.firebase:firebase-client-Android:2.3.1'
compile 'com.Android.support:cardview-v7:23.2.1'
compile 'com.google.Android.gms:play-services:8.4.0'
}

これはメッセージを生成しています:

エラー:タスク ':app:transformClassesWithNewClassShrinkerForDebug'の実行に失敗しました。

縮小中に見つかった警告は、-dontwarnまたは-ignorewarningsを使用して抑制してください。

これに対処して適切なapkを構築するにはどうすればよいですか?助けてください。

26
Android {
    compileSdkVersion 26
    buildToolsVersion "26.0.0"

    defaultConfig {
        applicationId "com.try.app"
        minSdkVersion 21
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        multiDexEnabled true
    }

ここに multiDexEnabled trueはあなたのためにゲームをするべきです

UPDATE:最新のAndroid versionをサポートするには
1。 minSdkVersion21以上に設定されている場合は、モジュールレベルのビルドでmultiDexEnabledをtrueに設定するだけです。上記のように、gradleファイル。
2。ただし、minSdkVersion20以下に設定されている場合、次のように上記の変更とともにmultidexサポートライブラリを使用する必要があります。

dependencies {
  compile 'com.Android.support:multidex:1.0.1'
}

上記のサポートライブラリの追加とは別に、この Link で説明されているように、アプリケーションクラスを変更する必要があります。

ベストプラクティス:
1。 proguardを使用して未使用のコードを削除します。
2。プロジェクトに不要な依存関係を追加しないでください。
3。オープンソースライブラリの限られた数のメソッドまたはクラスが必要な場合は、プロジェクト内のもののみを複製することをお勧めします。これらのメソッドまたはクラスを完全に制御できるだけでなく、プロガードがそれらに作用し、未使用のものがないためコード内のメソッド。

ソース: Android Developers-64Kメソッドカウントでアプリを構成

64
Mohammed Atif

Apkを構築できません:app .dexファイルに65,536を超えるメソッドがある場合、メソッド参照の数は64Kを超えることはできません。

65Kメソッドを超えるこれは、メソッドが65,536を超えるメソッドをカウントすることを意味します。修正する方法はいくつかあります。

1。プロジェクトの依存関係を減らして、必要な依存関係をgradleに入れます

私が別の開発者から発見したほとんどの問題は、このようなプロジェクトでGoogle Play Servicesを使用していることです。

 compile 'com.google.Android.gms:play‐services:8.4.0'

したがって、最良の方法は、Google Play Servicesで本当に使用したい依存関係のみを選択することです。

compile 'com.google.Android.gms:play‐services‐location:8.4.0'
compile 'com.google.Android.gms:play‐services‐maps:8.4.0'
compile 'com.google.Android.gms:play‐services‐ads:8.4.0'

2。SDKの最小バージョンを21以上に設定します

最小SDKを21に変更したときに機能したのはなぜですか?これは、Android 5.0以上では、Dalvikの代わりにMultiDexをサポートするART(Androidランタイム)が使用されているためです。ARTは65,536以上のメソッドをサポートできます。

。Proguardを使用して無駄な方法を減らす

4。MultiDexを使用

しかし、これらはMultiDexライブラリの制限です

•.dexファイルが大きすぎる場合、アプリの起動中にANRが発生する場合があります。

•最小SDKをバージョン14以降に定義する必要があります。

•MulitDexはより多くのメモリを使用し、割り当てメモリが制限を超えている場合、アプリの実行中にクラッシュする可能性があります。

•プロジェクトをビルドするとき、ビルド時間を長くします

30
Devraj Singh

これをdefaultConfigの中に入れてください:

multiDexEnabled true
4