Android - 执行失败任务':app:transformClassesWithMultidexlistForDebug'

3
当我尝试运行我的非常简单的Android应用程序时,我会得到以下输出:
Gradle信息:正在执行任务:[:app:assembleDebug] Kotlin信息:Kotlin JPS插件已禁用 6/2/16,上午11:25 - 编译完成,共1个错误和0个警告,用时6秒706毫秒 Gradle错误:执行任务':app:transformClassesWithMultidexlistForDebug'时出错。 com.android.build.api.transform.TransformException:com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException:进程'/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/bin/java' 以非零退出值1结束。
我最初没有使用multidex,但是我在使用标准dex时也遇到了类似的错误。这是我在没有multidex的情况下得到的原始输出:
Gradle信息:正在执行任务:[:app:assembleDebug] Kotlin信息:Kotlin JPS插件已禁用 6/2/16,上午11:28 - 编译完成,共1个错误和0个警告,用时7秒624毫秒 Gradle错误:执行任务':app:transformClassesWithDexForDebug'时出错。 com.android.ide.common.process.ProcessException:org.gradle.process.internal.ExecException:进程'/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/bin/java' 以非零退出值1结束。
我认为我已经尝试了所有可行的解决方案,但都没有成功。
这是我的应用程序级build.gradle:
apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "24.0.0 rc4"

    defaultConfig {
        applicationId "com.example.XXX.testapplication"
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
        multiDexEnabled true
    }
    buildTypes {
//        debug {
//            minifyEnabled true
//            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
//        }
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    dexOptions {
        incremental = true;
        javaMaxHeapSize "4g"
        //preDexLibraries = false
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:multidex:1.0.1'
    compile 'com.android.support:appcompat-v7:23.4.0'
    compile 'com.android.support:design:23.4.0'
}

我已经尝试了各种不同的注释和取消注释的组合,但是如你所见,都没有成功。

我的“lib”文件夹中没有任何文件。

这是我的高级build.gradle文件:

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.5.0'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

这是我的AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.example.XXX.testapplication">

    <application
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:supportsRtl="true"
            android:name="android.support.multidex.MultiDexApplication"
            android:theme="@style/AppTheme">
        <activity
                android:name=".MainActivity"
                android:label="@string/app_name"
                android:theme="@style/AppTheme.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>

                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
    </application>

</manifest>

请您能否展示整个Gradle输出,而不仅仅是错误信息? - OneCricketeer
我该怎么做?抱歉,我对这项技术非常陌生。 - Infamous911
你复制了那个错误信息,是吗?你可以在问题描述中附上出现在上面的输出结果。 - OneCricketeer
此外,你可能不需要 multidex。人们喜欢将其建议为解决所有 gradle 错误的魔法解决方案,但实际上并非如此。 - OneCricketeer
1
我创建了一个全新的项目,它可以正常运行。之前我正在测试的那个项目也是全新创建的,所以我不知道为什么它不能正常工作。无论如何,哈哈感谢您的帮助! - Infamous911
显示剩余5条评论
1个回答

1
如果您要集成multidex支持,则需要以周到的方式进行操作。 从这里link开始尝试做出以下更改: 在defaultConfig闭包中将multiDexEnabled true添加到您的gradle文件中。 在manifest中添加来自支持库的MultiDexApplication类,如下所示:
<application
    ...
    android:name="android.support.multidex.MultiDexApplication">
    ...
</application>

`

请注意,如果您已经有一个针对项目的Application类,请重写名为attachBaseContext()的方法,并在该方法中调用: MultiDex.install(this)

除了attachBaseContext()部分,我已经完成了所有内容。 当我尝试在扩展AppCompatActivity的MainActivity.java类中覆盖该方法时,它会显示“@ Override”标记是错误的,因为它未重写任何超类中的方法。 - Infamous911
@Infamous911,你不应该将它放到Activity中,而是应该将其放到扩展MultidexApplication的Application类中。然而,正如我们所看到的,你并不需要multidex,因为它并没有解决这个问题。 - OneCricketeer
不要继承Application,而是继承MultiDexApplication。@cricket_007 你说得对,一般情况下如果没有或者只有少量依赖项,就不需要使用Multidex。 - Hemal Shah

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