2016-04-15 10 views
22

私のアプリ用の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: Process 'command 'C:\Program Files\Java\jdk1.7.0_15\bin\java.exe'' finished with non-zero exit value 2

これは何の問題もなく

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ファイルを作成し、それを展開したい、私はそれをどのように行うのですか、私のGradleファイルのですか?

エラー:実行は、タスクに失敗しました ':アプリ:transformClassesWithNewClassShrinkerForDebug' を

更新

は、私はまた、これは、メッセージを生産している

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

次のことを試してみました。

Warnings found during shrinking, please use -dontwarn or -ignorewarnings to suppress them.

どうすれば適切なAPKを作成できますか?助けてください。

+0

http://developer.android.com/tools/building/multidex.html – camelCaseCoder

+0

http://developer.android.com/tools/building/multidex .html Multidexを有効にする必要があります。上記のリンクに従ってください – Azahar

答えて

57
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ゲームを実行する必要があります。あなたのminSdkVersionが設定されている場合は、最新のAndroidバージョン
1をサポートするには以上に設定すると、multiDexEnabledをtrueに設定するだけですrモジュールレベルのbuild.gradleファイルを作成します。
2. minSdkVersionが以下に設定されている場合、次のようにしかし、あなたは上記の変更に伴いmultidexサポートライブラリを使用する必要があります。

別に
dependencies { 
    compile 'com.android.support:multidex:1.0.1' 
} 

サポートライブラリの上記以外から、あなたはこのLinkに記載されているように、Applicationクラスを変更する必要があります。

ベストプラクティス:
1. ProGuardの持つ未使用のコードを削除します。
2.不要な依存関係をプロジェクトに追加しないでください。
3.オープンソースライブラリの限定数のメソッドやクラスが必要な場合は、プロジェクト内のメソッドやクラスをクローンするだけでなく、プログアードがそれらを操作できるようにするだけでなく、あなたのコードに未使用のメソッドがありません。

出典:Android Developers - Configure Apps with 64K Method count

+0

それだけですか?ここで説明する残りの部分はどうですか? https://developer.android.com/studio/build/multidex.html –

+0

こんにちは@AndrewS、このことを指摘してくれてありがとうございます。この回答はしばらく更新されておらず、すぐに更新されます。ありがとうございます –

+0

あなたはあなたの答えをいつ更新しますか?私たち全員があなたのアップデートを待っています –

4

あなたdefaultConfig内にこれを入れて:

multiDexEnabled true 
29

APKを構築することができません:アプリの.dexファイルが65,536個を超えるメソッドを持っている場合、64Kが発生超えることができない方法を参照の数。

を必要としているのGradleでプロジェクト プット依存関係にある

1.削減の依存関係:

は方法が異なるそれを修正する方法があります以上65,536メソッド を数える意味65K方法突破します

他の開発者から見つかった問題のほとんどは、このようなプロジェクトでGoogle Playサービスを使用しています。グーグルで

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

ので、最善の方法を選んでいるだけで、いくつかの依存関係は、あなたが本当にそれを使用 するサービスを再生します。 21以上

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を働いていましたか? Android 5.0以降では、Dalvikの代わりにMultiDexをサポートするART (Android Runtime)が使用されています。したがって、ARTは65,536以上の メソッドをサポートできます。

3. ProGuardの無用な方法を削減する

4. MultiDex

しかし、これらは.dex場合はアプリが起動中に月•MultiDexライブラリ

の制限がANRを発生していますファイルが大きすぎます。

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

•MulitDexはより多くのメモリを使用し、割り当てメモリが制限を超えている場合、アプリケーションの実行中にクラッシュする可能性があります。プロジェクトをビルドするとき

•より多くの時間を構築しましょう

+0

この説明に従ってあなたのGoogleサービスの依存関係の人と一緒に遊んでいけない。もしあなたが働いているシステムを持っていれば、私のgradleは今すぐ下がっています。( – Sam

+0

Upvoted。これはmultidexの計算にはどんな意味がありますか?縮んでも同様に動作します。https://developers.google.com/android/guides/設定ここでは分割されたサービスの一覧を示します。 – CodeToLife

関連する問題