Android ビルド失敗: PNG ファイル形式の不一致
問題
Expo で Android preview ビルド(eas build)が以下のエラーで失敗:
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:mergeReleaseResources'.
> Android resource compilation failed
ERROR: .../drawable-mdpi/assets_images_icon.png: AAPT: error: file failed to compile.
原因
ファイル拡張子と実際のフォーマットの不一致
該当ファイルは .png 拡張子だが、実際は JPEG 形式だった:
$ file assets/images/icon.png
assets/images/icon.png: JPEG image data, JFIF standard 1.01, ...
Android の aapt2(Android Asset Packaging Tool)は、拡張子と実際のフォーマットが一致しない画像をコンパイルできない。
影響を受けたファイル
assets/images/icon.pngassets/images/onboarding_1.pngassets/images/onboarding_2.pngassets/images/onboarding_3.pngassets/images/onboarding_4.png
これらのファイルはAntigravityを使ってnano bananaで生成したものだった
解決方法
macOS の sips コマンドで正しい PNG 形式に変換:
for file in assets/images/icon.png assets/images/onboarding_{1,2,3,4}.png; do
sips -s format png "$file" --out "$file"
done
変換後の確認
$ file assets/images/icon.png
assets/images/icon.png: PNG image data, 1024 x 1024, 8-bit/color RGB, non-interlaced
予防策
画像ファイルを追加する際は
fileコマンドで実際の形式を確認する画像編集ソフトで「名前を付けて保存」する際、拡張子だけでなく形式も正しく選択する
CI/CD で画像形式チェックを追加することも検討
参考
AAPT2 は Android Studio / Gradle で使用されるリソースコンパイラ
iOS は拡張子と形式の不一致を許容するが、Android は厳格