2016-10-11 8 views
0

Multidexを使って、slove 65535.IはすでにAndroid Multidexガイドを適用しています。 https://developer.android.com/tools/building/multidex.html しかし、タスク ':スタックマップフレームで未知の検証タイプ[73]'の実行に失敗しました。 このクラスはAndroidライブラリにあり、私はそれを変更することはできません。そのjarはプロガードかもしれません。 この問題を解決するにはどうすればよいですか?Android Studio Multidexに失敗しました:スタックマップフレームで未知の検証タイプ[73]

FAILURE:例外が発生してビルドに失敗しました。

タスク 'XXXXX:transformClassesWithMultidexlistForDebug'の実行に失敗しました。

にjava.io.IOException:(処理できないクラス[XXXXX.class]([\ 1 \ 1F \ combined.jar \ \中間体\変換\ jarMerging \デバッグ\ jarファイルを構築]読み取ることができません。スタックマップフレームにおける未知の検証タイプ[73]))

これは私のbuild.gradleある:

プラグインを適用する: 'com.android.application'

依存関係{ コンパイル「COM。 android.support:multidex:1.0.0 '

compile fileTree(include: '*.jar', dir: 'libs') 
compile project(':Android_Libproject') 
compile files('libs/ant-1.9.5.jar') 
compile files('libs/ant-launcher-1.9.5.jar') 
compile files('libs/commons-io-2.4.jar') 
compile files('libs/dom4j-1.6.1.jar') 
compile files('libs/htmllexer.jar') 
........... 

}

アンドロイド{ compileSdkVersion 21 buildToolsVersion "21.1.2"

compileOptions { 
    sourceCompatibility JavaVersion.VERSION_1_7 
    targetCompatibility JavaVersion.VERSION_1_7 
} 

defaultConfig { 

    minSdkVersion 19 
    targetSdkVersion 21 
    multiDexEnabled true 
} 

sourceSets { 
    main { 
     manifest.srcFile 'AndroidManifest.xml' 
     java.srcDirs = ['src/main/java','src'] 
     resources.srcDirs = ['src/main/java','src'] 
     aidl.srcDirs = ['src/main/java','src'] 
     renderscript.srcDirs = ['src/main/java','src'] 
     res.srcDirs = ['res'] 
     assets.srcDirs = ['assets'] 
    } 

    // Move the tests to tests/java, tests/res, etc... 
    instrumentTest.setRoot('tests') 

    // Move the build types to build-types/<type> 
    // For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ... 
    // This moves them out of them default location under src/<type>/... which would 
    // conflict with src/ being used by the main source set. 
    // Adding new build types or product flavors should be accompanied 
    // by a similar customization. 
    debug.setRoot('build-types/debug') 
    release.setRoot('build-types/release') 
} 

}

答えて

2

'com.android.support:multidex:1.0.1'

をコンパイルしても、あなたを拡張しようと使用するようにしてくださいアプリケーションクラス:

+0

はい、私はこれを行っていますが、同じ問題を抱えています – yangrenhao

1

エラーメッセージによれば、おそらくProguardから来ている可能性があります(これは、マルチデックスを有効にすると常に実行されます)。

サードパーティライブラリにStackMapTable属性が壊れているクラスがある場合に発生する可能性があります(Proguardのバグトラッカーのsimilar issueを参照)。

これは実際にはそうであるならば - あなたの最善の策は、このように、手動で"dummy"値でProGuardののproguard.classfile.ClassConstants#ATTR_StackMapTableフィールドにパッチを適用することによって、このエラーを無視するようになります。

その後
public static final String ATTR_StackMapTable = "dummy"; 

、あなたはProGuardのライブラリーを構築する必要がありますAndroidのビルドチェーンにパッチを適用したバージョンを使用するよう伝えます。 Greg Ennisのdetailed instructions hereを参照してください。

ちょうど好奇心から、あなたはライブラリ名/バイナリを共有できますか?それはプロプライエタリなのかオープンソースなのか?

関連する問題