Libgdx Android, не удалось запустить проекты в режиме отладки по USB
Хорошо, я работал над несколькими демонстрационными проектами с libgdx, но в то время у меня не было устройства Android, поэтому я не смог их протестировать. Недавно я купил планшет и решил посмотреть, запускаются ли мои проекты на устройстве, подключенном через USB.
Я включил режим отладки USB, создал новый проект libgdx и протестировал. Оно работает. Так что проблема не в соединении, а в других проектах, которые я пытаюсь запустить.
Первый проект был написан во время чтения книги libgdx. Поскольку к тому времени, когда я впервые кодировал приложение, мне приходилось переустанавливать компьютер, моя версия для Android увеличивалась, и было трудно заставить его работать снова с новой версией. Так что это может быть источником проблемы. Запуск в качестве рабочего стола работает нормально, запуск в качестве Android вызывает следующие ошибки:
[2015-04-19 09:08:37 - CyberGlider-android] Предупреждение Dx: Игнорирование атрибута InnerClasses для анонимного внутреннего класса (com.sun.jna.win32.W32APIOptions$2), который не поставляется со связанным атрибутом EnclosingMethod. Этот класс, вероятно, был создан компилятором, который не предназначался для современного формата файла.class. Рекомендуемое решение - перекомпилировать класс из исходного кода с использованием современного компилятора и без указания параметров типа "-target". Следствием игнорирования этого предупреждения является то, что отражающие операции над этим классом будут неверно указывать, что это не внутренний класс.
Это дает мне 15 копий этого сообщения, потому что в основном проекте 15 классов. Я пытался очистить все проекты, но это не сработало. Тогда ошибки продолжаются с этим:
[2015-04-19 09:08:37 - CyberGlider-android] Проблемы с Dx при обработке "javax/xml/namespace/QName.class":
Неправильное или ошибочное использование базового класса (java.* Или javax.*), Когда не создается базовая библиотека.
Это часто происходит из-за непреднамеренного включения файла базовой библиотеки в проект вашего приложения при использовании IDE (такой как Eclipse). Если вы уверены, что не намеренно определяете основной класс, то это наиболее вероятное объяснение того, что происходит.
Однако на самом деле вы можете пытаться определить класс в основном пространстве имен, источник которого вы, возможно, взяли, например, из проекта виртуальной машины, отличной от Android. Это наверняка не будет работать. Как минимум, это ставит под угрозу совместимость вашего приложения с будущими версиями платформы. Это также часто сомнительной законности.
Если вы действительно намереваетесь создать базовую библиотеку, которая подходит только для создания полного дистрибутива виртуальной машины, а не для компиляции приложения, то используйте опцию "--core-library" для подавления этого сообщения об ошибке.
Если вы продолжаете использовать "--core-library", но на самом деле создаете приложение, то имейте в виду, что в какой-то момент ваше приложение все равно не удастся построить или запустить. Пожалуйста, будьте готовы к недовольным клиентам, которые обнаруживают, например, что ваше приложение перестает функционировать после обновления операционной системы. Вы будете виноваты в этой проблеме.
Если вы законно используете какой-то код, который находится в основном пакете, то самая простая и безопасная альтернатива - переупаковка этого кода. То есть переместите рассматриваемые классы в собственное пространство имен пакетов. Это означает, что они никогда не будут конфликтовать с основными классами системы. JarJar - это инструмент, который может помочь вам в этом деле. Если вы обнаружите, что не можете этого сделать, то это свидетельствует о том, что путь, по которому вы идете, в конечном итоге приведет к боли, страданию, печали и скорби.
[2015-04-19 09:08:37 - CyberGlider-android] Ошибка Dx 1; прерывание [2015-04-19 09:08:37 - CyberGlider-android] Преобразование в формат Dalvik завершилось ошибкой 1
Затем у меня также есть второе приложение, которое было запущено на моем новом установленном компьютере. Поэтому мне не пришлось менять версию андроида в процессе. Когда я пытался запустить приложение на устройстве Android, во всплывающих окнах появляются следующие ошибки:
Превышено необработанное исключение цикла событий.
Невозможно выполнить dex: превышен лимит накладных расходов GC.
Журнал консоли дает мне это
[2015-04-19 09:14:38 - Dex Loader] Невозможно выполнить dex: превышен лимит накладных расходов GC [2015-04-19 09:14:38 - PixelBoard_Launcher-android] Преобразование в формат Dalvik не выполнено: Невозможно выполнить dex: Превышен предел накладных расходов GC
И затмение дает мне ошибку нехватки памяти и просит закрыть себя.
Процесс запуска также занимает несколько минут.
Сначала я подумал, есть ли какие-то ограничения для запуска приложения в режиме отладки по USB. Возможно ли, что указанные выше приложения не работают в режиме USB, но если я соберу и зарегистрирую APK, это будет работать.
Иначе единственным решением будет перекодировать все с нуля. Добавляйте по одному классу за раз и посмотрите, что делает программу неудачной.
У кого-нибудь есть идея, с чего мне начать расследование?