Android Studio构建正常,Gradle命令行失败。

3

我已将一个应用从Eclipse迁移到Android Studio,并实现了我需要的不同版本,并使其可以在Android Studio中工作。由于版本数量较多,我更喜欢使用命令行Gradle来构建它。然而,当我运行以下命令来构建我的发布APK时:

gradlew.bat assembleRelease

我得到了以下错误信息:
FAILURE: Build failed with an exception.

* Where:
Build file 'C:\whatever\build.gradle' line: 1

* What went wrong:
A problem occurred evaluating project ':MyCompany'.
> java.lang.UnsupportedClassVersionError: com/android/build/gradle/AppPlugin : Unsupported major.minor version 52.0

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

我已经使用了--stacktrace和--debug命令,但它并没有提供任何其他信息,除了指出错误出现在build.gradle文件的第一行:

apply plugin: 'com.android.application'

我根据其他stackoverflow回答尝试了以下步骤来解决这个错误:

  1. 升级到JavaVersion.VERSION_1_8
  2. 在build.gradle文件中添加了Jack(虽然它已被弃用,但对于1.8是必需的,并且会减缓一切速度?)
  3. 增加了堆内存的大小 (org.gradle.jvmargs=-Xmx4096m) 和dex (javaMaxHeapSize "4g")。

我正在运行 Android Studio 2.3.3

这是我的build.gradle文件。我只保留了一些flavors以节省空间,并重命名了一些内容以保护隐私。我保留了依赖关系,以防万一可能是问题所在?唯一的奇怪之处是我正在将APK重命名并推送到另一个文件夹,但当我直接从Android Studio运行发布版本时,这一切都可以正常工作。这是build.gradle文件的内容:

apply plugin: 'com.android.application'
apply plugin: 'io.fabric'

buildscript {
    repositories {
        maven { url 'https://maven.fabric.io/public' }
    }

    dependencies {
        classpath 'io.fabric.tools:gradle:1.+'
    }
}

repositories {
    maven { url 'https://maven.fabric.io/public' }
}


android {
    signingConfigs {
        config {
            keyAlias 'whatever'
            keyPassword 'imnotgoingtotellyou'
            storeFile file('C:/whereever/mycompany.keystore')
            storePassword 'yeps'
        }
    }
    compileSdkVersion 25
    buildToolsVersion '25.0.3'
    defaultConfig {
        jackOptions {
            enabled true
            additionalParameters('jack.incremental': 'true')
        }
        applicationId "com.mycompany.default"
        minSdkVersion 14
        targetSdkVersion 23
        versionCode 44
        versionName "2.1.44"
        compileOptions {
            sourceCompatibility JavaVersion.VERSION_1_8
            targetCompatibility JavaVersion.VERSION_1_8        }
        signingConfig signingConfigs.config
    }
    dexOptions {
        javaMaxHeapSize "4g"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
            signingConfig signingConfigs.config
        }
    }
    productFlavors.whenObjectAdded { flavor ->
        flavor.ext.set('directoryPath', '')
        flavor.ext.set('apkName', '')
    }
    productFlavors {

        Flavor1 {
            signingConfig signingConfigs.config
            directoryPath = 'flavor1'
        }

        Flavor2 {
            applicationId 'com.mycompany.flavor2'
            signingConfig signingConfigs.config
            directoryPath = 'flavor2'
        }

    applicationVariants.all { variant ->
        variant.outputs.each { output ->
            def path = "C:/AndroidBuilds/MyBuild.Build/" + variant.productFlavors[0].directoryPath + "/"
            logger.error("Path = " + path)
            def SEP = "-"
            def apkName = variant.productFlavors[0].apkName
            def flavor = variant.productFlavors[0].name
            if (apkName != '')
                flavor = apkName;
            def version = variant.versionCode
            def newApkName = path + version + SEP + flavor
            logger.error("newApkName = " + newApkName)
            output.outputFile = new File(newApkName + ".apk")
        }
    }
}

dependencies {
    compile project(':androidpdfview100')
    compile 'com.android.support:support-v13:25.3.1'
    compile 'com.google.code.gson:gson:2.7'
    compile 'joda-time:joda-time:2.5'
    compile 'com.google.android.gms:play-services-maps:11.0.4'
    compile files('libs/httpmime-4.2.5.jar')
    compile files('libs/itextg-5.4.4.jar')
    compile files('libs/js.jar')
    compile files('libs/logentries-android-2.1.1.jar')
    compile files('libs/universal-image-loader-1.8.6.jar')
    compile files('libs/xmlworker-5.4.4.jar')
    compile files('libs/zbar.jar')
    compile('com.crashlytics.sdk.android:crashlytics:2.6.8@aar') {
        transitive = true;
    }
}

更新

项目结构如下:

这是我从Eclipse迁移代码时,Android Studio自动生成的:

enter image description here

当你深入到App本身时,它看起来像这样:

enter image description here


项目的结构是什么,命令从哪里运行?顺便说一句,使用非静态版本有点可怕。过一段时间后,由于API可能会更改,它可能会停止工作。 - LazerBanana
我已经添加了项目结构(出于安全原因更改产品名称等)。至于非静态版本,我想你指的是面料参考 - 那是由面料插件生成的,不是我做的。在以下链接中,建议保持这种方式:https://github.com/twitter/twitter-kit-android/issues/42。但我不认为这是失败的原因(在IDE中它可以工作)。 - Stephen McCormick
3个回答

8

如果将来有人遇到此问题,请确保您的命令行构建中的JAVA_HOME设置与Android Studio使用的版本相同。例如,JDK v8:

JAVA_HOME=C:\Program Files\Java\jdk1.8.0_112

或者你的1.8 JDK所在的地方。它很大且占用内存,但这是解决构建错误的唯一方法。我不建议使用1.8在Android Studio中构建,因为它似乎需要Jack,而这只会变得非常缓慢。可悲的是,它已经被弃用了。


我认为macOS上的ZSH就像@mokagio所暗示的那样是罪魁祸首。只有使用ZSH的机器需要导出此变量。 - Zen

2

我在macOS上使用Zsh作为我的shell,并刚刚下载了Android Studio 3.6.2。

我将以下内容添加到我的~/.zshenv文件中,一切都正常工作。

export JAVA_HOME="/Applications/Android Studio.app/Contents/jre/jdk/Contents/Home"

我相信更新~/.profile也可以做到,但我没有尝试过。


0
在Android Studio Giraffe | 2022.3.1版本中的Android Studio中 Mac
export JAVA_HOME="/Applications/Android Studio.app/Contents/jbr/Contents/Home"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接