13

この質問の形式がそこにあることは知っていますが、私のシナリオに特に合うものは何も見つからないので、ここにあります.

私のアプリは、エミュレーターでテストするときに完全にコンパイルおよび実行されますが、署名付き apk をエクスポートしようとすると、Conversion to Dalvik format failed with error 1. Eclipse エラー ログには、次のスタック トレースが表示されます。

com.android.ide.eclipse.adt.internal.build.DexException: Conversion to Dalvik format failed with error 1
at com.android.ide.eclipse.adt.internal.build.BuildHelper.executeDx(BuildHelper.java:751)
at com.android.ide.eclipse.adt.internal.project.ExportHelper.exportReleaseApk(ExportHelper.java:269)
at com.android.ide.eclipse.adt.internal.wizards.export.ExportWizard.doExport(ExportWizard.java:296)
at com.android.ide.eclipse.adt.internal.wizards.export.ExportWizard.access$0(ExportWizard.java:233)
at com.android.ide.eclipse.adt.internal.wizards.export.ExportWizard$1.run(ExportWizard.java:218)
at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:121)

他の人が持っているように見える名前の衝突はありません (少なくともエラーにはそうは書かれていません)。エミュレーターで実行される理由については困惑していますが、エクスポートできません。

ちなみに、ProGuardも使用していません。

4

3 に答える 3

27

ADT 21 は dexedLibs という名前のフォルダーをビンに追加するようです。これは、jar とライブラリーをプリコンパイル済みの dex コードに入れることで展開を高速化するはずです。そこには 2 つのバージョンのサポート ライブラリがあったので、フォルダー内のすべてのファイルを削除して再度ビルドしたところ、機能しました。そこにあるファイルを使用してビルドしようとすると、ビルドが失敗するため、各エクスポートの前にそれらを削除する必要があります。私は ActionBar Sherlock を使用していますが、フォルダーが最初に空でない限りそこに表示されないため、dexedLibs と競合している可能性があります。

編集:この問題が最初に発生したとき、私はActionBarSherlockを使用していましたが、最近ActionBarCompatに切り替えました。この切り替え以降、エクスポート時に dexedLibs フォルダーを削除する必要がなくなりました。おそらく ActionBarSherlock が原因だったようですが、確信は持てません。

于 2013-04-18T21:44:46.717 に答える
2

何度も試みた後、この問題が発生する理由を突き止めることができました。一般に、これは ProGuard とその最適化が原因です。少なくとも私の場合、このエラーで 4 つの破損したプロジェクトがありましたが、ProGuard の最適化を無効にした後、それらはすべて正しくビルドされました。したがって、ProGuard 構成で -optimizations および -optimizationpasses オプションをコメントし、-dontoptimize を追加します。

# -optimizations ...
# -optimizationpasses 5

-dontoptimize

お役に立てれば。

于 2014-12-02T21:48:40.123 に答える