Подтвердить что ты не робот

Неверный компилятор Java при включении Java-модуля в качестве зависимости в Android Studio

У меня есть java-модуль в моем проекте Android Studio, который является зависимостью от модуля Android. У меня возникают проблемы с сборкой со следующим исключением.

Error:Execution failed for task ':myApplication:preDexDebug'.
> com.android.ide.common.internal.LoggedErrorException: Failed to run command:
    /Applications/Android Studio.app/sdk/build-tools/android-4.4W/dx --dex --output ~/myapplication-app-android/dev/biketracks-app-android/bikeTracks/build/intermediates/pre-dexed/debug/coreUtilities-6ee7e0aafa5a6db72b2acb078f065e51c43124c2.jar ~/myapplication-app-android/dev/myapplication-app-android/libs/coreUtilities/build/libs/coreUtilities.jar
  Error Code:
    1
  Output:
    UNEXPECTED TOP-LEVEL EXCEPTION:
    com.android.dx.cf.iface.ParseException: bad class file magic (cafebabe) or version (0034.0000)
        at com.android.dx.cf.direct.DirectClassFile.parse0(DirectClassFile.java:472)
        at com.android.dx.cf.direct.DirectClassFile.parse(DirectClassFile.java:406)
        at com.android.dx.cf.direct.DirectClassFile.parseToInterfacesIfNecessary(DirectClassFile.java:388)
        at com.android.dx.cf.direct.DirectClassFile.getMagic(DirectClassFile.java:251)
        at com.android.dx.command.dexer.Main.processClass(Main.java:665)
        at com.android.dx.command.dexer.Main.processFileBytes(Main.java:634)
        at com.android.dx.command.dexer.Main.access$600(Main.java:78)
        at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:572)
        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:596)
        at com.android.dx.command.dexer.Main.processAllFiles(Main.java:498)
        at com.android.dx.command.dexer.Main.runMonoDex(Main.java:264)
        at com.android.dx.command.dexer.Main.run(Main.java:230)
        at com.android.dx.command.dexer.Main.main(Main.java:199)
        at com.android.dx.command.Main.main(Main.java:103)
    ...while parsing com/corecoders/coreutilities/GPSUtils.class
    1 error; aborting

После некоторого чтения я вижу, что это как-то связано с компилятором Java, который использует Android Studio. Однако я не вижу способа изменить, какой компилятор он использует.

Модуль Java, который я пытаюсь включить в мой модуль Android, - это тот, который я создал с помощью Android Studio, выбрав File > New Module > Java Module, поэтому я не вижу никакой опции, которую я мог бы сделать иначе?

Любые идеи были бы замечательными.

4b9b3361

Ответ 1

Итак, я нашел решение в этом сообщении .

Уловка в файле build.gradle модуля библиотеки Java должна включать следующее.

apply plugin: 'java'
sourceCompatibility = 1.6
targetCompatibility = 1.6

Затем это будет работать.

Ответ 2

Похоже, что в новых версиях Gradle/Android Studio все изменилось, поэтому вышеупомянутое решение о выборе исходной совместимости может оказаться недостаточным. В частности, для сложных проектов, в которых есть множество модулей, которые используют больше, чем простой плагин для Android (я видел следующие три плагина, используемые для модулей одного и того же проекта: "android", "java" и "android-library" )

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

1) Для модулей, которые применяют плагин: 'android', выберите совместимость источника внутри вашего build.gradle:

android {

      //... other sections.
compileOptions {

        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }
}

2) Выберите вариант "Версия байта проекта": Файл → Другие настройки → Настройки по умолчанию.

project bytecode version

3) Явно выберите среду JDK: Файл → Структура проекта → местоположение SDK и установите его в папку JDK 7.

explicit JDK selection

- Обновление: с новой версией Android Studio 1.2.x они изменили местоположение, где вы можете выбрать версию Java byteCode для следующего: File- > Other Settings- > Default Settings- > Build, Executions Enviromnent- > Compiler.

enter image description here