2015年11月15日日曜日

apktool でビルド時に大量の public.xml error: Public symbol ...drawable/...is not defined

apktool でビルドコマンドを実行したところ以下のような public.xml の drawable/xxx が定義されていないというエラーが大量に出た。

...\res\values\public.xml:110: error: Public symbol drawable/foo declared here is not defined.

Windows のコマンドブロンプトを逆スクロールしても、このエラーで埋まっていて最初のほうの出力メッセージを見ることができない。
それで次のコマンドラインで標準エラー出力も含めて err.txt にリダイレクトした。

>apktool b target 1>err.txt 2>&1

するとエラーの始まりは拡張子が png だが実体は jpeg のファイルが原因で起きていた。

I: Building resources...
libpng error: Not a PNG file
ERROR: Failure processing PNG image ...\res\drawable-hdpi-v4\bar.png
...\res\values\public.xml:15: error: Public symbol drawable/hoge declared here is not defined.
(以下同様の public.xml の symbol not defined のエラーが大量に続く)

bar.png を調べると jpeg だったので png に変換して上書きした。
そして再びビルドすると public.xml symbol not defined のエラーは跡形もなく消えて、無事 apk が出来上がった。

実を言うと、最初はエラー出力の全容を確認することなく、 public.xml symbole ... not defined のエラーメッセージだけを調べて、解決策が見つからず諦めかけたのだ。

僕のようなおっちょこちょいも何人かはいるだろうと思って、ここに書いておくことにした。