将字节码转换为dex时出错:原因:java.lang.RuntimeException:异常解析类 - Android studio 2.0 beta 6

时间:2016-02-28 09:47:16

标签: android gradle android-gradle build.gradle

我使用gradle更新到Android studio 2.0 Beta 6的最新版本:

dependencies {
    classpath 'com.android.tools.build:gradle:2.0.0-beta6'
}

该应用程序在模拟器和设备上运行得非常好,我测试了所有东西并且工作正常。

只有当我尝试生成签名APK时,我才会遇到很多错误,

我在依赖项中遇到了一些错误,当我排除了vector drawable,vector animate drawable和Support-v4库时,它们全部解决了

现在我没有任何依赖项错误。

现在我的app模块的gradle.build看起来像这样:

apply plugin: 'com.android.application'

android {
    configurations {
        //all*.exclude group: 'com.android.support', module: 'support-v4'
        all*.exclude module: 'animated-vector-drawable'
        all*.exclude module: 'support-vector-drawable'
        //all*.exclude module: 'support-v4'

    }
    repositories {
        maven { url "https://jitpack.io" }

    }
    compileSdkVersion 23
    buildToolsVersion '23.0.2'
    defaultConfig {
        applicationId "com.test.test"
        minSdkVersion 11
        targetSdkVersion 23
        versionCode 1
        versionName "1"

//        multiDexEnabled true
        vectorDrawables.useSupportLibrary = true
    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    productFlavors {
    }

}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])

    compile('com.github.afollestad.material-dialogs:commons:0.8.5.5@aar') {
        transitive = true
        exclude module: 'support-v4'
        exclude module: 'appcompat-v7'
        exclude module: 'recyclerview-v7'
    }
    compile('com.google.android.gms:play-services-ads:8.4.0') {
        exclude module: 'support-v4'
    }
    compile('com.google.android.gms:play-services-analytics:8.4.0') {
        exclude module: 'support-v4'
    }
    compile('com.android.support:appcompat-v7:23.2.0') {
        exclude module: 'support-v4'
        exclude module: 'animated-vector-drawable'
        exclude module: 'support-vector-drawable'
    }
    compile('com.android.support:support-v4:23.2.0') {
        exclude module: 'animated-vector-drawable'
        exclude module: 'support-vector-drawable'
    }
    compile('com.android.support:palette-v7:23.2.0') {
        exclude module: 'support-v4'
    }
    compile('com.android.support:cardview-v7:23.2.0') {
        exclude module: 'support-v4'
    }
    compile('com.android.support:recyclerview-v7:23.2.0') {
        exclude module: 'support-v4'
    }
    compile('com.android.support:design:23.2.0') {
        exclude module: 'support-v4'
    }
    compile('com.nineoldandroids:library:2.4.0') {
        exclude module: 'support-v4'
    }
    compile('com.baoyz.swipemenulistview:library:1.2.1') {
        exclude module: 'support-v4'
        exclude module: 'appcompat-v7'
        exclude module: 'recyclerview-v7'
    }
    compile('com.squareup.picasso:picasso:2.5.2') {
        exclude module: 'support-v4'
    }
    compile('com.nononsenseapps:filepicker:2.5.0') {
        exclude module: 'support-v4'
        exclude module: 'appcompat-v7'
        exclude module: 'recyclerview-v7'

    }
    compile 'com.google.code.gson:gson:2.6.1'
}

只有在我为发布版本构建时才会显示错误:

这是我打开multiDex时的错误:

Error:Execution failed for task ':app:transformClassesWithMultidexlistForRelease'.
> com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home/bin/java'' finished with non-zero exit value 1

当我关闭它时这是错误:

:app:transformClassesWithDexForRelease
Error:Error converting bytecode to dex:
Cause: java.lang.RuntimeException: Exception parsing classes

Error:Execution failed for task ':app:transformClassesWithDexForRelease'.

> com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home/bin/java'' finished with non-zero exit value 1

我尝试将buildToolsVersion '23.0.2'更改为每个可能的版本,但没有任何更改。

当我把版本22.0.1我得到了这个错误:

Error:Error converting bytecode to dex:
Cause: com.android.dx.cf.iface.ParseException: name already added: string{"a"}

Error:Execution failed for task ':app:transformClassesWithDexForRelease'.
> com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home/bin/java'' finished with non-zero exit value 1

我尝试了所有可能的支持库版本和相同的结果。

我尝试使用Java 1.6和1.7,但没有任何改变!

请问其他可能的解决方案是什么?

14 个答案:

答案 0 :(得分:83)

只做Build > Clean Project 等待清除结束,然后Build > Rebuild Project,错误消失了。而已。

答案 1 :(得分:47)

我也遇到了同样的错误,我正在搜索许多现有的答案,重复的依赖关系或multidex等,但没有一个工作。 (Android studio 2.0 Beta 6,Build tools 23.0.2,no multidex)

事实证明,我曾经使用的包名称与Manifest中描述的包名称不匹配。

在其他ParseException行中,我发现我的文件在不同的模块中有类似的包名称/路径,可能与dexer冲突。

示例:

模块A: com.example.xyz.ticketing.modulea.Interface.java

模块B: com.example.Xyz.ticketing.moduleb.Enumerations.java

模块C:依赖于A和B

修好" Xyz"为了小写,dexer又恢复了。

如何查找:

当我查看gradle控制台的输出时, ParseExceptions 看起来像这样:

AGPBI:{" kind":"错误","文字":"将字节码转换为dex时出错:\ n原因:java .lang.RuntimeException:异常解析类"

我滚动接近异常的结尾。该长期异常行中有一部分实际上提到了原因:

引起:com.android.dx.cf.iface.ParseException:类名(at / dummycompany / mFGM / hata / hwp / BuildConfig)与path不匹配(at / dummycompany / mfgm / hata / hwp /BuildConfig.class)

通过这种方式,我找到了搜索错配包名称/路径的位置

答案 2 :(得分:10)

我的解决方案是修改Build Gradle文件。 我发现,问题是GC开销(内存不足)。

所以我在配置中添加了一些代码

android {
  dexOptions {
    incremental = true;
    preDexLibraries = false
    javaMaxHeapSize "2g"
  } 
}

proguard还有一些其他问题。 您还要将minifyEnabled设置为false。

答案 3 :(得分:3)

我在其中一个帮助器类中有一个错误的包名,因此我遇到了错误。所以检查所有类并确保你有正确的包名。

答案 4 :(得分:2)

我的解决方案不同,我在proguard-rules.pro

中添加了这些行
-optimizationpasses 5
-overloadaggressively
-repackageclasses ''
-allowaccessmodification

确保同时更新SDK管理器中的所有内容。

答案 5 :(得分:2)

If your targetSdkVersion is 25 or higher version and you use JDK 8 you have to add in your build.gradle file the following:

android {
   compileSdkVersion 26
   buildToolsVersion "26.0.0"

    defaultConfig {
        ...        
        jackOptions {
            enabled true
        }
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

More info: https://stackoverflow.com/a/37294741

答案 6 :(得分:1)

从我的-overloadaggressively中移除proguard-rules.pro,为我修复此内容。

或者,添加-useuniqueclassmembernames也会修复它。

答案 7 :(得分:1)

我尝试./gradlew clean build,使工作室缓存无效,重启机器。但是解决了这个问题的是转瞬即运行

答案 8 :(得分:0)

使用Android工作室模板进行登录活动时出现此问题 我选择了“活动”套餐来进行我的活动 AndroidManifest.xml 中的模板(而非.activity.LoginActivity使用了.LoginActivity因此导致错误。

答案 9 :(得分:0)

如果您遇到此错误,您的套餐中的套餐肯定会与您在课程中设置的其他套餐不同。小心。

答案 10 :(得分:0)

我今天遇到了同样的问题,问题是在我的Constants.java中我已定义(错误地)

public static final class Checkout {
.......
}

public static final class CHECKOUT {
......
}

答案 11 :(得分:0)

就我而言,我制作的课程尚未使用。所以我必须删除该类或使用该类。

答案 12 :(得分:0)

我遇到了同样的错误。看来它是由于将包重命名为小写而一个类具有先前的案例措辞。

答案 13 :(得分:-1)

您的gradle.build文件将包含

compile files('libs/httpclient-4.2.1.jar') 

从文件中删除此行。

{{1}}

它会正常工作。