Android

aaptコマンドで9patchをバリデートする

9patchのリソースを幾つか追加したところ、次のエラーが出力されアプリがビルド出来なくなってしまいました。

Error:found an invalid color.
Error:Execution failed for task ':app:mergeDebugResources'.
> Error: java.util.concurrent.ExecutionException: com.android.tools.aapt2.Aapt2Exception: AAPT2 error: check logs for details

ぐぐるとAAPT2を無効にする方法が出てきましたが、AAPT2を無効にしても解決しませんでした。
今回は追加したのが9patchだったので画像の問題の可能性が高いと思い、更に調べていたところ、aaptコマンドで9patchのバリデーションが可能な事がわかりました。全ファイルバリデートして不正なファイルを除いたところ正常にビルドできるようになりました。

以下にaaptコマンドを使い方をまとめます。

9patchをバリデートする

バリデートするには以下のコマンドを実行します。

aapt s -i hoge.9.png -o /dev/null

正常な場合は結果は次のようになります。

Crunching single PNG file: hoge.9.png
        Output file: /dev/null

不正な場合には次のように何がわるいのか説明してくれます。

Crunching single PNG file: hoge.9.png
        Output file: /dev/null
ERROR: 9-patch image hoge.9.png malformed.
       Frame pixels must be either solid or transparent (not intermediate alphas).
       Found at pixel #267 along bottom edge.

今回は下のエッジに何故か1ピクセルだけ少し透過されたブラックが混じっていたことが原因でした。

aaptコマンドのパス

今回の環境では build-tools/27.0.1/aapt にありました。