web-dev-qa-db-ja.com

dexローダーがdexを実行できません:メソッドIDが[0、0xffff]にありません:65536

アプリケーションを構築するiamこのエラーが発生しました

Dx警告:関連付けられたEnclosingMethod属性が付属していない匿名内部クラス(com.amazonaws.javax.xml.stream.xerces.util.SecuritySupport12 $ 4)のInnerClasses属性を無視します。このクラスは、おそらく最新の.classファイル形式を対象としないコンパイラによって生成されました。推奨される解決策は、最新のコンパイラを使用し、「-target」タイプのオプションを指定せずに、ソースからクラスを再コンパイルすることです。この警告を無視した結果、このクラスに対するリフレクティブ操作は、それが内部クラスであることを誤って示しますnot

Dexローダー] dexを実行できません:メソッドIDが[0、0xffff]にありません:65536 Dalvik形式への変換に失敗しました:dexを実行できません:メソッドIDが[0、0xffff]にありません:65536

11
user3230564

ビルドパスを確認します-> Javaビルドパス->注文とエクスポート]タブ->チェックを外しますAndroidプライベートライブラリ。

それでも機能しない場合は、次の行を追加します:dex.force.jumbo=trueからproject.propertiesファイル。

考えられる原因は、ビルドパスにある大きなサイズのjarファイルである可能性があります。

編集:これらの厄介な問題を取り除きたい場合は、EclipseがGoogleでサポートされなくなったため、これは非推奨になりました:use Android =スタジオでMultidexを有効にします。

53
Driss Bounouar

Driss Bounouarソリューションは実際にはプロジェクトの構築に役立ちますが、実装後にアプリケーションが一部の場所でクラッシュする可能性があり、実際には問題を抑制していると思います。コンパイル時間。

私がコンソールで得ていたエラーは:-

Dex Loader] Unable to execute dex: method ID not in [0, 0xffff]: 65536
Conversion to Dalvik format failed: Unable to execute dex: method ID not in [0, 0xffff]: 65536

[2014-11-08 15:51:58 - MLBPA] Dx warning: Ignoring InnerClasses attribute for an anonymous inner class
(jnamed$1) that doesn't come with an
associated EnclosingMethod attribute. This class was probably produced by a
compiler that did not target the modern .class file format. The recommended
solution is to recompile the class from source, using an up-to-date compiler
and without specifying any "-target" type options. The consequence of ignoring
this warning is that reflective operations on this class will incorrectly
indicate that it is *not* an inner class.
[2014-11-08 15:51:58 - MLBPA] Dx warning: Ignoring InnerClasses attribute for an anonymous inner class
(jnamed$2) that doesn't come with an
associated EnclosingMethod attribute. This class was probably produced by a
compiler that did not target the modern .class file format. The recommended
solution is to recompile the class from source, using an up-to-date compiler
and without specifying any "-target" type options. The consequence of ignoring
this warning is that reflective operations on this class will incorrectly
indicate that it is *not* an inner class.
[2014-11-08 15:51:58 - MLBPA] Dx warning: Ignoring InnerClasses attribute for an anonymous inner class
(jnamed$3) that doesn't come with an
associated EnclosingMethod attribute. This class was probably produced by a
compiler that did not target the modern .class file format. The recommended
solution is to recompile the class from source, using an up-to-date compiler
and without specifying any "-target" type options. The consequence of ignoring
this warning is that reflective operations on this class will incorrectly
indicate that it is *not* an inner class.
[2014-11-08 15:51:59 - MLBPA] Dx warning: Ignoring InnerClasses attribute for an anonymous inner class
(org.xbill.DNS.UDPClient$1) that doesn't come with an
associated EnclosingMethod attribute. This class was probably produced by a
compiler that did not target the modern .class file format. The recommended
solution is to recompile the class from source, using an up-to-date compiler
and without specifying any "-target" type options. The consequence of ignoring
this warning is that reflective operations on this class will incorrectly
indicate that it is *not* an inner class.

このトレースによると、すべてのプロジェクトを同じ最新のコンパイラで再コンパイルしようとしましたが、それでも成功しませんでした。

後でlatestgoogle Playサービス古いもので問題が修正されました。

私は数時間前にグーグルプレイサービスを更新し、その後このエラーが発生し始めました。

[〜#〜]編集[〜#〜]

実際の問題を理解するには、次を確認する必要があります 65Kを超えるメソッドを使用したアプリの構築 私たちの状況では、古いGoogle Play開発者サービスのメソッドの数が少なく、したがって、プロジェクトは正常にコンパイルされました。

簡単な説明

私たちのプロジェクト全体は、65Kメソッドの制限がある1つのdexファイルにコンパイルされます。しかし今、あなたはあなたのプロジェクトでmultidexファイルを有効にすることができます。これまでに利用可能なソリューションはGRADLE(Android Studio)でのみ機能しますが、Eclipseで機能させる方法は見つかりませんでした。

12
DeltaCap019

Google Play開発者サービスを使用しているときに、Eclipseでこの問題を解決するための代替手段を見つけました。 Eclipseでは、Android Studio(およびGradle)のようにmultidexを使用する方法がないように思われるため、これがEclipseのリグスで作業する唯一の方法のようです。

  1. google-play-service-libプロジェクトに参加する
  2. ライブラリに入る
  3. ファイルgoogle-play-services.jarを解凍します
  4. 解凍したフォルダーに移動し、不要なフォルダーをすべて削除します(つまり、Analyticsが必要な場合は、広告、ゲーム、マップ、ウォレット、ドライブなどを削除できます)。
  5. このようなフォルダー(必要なライブラリーのみが含まれている)をMANIFESTフォルダーと一緒に再度Zipします。
  6. このような新しいjarをプロジェクトで使用してください。
8
Ugo Chirico

同じ問題が発生しました。問題はgoogle-play-services_libプロジェクトにありました。それは多くの機能を含みます。この問題は、google-play-services_libの21以降のバージョンで修正されています。

Multi-dexの問題を修正するには、古いlibプロジェクトを完全に削除し、代わりにgoogle-play-services_lib_v_21以降を使用する必要があります。

たとえば、私はこれを使用しました: google-play-services

P.S.また、公式 google play setup docs 言うことを覚えておいてください:

開発ワークスペースにコピーしたライブラリのコピーを参照する必要があります。Android SDKディレクトリから直接ライブラリを参照しないでください。

4
Vitaliy A

このエラーが発生するのは、主にdalvik実行可能ファイルに制限があり、制限が65536、つまり2 ^ 16であるためです。

Androidアプリケーションのマルチデックス構成を有効にする必要があります。マルチデックスを有効にするには、次の手順に従います。

  1. メインモジュール(アプリ)のbuild.gradleファイルを編集します

     Android {
      defaultConfig {
        ...
       multiDexEnabled  true
     }
    }
    
    dependencies {
        ...
      compile 'com.Android.support:multidex:1.0.1'
    }
    
  2. これらの変更を処理するようにアプリケーションクラスに指示します。

    カスタムアプリケーションクラスを編集して、マルチデックスサポートを有効にすることができます。

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

    OR

    public class MyApplication extends MultiDexApplication{
    
    }
    

    OR

    AndroidManifest.xmlファイルを編集して、変更をアプリケーションタグに適用します

    <?xml version="1.0" encoding="utf-8"?>        
    <manifestxmlns:Android="http://schemas.Android.com/apk/res/Android"
    package="com.example.Android.multidex.myapplication">
       <application
         ...
         Android:name="Android.support.multidex.MultiDexApplication">
         ...
       </application>
    

APIレベル14以下には制限があります。アプリがAPIレベル14未満でコンパイルまたは実行されない場合があります。コンパイル中に、OutOfMemory例外が発生する可能性があります。これを解決するには、build.gradleに以下を追加します

dexOptions {
    jumboMode true
    javaMaxHeapSize "4g"
}
0
Srinivas

また、最近google play libsをバージョン29に更新しましたが、アプリが2 ^ 16の制限に達しました。私はそれが私のために働くことを知っていたバージョン26にダウングレードしました、そして実際にそれはあります。

Eclipseを使用した開発は現在かなり不安定になっているようです。そのため、インストールされているすべてのパッケージのすべてのバージョンを追跡することを強くお勧めします。

長期的な解決策は、Android Studioに切り替えることです。

0
Edo user1419293