Androidの "Can not extract resource from com.android.aaptcompiler" エラーの解決方法
問題の概要
Androidアプリのビルド時に以下のエラーが発生する場合があります:
Execution failed for task ':app:mergeDebugResources'.
> A failure occurred while executing com.android.build.gradle.internal.res.ResourceCompilerRunnable
> Resource compilation failed (Failed to compile values resource file ...\values\values.xml. Cause: java.lang.IllegalStateException: Can not extract resource from com.android.aaptcompiler.ParsedResource@636e1e76.)
このエラーは、リソースファイル(主に values
ディレクトリ内のXMLファイル)に問題があることを示しています。
エラーの原因
このエラーは、以下のような様々な理由で発生します:
- リソースファイルのフォーマットが不正
- XML構文の誤り
- 値の指定方法が間違っている
- 重複する定義
- 特殊文字のエスケープ不足
解決方法一覧
1. 色コードに関する問題
<!-- #記号の欠落 -->
<color name="primary_color">EAF5FF</color>
<!-- #記号の重複 -->
<color name="primary_color">##EAF5FF</color>
<!-- 引用符で囲んでいる -->
<color name="primary_color">"#EAF5FF"</color>
<!-- 不正な文字数 -->
<color name="primary_color">#EAF5FFC</color>
<color name="primary_color">#EAF5FF</color>
2. 文字列リソースのエスケープ問題
<string name="message">It's a beautiful day!</string>
<string name="exclamation">Wow! Amazing</string>
<string name="message">It\'s a beautiful day!</string>
<string name="exclamation">Wow\! Amazing</string>
3. 寸法(dimen)リソースの単位問題
<!-- 単位の指定ミス -->
<dimen name="padding_small">10p</dimen>
<dimen name="text_size">14s</dimen>
<dimen name="padding_small">10dp</dimen>
<dimen name="text_size">14sp</dimen>
4. スタイルとテーマの定義問題
<!-- スタイルのネスト(誤り) -->
<style name="AppTheme">
<style name="NestedStyle">
<item name="colorPrimary">@color/primary</item>
</style>
</style>
<!-- 別々に定義 -->
<style name="AppTheme">
<!-- テーマの設定 -->
</style>
<style name="NestedStyle">
<item name="colorPrimary">@color/primary</item>
</style>
5. IDリソースの定義問題
<!-- 値の指定(誤り) -->
<item name="my_button" type="id">my_button</item>
<!-- 値なしで定義 -->
<item name="my_button" type="id" />
エラーの特定方法
Android Studioでエラーを正確に特定するには:
- Buildタブを開く
:app:mergeDebugResources
の横にあるエラーをクリック- 詳細なエラーメッセージ内の青色リンクをクリック
- 問題のあるファイルが開くので、誤りを修正
INFO
エラーメッセージに表示されるファイルパスを確認することで、問題のあるリソースファイルを特定できます。
その他の解決策
不正なファイルの削除
app/src/main/res/values
ディレクトリに不要なXMLファイル(特に自動生成された ids.xml
など)がないか確認し、削除します。
Jetifierの有効化
古いライブラリを使用している場合、gradle.properties
ファイルに以下を追加します:
android.enableJetifier=true
最近の変更の確認
エラーが発生する前に変更したファイルを確認し、元に戻してみてください。
予防策
- Gitの使用: 変更をコミットしてから作業し、問題が発生したら直前の状態に戻れるようにする
- XMLバリデーション: Android Studioの
Tools > XML Actions > Validate
でXMLファイルを検証 - コードレビュー: リソースファイルの変更はチームメンバーと確認する
- 定期的なクリーンビルド:
Build > Clean Project
で中間ファイルを定期的に削除
まとめ
"Can not extract resource from com.android.aaptcompiler" エラーは、主にリソースファイルの形式や内容に問題がある場合に発生します。色コード、文字列エスケープ、単位指定などの基本的なミスを注意深く確認することで、ほとんどの場合は解決できます。Android Studioのビルド出力を詳細に確認し、問題箇所を特定することが迅速な解決への近道です。