なんというか、トホホな原因でした。

古いソースファイルを大事に使っている関係で、これまで Android Studio 2.2 を使い続けていたのですが、ストアにアップロードするために Android Studio 3 以上を使用する必要があるとの情報があり、Android Studio 3.4 を使ってみました。

いろいろバージョンアップしてプロジェクトを Gradle に移行したりして、だいたいうまくコンパイルできるようになってきたのですが、「Gradle 5.1.1 にバージョンアップしますか?(強く推奨します)」的なメッセージが表示されて Gradle をバージョンアップしたら、コンパイルがエラーになってしまうようになってしまいました。

エラーメッセージは下記のとおりです。

Android resource linking failed
 C:\Users\username\Documents\Android Studio\APP1\app\build\intermediates\incremental\mergeDebugResources\merged.dir\values\values.xml:494: error: expected reference but got (styled string) " #000000 " style;name=titleBackground:1,7 item;name=android:background:1,7.
 C:\Users\username\Documents\Android Studio\APP1\app\build\intermediates\incremental\mergeDebugResources\merged.dir\values\values.xml:510: error: expected reference but got (styled string) " #000000 " style;name=titleBackground:1,7 item;name=android:background:1,7.
 error: failed linking references.

Build Output の画面のツリーを開いてみると下記のようなメッセージも出力されており、どうやら AAPT2 という仕組みのあたりでエラーになっているようです。

Caused by: com.android.builder.internal.aapt.v2.Aapt2Exception: Android resource linking failed

ググってみたところ、やはり AAPT2 に関するエラーについてはいろいろと経験されている先人がいらっしゃるようで、下記のような情報が得られました。

1.プロジェクトレベルの build.gradle ファイルに google() を追加する。(AAPT2 の提供元が変わっているため)

repositories {
    google()
    jcenter()
}

2.v4 サポートパッケージを読み込む。

 configurations.all {
     resolutionStrategy {
         force 'com.android.support:support-v4:27.0.2'
     }
 } 

3.build tools の classpath を追加する。

 classpath 'com.android.tools.build:gradle:3.2.0-alpha13' 

4. アプリケーションレベルの build.gradle ファイル中の compileSdkVersion と buildToolsVersion をあわせる。さらに targetSdkVersion もあわせる。

compileSdkVersion 29
buildToolsVersion "29.0.1"
defaultConfig {
    targetSdkVersion 29
(以下略)

上記をやってみたのですが、なかなかエラーが解消しませんでした。

だいぶ悩んでしまったのですが、試しにエラーメッセージ中に表示されている values.xml のリンクをクリックして表示してみたところ、styles.xml の中にエラーがあることがわかりました。

titleBackground has already been defined in this folder (Previously defined here)

どうやら titleBackground という名前が重複して定義されているようです。

今までの環境ではエラーにならずにコンパイルできていたのですが、新しい環境になってチェックが厳密になったのかもしれません。

この部分を修正して、エラーは表示されなくなりました。


0件のコメント

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください