尝试构建APK时,Gradle Build失败并出现意外错误

时间:2017-05-04 03:54:34

标签: java android android-studio

我写了一个小代码,但每当我尝试构建apk时,我都会收到以下错误:

  

错误:任务':app:transformClassesWithMultidexlistForDebug'的执行失败。   com.android.build.api.transform.TransformException:com.android.ide.common.process.ProcessException:使用带有参数{C:\ Users \ xxxx \ Desktop的主类com.android.multidex.ClassReferenceListBuilder执行java进程时出错\ yyyyy \ app \ build \ intermediates \ multi-dex \ debug \ componentClasses.jar C:\ Users \ xxxx \ Desktop \ yyyyy \ app \ build \ intermediates \ transforms \ jarMerging \ debug \ jars \ 1 \ 1f \ combined.jar }

其中xxxx是我的用户名,yyyyy是项目名称。 我已经尝试了在Stack Overflow上找到的所有可能的解决方案,但我意识到所有这些解决方案都被问及旧版本。

我有最新版本的Android Studio。我使用的是最新版本的Android SDK,构建工具,gradle,JDK 8.0和JRE 7.我还尝试过JRE 8.

build.gradle(module app) :
apply plugin: 'com.android.application'

android {
compileSdkVersion 25
buildToolsVersion "25.0.3"
defaultConfig {
    applicationId "xxxx.yyyyy"
    minSdkVersion 15
    targetSdkVersion 25
    versionCode 1
    versionName "Unreleased Demo Version"
    testInstrumentationRunner                 
"android.support.test.runner.AndroidJUnitRunner"
    multiDexEnabled true

    packagingOptions {
        exclude 'META-INF/DEPENDENCIES.txt'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/notice.txt'
        exclude 'META-INF/license.txt'
        exclude 'META-INF/dependencies.txt'
        exclude 'META-INF/LGPL2.1'
    }

}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
}

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', 
{
    exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:25.3.1'
compile 'com.android.support.constraint:constraint-layout:1.0.2'
compile 'com.android.support:recyclerview-v7:25.3.1'
compile 'com.android.support:cardview-v7:25.3.1'
testCompile 'junit:junit:4.12'
compile 'com.android.support:multidex:1.0.1'
}

6 个答案:

答案 0 :(得分:0)

在build.gradle / app

defaultConfig {
    ....
   //Add this line
    multiDexEnabled true
}

dependencies {
   ....
   //Add this line
   compile 'com.android.support:multidex:1.0.0'
}

答案 1 :(得分:0)

这是因为Android平台持续增长,Android应用程序的规模也在不断增长。当您的应用及其引用的库达到一定大小时,您会遇到构建错误,表明您的应用已达到Android应用构建架构的限制

修改模块级build.gradle文件以启用multidex并将multidex库添加为依赖项,如此处所示Source

android {
    defaultConfig {


        multiDexEnabled true
    }
}

答案 2 :(得分:0)

在Module:App gradle文件夹中尝试此操作。

 multiDexEnabled true

        packagingOptions {
            exclude 'META-INF/DEPENDENCIES.txt'
            exclude 'META-INF/LICENSE.txt'
            exclude 'META-INF/NOTICE.txt'
            exclude 'META-INF/NOTICE'
            exclude 'META-INF/LICENSE'
            exclude 'META-INF/DEPENDENCIES'
            exclude 'META-INF/notice.txt'
            exclude 'META-INF/license.txt'
            exclude 'META-INF/dependencies.txt'
            exclude 'META-INF/LGPL2.1'
        }

答案 3 :(得分:0)

您尚未共享您使用的任何代码和依赖项,因此很难猜出确切的问题。

但是从您发布的错误中,我认为您的程序超过了64K方法的限制。

Apk文件以DEX的形式包含字节码文件,并且在单个DEX文件中限制为65,536个方法。

因此,如果你的应用程序有超过64k的方法,你应该去多个Dex文件。

启用多个Dex,意味着应用构建过程将生成多个DEX文件

defaultConfig {
....

multiDexEnabled true 
}

dependencies {
....

compile 'com.android.support:multidex:1.0.0'
}

答案 4 :(得分:0)

我发现没有必要安装JDK和JRE(参考:android studio 2.3.2系统要求下的最新下载页面)

还有一个名为" jre"的文件夹。在programfiles / android-studio中。

所以我想我会卸载JDK和JRE(因为与java有关的问题)

在此之后我重新安装了android studio。

现在它工作正常。 (尽管它帮助了我,我还没有深入研究)

答案 5 :(得分:-1)

当您的方法参考限制超过65,536时会发生这种情况。

第1步

您可以将以下内容添加到应用程序的build.gradle文件

    android {
      defaultConfig {
      ...
      minSdkVersion 15 
      targetSdkVersion 25
      multiDexEnabled true
     }
  ...
}

dependencies {
  compile 'com.android.support:multidex:1.0.1'
}

步骤2A

之后,您必须以下列方式扩展Application类

public class MyApplication extends SomeOtherApplication {
  @Override
  protected void attachBaseContext(Context base) {
     super.attachBaseContext(base);
     MultiDex.install(this);
  }
}

或者你可以这样做:

步骤2B

public class MyApplication extends MultiDexApplication { ... }

第3步

最后更新您的清单文件,如下所示

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.myapp">
   <application
        android:name="android.support.multidex.MultiDexApplication" >
    ...
   </application>
</manifest>