繁体   English   中英

在Android Studio中包含Java模块作为依赖项时错误的Java编译器

[英]Wrong Java Compiler When Including a Java Module as Dependency in Android Studio

我的Android Studio项目中有一个java模块,它是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

经过一些阅读后,我可以看到它与Android Studio正在使用的Java编译器有关。 但是我看不到改变它使用的编译器的方法。

我试图在我的Android模块中包含的Java模块是我使用Android Studio通过文件>新模块> Java模块创建的模块,所以我看不到任何我可以做出选择的选项?

任何想法都会很棒。

所以我在这篇博客文章中找到了解决方案。

诀窍在于您的Java库模块的build.gradle文件,您需要包含以下内容。

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

这将有效。

在较新版本的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 Byte代码版本:文件 - >其他设置 - >默认设置。

项目字节码版本

3)显式选择JDK环境:文件 - >项目结构 - > SDK位置,并将其设置为JDK 7文件夹。

显式JDK选择

- 更新:使用新的Android Studio 1.2.x,他们更改了您可以选择Java byteCode版本的位置:File-> Other Settings-> Default Settings-> Build,Executions Enviromnent-> Compiler。

在此输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM