Расшифровка файла jar, скомпилированного JDK 6, дает волшебную ошибку файла плохого класса

Я пытаюсь расшифровать файл jar, используя следующую команду:

dx --dex --output=classes.dex JAR_file.jar

Это дает мне следующие ошибки:

    trouble processing:
    bad class file magic (cafebabe) or version (0033.0000)
    .....................etc

При поиске я обнаружил, что это те же самые ошибки, которые появляются в этом вопрос

Да, я компилировал свой проект с помощью JDK 1.7. Итак, я скачал JDK 1.6 и изменил настройки своего eclipse, чтобы он использовал JDK 1.6.

Я сделал это: Window- > Preferences- > Compiler, а затем установил уровень компиляции компилятора на 1.6. Наконец, я настроил компилятор так, чтобы он использовал JRE6, который я скачал. Я нажал ОК. Я попытался снова запустить свой проект и сгенерировал файл jar.

Когда я снова запускаю команду для индексации этого файла jar. Он все еще показывает те же ошибки. Что мне не хватает?

Примечание. Файл jar представляет собой пакет, который я создал в своем затмении как проект «Плагин». Вот снимок проекта:

введите здесь описание изображения

В вопросе, на который я ссылаюсь, принятый ответ говорит, что если у вас все еще есть та же проблема, вы должны убедиться, что каждый отдельный класс скомпилирован правильно. Что это значит? Я пытался скомпилировать снова и снова, но я все еще получаю те же ошибки.


person Traveling Salesman    schedule 31.07.2013    source источник


Ответы (2)


Если вы посмотрите в Proguard.bat (Android SDK\tools\proguard\bin), то найдете следующую строку:

call %java_exe% -jar "%PROGUARD_HOME%"\lib\proguard.jar %*

Замените его следующим:

call %java_exe% -jar "%PROGUARD_HOME%"\lib\proguard.jar %1 %2 %3 %4 %5 %6 %7 %8 %9

Упоминается здесь

person Adam Johns    schedule 31.07.2013
comment
Вот что у меня есть в моем Proguard.bat. Это не совсем то же самое, что вы упомянули. Я чувствую, что это важный файл, поэтому мне нужно точное совпадение и точная замена. @ECHO OFF REM Сценарий запуска для ProGuard — бесплатный сжиматель файлов классов, оптимизатор, обфускатор REM и преверификатор для байт-кода Java. REM REM Примечание: при передаче имен файлов, содержащих пробелы, в этот скрипт, REM вам нужно будет добавить вокруг них экранированные кавычки, например. REM \C:/My Directory/My File.txt\ ЕСЛИ СУЩЕСТВУЕТ %PROGUARD_HOME% GOTO home SET PROGUARD_HOME=.. :home java -jar %PROGUARD_HOME%\lib\proguard.jar %* - person Traveling Salesman; 31.07.2013
comment
Я заменил: -jar %PROGUARD_HOME%\lib\proguard.jar %* на: -jar %PROGUARD_HOME%\lib\proguard.jar %1 %2 %3 %4 %5 %6 %7 %8 %9, но когда я повторил команду, показал ту же ошибку. - person Traveling Salesman; 31.07.2013
comment
Я продолжу поиски и посмотрю, смогу ли я найти что-нибудь еще. - person Adam Johns; 31.07.2013
comment
Есть ли в вашем проекте какие-либо фреймворки с уровнем SDK 1.7? stackoverflow.com/questions/8748977/ - person Adam Johns; 31.07.2013
comment
Возможно. Хотя я не уверен. И я не знаю, как я могу проверить, есть ли у меня такие рамки или нет. Поэтому я ищу быстрое решение для всего. Но у меня есть хорошее предчувствие, что не все классы скомпилированы с помощью JDK 6. Кстати, на приложенной картинке видно, что я использую одну библиотеку, скомпилированную 1.7. Я обновил этот до 1.6. Но все же, это не сработало. я попробую больше. Спасибо за вашу помощь. Дайте мне знать, если вы что-нибудь выяснили. - person Traveling Salesman; 31.07.2013
comment
Я создал совершенно новый проект, преобразовал его в банку, расшифровал. Это сработало! - person Traveling Salesman; 31.07.2013

Я создал совершенно новый проект (после смены моего компилятора eclipse на JDK 1.6). Тогда индексация работала нормально.

person Traveling Salesman    schedule 31.07.2013