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

时间:2017-08-18 17:43:52

标签: android-studio gradle

我已经将一个应用程序从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")的内存。
  4. 我正在运行Android Studio 2.3.3

    这是我的build.gradle文件。我只留下了几种口味来节省空间,并重新命名了一些东西以保护无辜者。我已经离开了依赖项,以防可能出现问题?唯一的好处是我正在重命名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

2 个答案:

答案 0 :(得分:4)

对于将来面临此问题的任何人,对于命令行构建,请确保您的JAVA_HOME设置为与Android Studio使用的版本相同的版本。例如。 JDK v8:

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

1.8 JDK所在的任何地方。它是一个野兽,吸收内存,但它是解决这个构建错误的唯一方法。我不建议您在1.8版本的Android Studio中构建,因为它似乎需要Jack,这很简单。遗憾的是,它已被弃用。

答案 1 :(得分:0)

我在以Zsh为外壳的macOS上工作,并且刚刚下载了Android Studio 3.6.2。

我在~/.zshenv文件中添加了以下内容,一切正常。

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

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