私はアプリの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を構築するにはどうすればよいですか?助けてください。
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。 minSdkVersion
が21以上に設定されている場合は、モジュールレベルのビルドでmultiDexEnabledをtrueに設定するだけです。上記のように、gradleファイル。
2。ただし、minSdkVersion
が20以下に設定されている場合、次のように上記の変更とともにmultidexサポートライブラリを使用する必要があります。
dependencies {
compile 'com.Android.support:multidex:1.0.1'
}
上記のサポートライブラリの追加とは別に、この Link で説明されているように、アプリケーションクラスを変更する必要があります。
ベストプラクティス:
1。 proguardを使用して未使用のコードを削除します。
2。プロジェクトに不要な依存関係を追加しないでください。
3。オープンソースライブラリの限られた数のメソッドまたはクラスが必要な場合は、プロジェクト内のもののみを複製することをお勧めします。これらのメソッドまたはクラスを完全に制御できるだけでなく、プロガードがそれらに作用し、未使用のものがないためコード内のメソッド。
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はより多くのメモリを使用し、割り当てメモリが制限を超えている場合、アプリの実行中にクラッシュする可能性があります。
•プロジェクトをビルドするとき、ビルド時間を長くします
これをdefaultConfig
の中に入れてください:
multiDexEnabled true