Android Marketの管理画面にエラーレポートが来ていたため、対応を行う。
さてリリース用にエクスポートを実行してみたら…エラー発生。

内容はAndroid Applicationとしてエクスポートしようとした際に
Conversion to Dalvik format failed with error 1
というエラーダイアログが出るというもの。

何が起きた?
先に原因を書いておくと SDK r12 に含まれる proguard.bat の問題。
(2011/09/28時点 r13でも同じ状況になると思われる)
(2011/10/20時点 r14でも同じ状況になると思われる)

以下、解決までの経緯。

エラーメッセージをキーワードに検索すると過去に同様の問題が起きているようである。
いくつか対応事例として
  • プロジェクトのClean実行
  • プロジェクトのビルドパスの確認
  • Eclipseを-cleanオプションで起動する
などがあるようだ。

「あるようだ」という書き方をしたのにはもちろん理由がある。
自分の環境では解決しなかったからだ。
上記の対応は古いSDKの時の典型的な問題のようなので、r12とは違う状況であると考えられる。

前述の内容以外に
  • プロジェクトをワークスペースから削除後に再度インポート
  • Androidのターゲットバージョンを変えた上でエクスポートしてみる
といったことを行ったがやはりだめ。

ここで直近で作っていた試作アプリケーションでエクスポートを試したところ、問題なくエクスポートできる。
というわけでプロジェクト間の設定の違いを地道に確認していく。


どうやら proguard の実行の有無が違いらしい。

確認のため、proguard をかけない設定で問題が起きているプロジェクトをエクスポートしてみる。
なんと、無事エクスポート完了。
新たな手がかりである。

エラーメッセージと併せてキーワードに proguard を追加して検索。
そして見つけたのがこちらのページ。
Android SDK tools revision 12 has problem with Proguard => error conversion to Dalvik format failed with error 1

いつものごとく英語ページではあるが内容は難しくない。
というか回避方法があからさまに分かる回答の書き方がされている。
バッチファイル中の引数の渡し方に問題有りとのこと。(ちなみに私の環境はWindows7 64bit Home Premium SP1)
次のように記述されている行の引数のスタイルを修正する。
call %java_exe% -jar "%PROGUARD_HOME%"\lib\proguard.jar %*
修正後はこちら
call %java_exe% -jar "%PROGUARD_HOME%"\lib\proguard.jar %1 %2 %3 %4 %5 %6 %7 %8 %9

proguard.batの中の記法の問題なので、参考ページの内容そのままにproguard.batを修正。ファイルを保存。

改めて問題の起きているプロジェクトをエクスポート。
もちろんproguardをかける設定に戻している。

無事エクスポート完了。
これで新バージョンを作ることが出来る。

参考ページの表題にあるとおり SDK r12 の問題らしい。
言われてみれば、今回修正を行ったプロジェクトをリリース後に r12 へアップデートしていた。
そしてその状況においてはデバッグビルドは行っていたがリリース用エクスポートは実行していない。
そのため気づくのが遅くなってしまった。

なんにせよ解決できて良かった。

しかし修正後のスタイルは10個以上の引数をさばけないので潜在的には問題を抱えていると言える。
近い将来問題がおきたらそのときはどうするのだろう。
設定ファイルでパラメータを渡す形で実行するとか逃げ道がありそうではあるが…。