web-dev-qa-db-ja.com

ASを1.0に更新した後、プロジェクトで「[0、0xffff]にメソッドIDがありません:65536」エラーを取得する

Android Studioを最新バージョンに更新し、「プロジェクトを修正する」などを許可しました-しかし、今では私のプロジェクトはコンパイルされず、

 FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:dexDebug'.
> com.Android.ide.common.internal.LoggedErrorException: Failed to run command:
    D:\VGA\AndroidStudio\sdk\build-tools\21.1.1\dx.bat --dex --no-optimize --output D:\VGA\Projects\Sales-App\Android-Project\svn\Android\app\build\intermediates\dex\debug --input-list=D:\VGA\Projects\Sales-App\Android-Project\svn\Android\app\build\intermediates\tmp\dex\debug\inputList.txt
Error Code:
    2
Output:

    UNEXPECTED TOP-LEVEL EXCEPTION:
    com.Android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536
        at com.Android.dx.merge.DexMerger$6.updateIndex(DexMerger.Java:502)
        at com.Android.dx.merge.DexMerger$IdMerger.mergeSorted(DexMerger.Java:277)
        at com.Android.dx.merge.DexMerger.mergeMethodIds(DexMerger.Java:491)
        at com.Android.dx.merge.DexMerger.mergeDexes(DexMerger.Java:168)
        at com.Android.dx.merge.DexMerger.merge(DexMerger.Java:189)
        at com.Android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.Java:454)
        at com.Android.dx.command.dexer.Main.runMonoDex(Main.Java:302)
        at com.Android.dx.command.dexer.Main.run(Main.Java:245)
        at com.Android.dx.command.dexer.Main.main(Main.Java:214)
        at com.Android.dx.command.Main.main(Main.Java:106)

ただし、これはマルチデックスだけでは解決されません。これを追加したとき:

defaultConfig {
    ...
    multiDexEnabled = true
}

これが起こる

D:\VGA\AndroidStudio\sdk\build-tools\21.1.1\dx.bat --dex --no-optimize --multi-dex --main-dex-list D:\VGA\Projects\Sales-App\Android-Project\svn\Android\app\build\intermediates\multi-dex\debug\maindexlist.txt --output D:\VGA\Projects\Sales-App\Android-Project\svn\Android\app\build\intermediates\dex\debug --input-list=D:\VGA\Projects\Sales-App\Android-Project\svn\Android\app\build\intermediates\tmp\dex\debug\inputList.txt

エラーコード:3出力:

UNEXPECTED TOP-LEVEL ERROR:
Java.lang.OutOfMemoryError: GC overhead limit exceeded
    at com.Android.dx.cf.code.ConcreteMethod.makeSourcePosistion(ConcreteMethod.Java:254)
    at com.Android.dx.cf.code.RopperMachine.run(RopperMachine.Java:306)
    at com.Android.dx.cf.code.Simulator$SimVisitor.visitLocal(Simulator.Java:612)
    at com.Android.dx.cf.code.BytecodeArray.parseInstruction(BytecodeArray.Java:367)
    at com.Android.dx.cf.code.Simulator.simulate(Simulator.Java:94)
    at com.Android.dx.cf.code.Ropper.processBlock(Ropper.Java:787)
    at com.Android.dx.cf.code.Ropper.doit(Ropper.Java:742)
    at com.Android.dx.cf.code.Ropper.convert(Ropper.Java:349)
    at com.Android.dx.dex.cf.CfTranslator.processMethods(CfTranslator.Java:280)
    at com.Android.dx.dex.cf.CfTranslator.translate0(CfTranslator.Java:137)
    at com.Android.dx.dex.cf.CfTranslator.translate(CfTranslator.Java:93)
    at com.Android.dx.command.dexer.Main.processClass(Main.Java:729)
    at com.Android.dx.command.dexer.Main.processFileBytes(Main.Java:673)
    at com.Android.dx.command.dexer.Main.access$300(Main.Java:82)
    at com.Android.dx.command.dexer.Main$1.processFileBytes(Main.Java:602)
    at com.Android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.Java:284)
    at com.Android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.Java:166)
    at com.Android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.Java:144)
    at com.Android.dx.command.dexer.Main.processOne(Main.Java:632)
    at com.Android.dx.command.dexer.Main.processAllFiles(Main.Java:505)
    at com.Android.dx.command.dexer.Main.runMultiDex(Main.Java:332)
    at com.Android.dx.command.dexer.Main.run(Main.Java:243)
    at com.Android.dx.command.dexer.Main.main(Main.Java:214)
    at com.Android.dx.command.Main.main(Main.Java:106)

ビルドツールを最新のものに変えてみた

Android {
    compileSdkVersion 21
    buildToolsVersion "21.1.1"

デフォルトでは、4.4W用のSDKを使用しているように見える20.0.0に変更されたが、これで私の問題は解決しなかった。

誰がここで何が間違っているのか知っていますか?

編集:

ビルドツールまたはコンパイルSDKを変更しても、問題は解決しませんでした。

アプリをマルチデックスプロジェクトに変換し、以下を追加する

Android {
    compileSdkVersion 21
    buildToolsVersion "21.1.1"

    defaultConfig {
        ...
        multiDexEnabled true
    }

...
    dexOptions {
        incremental true
        javaMaxHeapSize "4g"
    }
}

ビルドプロセスを修正しましたが、これはまだ「治療」にすぎないようですが、問題の修正ではありません。

これが関連しているかどうかはわかりませんが、これは私の依存関係リストです:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.Android.support:multidex:1.0.0'
    compile 'com.Android.support:appcompat-v7:21.0.2'
    compile 'com.squareup:otto:1.3.5'
    compile 'com.squareup.picasso:picasso:2.4.0'
    compile 'com.squareup.retrofit:retrofit:1.7.1'
    compile 'com.jakewharton:butterknife:6.0.0'
    compile 'com.madgag.spongycastle:core:1.51.0.0'
    compile 'com.madgag.spongycastle:prov:1.51.0.0'
    compile 'com.madgag.spongycastle:pkix:1.51.0.0'
    compile 'com.google.code.gson:gson:2.3'
    compile 'commons-io:commons-io:2.4'
    compile 'org.Apache.httpcomponents:httpclient-Android:4.3.5'
    compile 'com.squareup.dagger:dagger:1.2.2'
    compile 'com.squareup.dagger:dagger-compiler:1.2.2'
    compile('com.googlecode.json-simple:json-simple:1.1.1') {
        exclude module: 'junit'
    }
    compile 'com.google.Android.gms:play-services:6.5.87'
}

それ以降の唯一の新しい依存関係は、最後の行でした https://developer.Android.com/google/gcm/client.html に従って追加したので、問題の原因。

EDIT2:

はい、それが問題の原因でした。必要に応じてGoogle Cloud Messaging、この依存関係を http://developer.Android.com/google/play-services/setup.html#split に従ってベースに置き換えました。

compile 'com.google.Android.gms:play-services-base:6.5.87'

そしてそれは問題を修正しました。お手伝いありがとう。

EDIT3:

プレイサービス7.0.0以降、GCMは

compile 'com.google.Android.gms:play-services-gcm:7.0.0'

EDIT4:

Playサービスが7.3.0に更新されました。ここで最新バージョンを確認してください: http://developer.Android.com/google/play-services/setup.html#split

27
EpicPandaForce

このエラーは、アプリの最大メソッド数に達したことを意味します。これには、プロジェクトに使用するライブラリが含まれます。

この問題に取り組むには2つの方法があります。

  1. 本当に必要ないサードパーティのライブラリを取り除きます。メソッドカウントに大きく寄与する可能性のあるGoogle Playサービスを使用する場合。幸いなことに、最新のplay-servicesのリリース時点で フレームワークの一部のみを含めることが可能です
  2. アプリケーションに multi dex setup を使用します。
20

私はこれらの問題を段階的に廃止しており、私の場合、これらのリンクを使用してそのエラーをうまく克服しています.. !!!

DEX 64kの制限はもう問題ではありません、ほとんど

それをまとめると、multidexサポートを追加します:

の場合には

_UNEXPECTED TOP-LEVEL EXCEPTION:

com.Android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536 
   at com.Android.dx.merge.DexMerger$6.updateIndex(DexMerger.Java:502) 
   at com.Android.dx.merge.DexMerger$IdMerger.mergeSorted(DexMerger.Java:277) 
   at com.Android.dx.merge.DexMerger.mergeMethodIds(DexMerger.Java:491) 
   at com.Android.dx.merge.DexMerger.mergeDexes(DexMerger.Java:168) 
   at com.Android.dx.merge.DexMerger.merge(DexMerger.Java:189) 
   at com.Android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.Java:454) 
   at com.Android.dx.command.dexer.Main.runMonoDex(Main.Java:302) 
   at com.Android.dx.command.dexer.Main.run(Main.Java:245) 
   at com.Android.dx.command.dexer.Main.main(Main.Java:214) 
   at com.Android.dx.command.Main.main(Main.Java:106)
_

Googleは、MultiDexサポートライブラリの形式でこのための公式ソリューションをリリースすることを決定しました。

_dependencies { 
... 
   compile 'com.Android.support:multidex:' 
   ... 
}
_

次に、gradle構成のbuildTypeまたはproductFlavorセクションでmultiDexEnabledフラグを設定して、マルチデックスを有効にします。

_defaultConfig { 
   ... 
multiDexEnabled true 
... 
}
_

次に、プロジェクトに応じて、3つのオプションがあります。

独自のApplicationクラスを作成していない場合は、Android.support.multidex.MultiDexApplicationをAndroidManifest.xmlでアプリケーションクラスとして宣言するだけです

_   .... 
   Android:name="Android.support.multidex.MultiDexApplication" 
   ... 
_

すでに独自のアプリケーションクラスがある場合は、_Android.support.multidex.MultiDexApplication_ではなく_Android.app.Application_を拡張するようにします。

アプリケーションクラスが他のクラスを拡張していて、変更したくない、または変更できない場合は、以下に示すようにattachBaseContext()をオーバーライドします。

_public class MyApplication extends FooApplication { 
   @Override 
   protected void attachBaseContext(Context base) { 
      super.attachBaseContext(base); 
      MultiDex.install(this); 
   } 
}
_

コンパイルプロセスでメモリが不足する可能性があります。修正するには、「Android」クロージャーで次のdexオプションを設定します–

_dexOptions { 
   incremental true 
   javaMaxHeapSize "4g" 
}
_

Multidexの詳細については、こちらをご覧ください。 http://developer.Android.com/tools/building/multidex.html

これらのエラーの解決に役立つ別のリンク: Referance Link

15
Dhruv Raval