Dex загрузчик не может выполнить dex: идентификатор метода не в [0, 0xffff]: 65536

iam, строя мое приложение, я получил эту ошибку

Предупреждение Dx: игнорирование атрибута InnerClasses для анонимного внутреннего класса (com.amazonaws.javax.xml.stream.xerces.util.SecuritySupport12 $4), который не поставляется с связанный атрибут EnclosingMethod. Этот класс, вероятно, который не предназначен для современного формата .class. Рекомендуемый решение состоит в том, чтобы перекомпилировать класс из источника, используя современный компилятор и без указания параметров типа "-target". Следствие игнорирования это предупреждение состоит в том, что рефлексивные операции над этим классом будут неверными что это не внутренний класс.

Dex Loader] Невозможно выполнить идентификатор метода dex: не в [0, 0xffff]: 65536 Не удалось выполнить преобразование в формат Dalvik: невозможно выполнить идентификатор метода dex: не в [0, 0xffff]: 65536

Ответ 1

Проверьте путь сборки → Путь сборки Java → вкладка "Заказ и экспорт" → снимите флажок "Частные Librairies" для Android.

Если он все еще не работает, добавьте следующую строку: dex.force.jumbo=true в файл project.properties.

Вероятная причина - это, возможно, большой размер jar в пути сборки.

Изменить: Это устарело, потому что Eclipse больше не поддерживается Google, если вы хотите избавиться от этих неприятных проблем: используйте Android Studio и включите Multidex.

Ответ 2

Решение 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.

В соответствии с этой трассировкой я попытался перекомпилировать все проекты с тем же самым и последним компилятором, но все же я не получал никакого успеха.

Позже, заменив последние сервисы Google Play, при этом старая проблема исправила мою проблему.

За несколько часов до этого я обновил мои сервисы google play и начал получать эту ошибку после.

ИЗМЕНИТЬ

Чтобы понять реальную проблему, вы должны посмотреть Создание приложений с более чем 65K-методами. В нашей ситуации похоже, что старые сервисы google Play имели меньшее число методов и, следовательно, проект успешно компилируется.

Краткий

Весь наш проект скомпилирован в один файл dex, который имеет предел 65K методов. Но теперь вы можете включить мультидексы в проекте. Решение, доступное до сих пор, будет работать только с GRADLE (Android Studio), я не нашел способа заставить его работать на Eclipse.

Ответ 3

Я просто нашел альтернативу для решения этой проблемы на Eclipse при использовании Служб Google Play. Потому что на Eclipse кажется, что нет возможности использовать multidex, как в Android Studio (и Gradle), теперь это единственный способ работать с Eclipse rigth сейчас.

  • зайдите в проект google-play-service-lib
  • перейти в libs
  • распакуйте файл google-play-services.jar
  • зайдите в распакованную папку и удалите все папки, которые вам не нужны (например, если вам нужна Google Analytics, вы можете удалить рекламу, игры, карты, кошелек, диск и т.д.).
  • zip снова такую ​​папку (которая теперь содержит только необходимые библиотеки) вместе с папкой MANIFEST
  • используйте такую ​​новую банку с вашим проектом.

Ответ 4

Истекшая проблема. Проблема заключалась в проекте google-play-services_lib. Он включает многие функции. Эта проблема исправлена ​​в 21 и более новых версиях Google-игра-services_lib.

Чтобы исправить проблему с несколькими деками, вы должны полностью удалить старый проект lib и использовать google-play-services_lib_v_21 или новее.

Например, я использовал этот: google-play-services.

P.S. Также имейте в виду, что официальные google play setup docs говорят:

Вы должны ссылаться на копию библиотеки, которую вы скопировали в рабочую область разработки - вы НЕ должны ссылаться на библиотеку непосредственно из каталога Android SDK.

Ответ 5

Я также недавно обновил игровые библиотеки google до версии 29, и мое приложение попало в лимит 2 ^ 16! Я понизился до версии 26, и я знал, что это сработало для меня, и это действительно так.

В настоящее время разработка с Eclipse стала довольно неустойчивой, поэтому очень важно отслеживать все версии всех установленных пакетов!

Решение в долгосрочной перспективе - перейти на Android Studio.

Ответ 6

Вы получаете эту ошибку главным образом потому, что существует ограничение на исполняемые файлы dalvik и, по-видимому, предел равен 65536, что составляет 2 ^ 16.

Вам нужно включить конфигурацию multi-dex для вашего приложения для Android. Чтобы включить multi-dex, выполните следующие действия:

  • Отредактируйте файл build.gradle вашего основного модуля (приложения)

     android {
      defaultConfig {
        ...
       multiDexEnabled  true
     }
    }
    
    dependencies {
        ...
      compile 'com.android.support:multidex:1.0.1'
    }
    
  • Сообщите вашему классу приложений эти изменения.

    Вы можете изменить свой собственный класс приложения, чтобы включить поддержку multi-dex.

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

    ИЛИ

    public class MyApplication extends MultiDexApplication{
    
    }
    

    ИЛИ

    Измените файл 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"
}