有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java错误转换

这是我的身材。格拉德尔

apply plugin: 'com.安卓.application'

安卓 {
    compileSdkVersion 25
    buildToolsVersion "27.0.2"
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }
    defaultConfig {
        applicationId "com.example.user2.trafficmap"
        minSdkVersion 15
        targetSdkVersion 25
        versionCode 1
        versionName "1.1"
        testInstrumentationRunner "安卓.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-安卓.txt'), 'proguard-rules.pro'
        }
    }
}

repositories {
    mavenCentral()
    maven { url "https://maven.google.com" }
}

dependencies {

    sourceCompatibility = 1.7
    targetCompatibility = 1.7

    compile fileTree(include: ['*.jar'], dir: 'libs')
    安卓TestCompile('com.安卓.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.安卓.support', module: 'support-annotations'
    })
    compile group: 'io.nlopez.smartlocation', name: 'library', version: '3.3.1'

    compile 'com.安卓.support:appcompat-v7:25.3.1'
    compile 'com.google.安卓.gms:play-services-location:11.4.2'
    compile 'com.google.安卓.gms:play-services-base:11.4.2'
    compile 'com.google.安卓.gms:play-services-maps:11.4.2'
    compile 'com.github.arimorty:floatingsearchview:2.1.1'
    compile 'com.安卓.support.constraint:constraint-layout:1.0.2'
    compile ('com.schibstedspain.安卓:leku:3.6.2',{
        targetCompatibility = '1.8'
        sourceCompatibility = '1.8'
    })
    testCompile 'junit:junit:4.12'
}

我得到了这个错误

Error:Error converting bytecode to dex: Cause: Dex cannot parse version 52 byte code. This is caused by library dependencies that have been compiled using Java 8 or above. If you are using the 'java' gradle plugin in a library submodule add targetCompatibility = '1.7' sourceCompatibility = '1.7' to that submodule's build.gradle file.

我想将leku库添加到我的项目中,我遇到了这个问题 如何将目标和源兼容性添加到我的子模块


共 (2) 个答案

  1. # 1 楼答案

    备选案文1

    移动

    sourceCompatibility = 1.7
    targetCompatibility = 1.7
    

    dependencies之前


    备选案文2

    使用Android studio 3和java 8。更改构建工具

    classpath 'com.android.tools.build:gradle:3.0.0'
    

    android {
        compileSdkVersion 26
        buildToolsVersion "26.0.1"
    
        defaultConfig {
            // ...        
        }
        dexOptions {
            incremental true
        }
    
        compileOptions {
            sourceCompatibility JavaVersion.VERSION_1_8
            targetCompatibility JavaVersion.VERSION_1_8
        }
    }
    
  2. # 2 楼答案

    手动将应用程序本身设置为在java 7上运行时,无法添加使用source compat设置为java 8的库。意思是:

    compile ('com.schibstedspain.android:leku:3.6.2',{
        targetCompatibility = '1.8'
        sourceCompatibility = '1.8'
    })
    

    更改:

    compile ('com.schibstedspain.android:leku:3.6.2',{
        targetCompatibility = '1.7'
        sourceCompatibility = '1.7'
    })
    

    请注意,如果库本身是用Java8编译的,那么这很可能不起作用

    或者,使用Java 8编译应用程序:

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    

    如果您使用的是Android Studio<;你必须使用杰克。如果您使用的是Android Studio>;=3、不要用杰克。它是不需要的,而且不推荐使用

    至于错误本身:

    Error:Error converting bytecode to dex: Cause: Dex cannot parse version 52 byte code.

    字节码版本与Java版本相关

    This is caused by library dependencies that have been compiled using Java 8 or above.

    'com.schibstedspain.android:leku:3.6.2'依赖项

    If you are using the 'java' gradle plugin in a library submodule add targetCompatibility = '1.7' sourceCompatibility = '1.7' to that submodule's build.gradle file.

    即用Java 7而不是Java 8编译库

    由于这可能是由导入中的targetCompatibility部分引起的,因此将其更改为1.7应该可以解决这一问题。或者,在应用程序上使用Java8进行编译这样做不会丢失任何平台,它在(AFAIK)所有版本上都受支持。尽管有一些特定的Java8API,但它们只在Android的更高版本中可用。例如,在API 24之前未添加的流