web-dev-qa-db-ja.com

バイトコードからdexへの変換エラー:原因:Java.lang.RuntimeException:例外解析クラス-Android studio 2.0 beta 6

Gradleを使用して、Android studio 2.0 Beta 6の最新バージョンに更新しました。

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

アプリは、エミュレーターとすべてのことをテストしたデバイスで完全に正常に動作し、正常に動作します。

署名済みAPKを生成しようとしたときにのみ、多くのエラーが発生しました。

依存関係でエラーが発生しましたが、ベクトルドロアブル、ベクトルアニメーションドロアブル、および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:[email protected]') {
        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で試しましたが、何も変わっていません!

他の可能な解決策は何ですか?

23
MBH

私も同じエラーに直面し、重複した依存関係やマルチデックスなどで既存の多くの回答を検索していましたが、どれも機能しませんでした。 (Android Studio 2.0 Beta 6、ビルドツール23.0.2、マルチデックスなし)

マニフェストに記載されているパッケージ名と一致しないパッケージ名を使用したことがあります。

他のParseException行では、異なるモジュールにファイルがあり、パッケージ名/パスが似ているため、デクサーと競合する可能性があることがわかりました。

例:

モジュールA:com.example.xyz.ticketing.modulea.Interface.Java

モジュールB:com.example.Xyz.ticketing.moduleb.Enumerations.Java

モジュールC:AおよびBに依存しています

「Xyz」を小文字に修正した後、デクサーは再び元気になりました。

調べる方法:

ParseExceptionsについてgradleコンソールの出力を調べたところ、次のようになっています。

AGPBI:{"kind": "error"、 "text": "バイトコードからdexへの変換エラー:\ nCause:Java.lang.RuntimeException:例外解析クラス"

例外の終わり近くまでスクロールしました。その長い例外行には、実際に原因に言及している部分があります。

原因:com.Android.dx.cf.iface.ParseException:クラス名(at/dummycompany/mFGM/hata/hwp/BuildConfig)がパス(at/dummycompany/mfgm/hata/hwp/BuildConfig.class)

このようにして、一致しないパッケージ名/パスを検索する場所を見つけました

47
phil

Build > Clean Projectを実行するだけで、クリーニング終了を待機してからBuild > Rebuild Projectを実行すると、エラーはなくなりました。それでおしまい。

83
Mahdi Astanei

私にとっての解決策は、Build Gradleファイルを変更することです。問題はGCのオーバーヘッド(メモリ不足)であることがわかりました。

構成にコードを追加します

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

Proguardには他にも問題があります。また、minifyEnabledをfalseに設定する必要があります。

10
MOSDEV

ヘルパークラスの1つに間違ったパッケージ名があったため、エラーが発生していました。すべてのクラスをチェックし、正しいパッケージ名を持っていることを確認してください。

3
Tassu

私の解決策は異なっていました。proguard-rules.proにこれらの行を追加しました

-optimizationpasses 5
-overloadaggressively
-repackageclasses ''
-allowaccessmodification

SDKマネージャーからもすべてを更新してください。

2

TargetSdkVersionが25以上のバージョンでJDK 8を使用している場合、build.gradleファイルに次を追加する必要があります。

Android {
   compileSdkVersion 26
   buildToolsVersion "26.0.0"

    defaultConfig {
        ...        
        jackOptions {
            enabled true
        }
    }

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

詳細: https://stackoverflow.com/a/372​​94741

2
MiladAhmadi

-overloadaggressivelyからproguard-rules.proを削除すると、これが修正されました。

または、-useuniqueclassmembernamesを追加しても修正されました。

1
Josh Laird

./gradlew clean build、スタジオキャッシュの無効化、マシンの再起動を試みました。しかし、問題を解決したのはInstant Run Offです

1
Defuera

私の場合、まだ使用していないクラスを作成しました。そのため、クラスを削除するか、クラスを使用する必要があります。

0
ruelluna

このエラーが発生した場合、マニフェストのパッケージは、クラスで設定した他のパッケージとは確かに異なります。注意してください。

0
hoseini_pro

私は同じエラーに直面しました。パッケージの名前を小文字に変更したため、クラスに以前のケースの文言があったようです。

0
Mir

ログインアクティビティにAndroid studiotemplateを使用しているときにこの問題が発生しました。
アクティビティを入れる「アクティビティ」パッケージを選択しました。
AndroidManifest.xmlのテンプレートでは、.activity.LoginActivityの代わりに.LoginActivityが使用され、エラーが発生しました。

0

今日同じ問題にぶつかりました。問題は、Constants.Javaクラスで(誤って)定義したことです

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

そして

public static final class CHECKOUT {
......
}
0
Zahid Rasheed