1年間放置していたAndroidアプリをメンテナンスしようとした際にAndroid Studioでエラーが表示されたので、対処した内容を残しておきます
org.gradle.tooling.BuildException: Failed to process resources, see aapt output above for details.
経緯
- 久しぶりにAndroid Studio(ver2.2)を起動しようとするが起動しない
- 最新のAndroid Studio(ver 3.5)をダウンロードし、起動する
- アプリのプロジェクトを読み込んでビルドする
- エラー「org.gradle.tooling.BuildException: Failed to process resources, see aapt output above for details.」が表示される
- えっ!?
結論
プロジェクトを最新の状態にアップデートすると解決しました
そのためこの記事ではプロジェクトのアップデート手順をまとめます
※手順を実施する場合は事前にプロジェクトをバックアップしてください
アップデートした内容
ターゲットAPI
ターゲットAPIが最新でないとアプリインストール時にGoogle Play プロテクトから警告が表示される場合があるそうなので、この機会に更新します
参考:https://developers-jp.googleblog.com/2019/03/2019-api.html
サポートライブラリをAndroidXに移行
Support Library の後継
Support Library の新規の開発はすべて AndroidX ライブラリ内で行われるらしいので、この機会に移行します
参考:https://developer.android.com/jetpack/androidx?hl=ja
Gradle
Android StudioがしつこくGradleのアップデートを聞いてくるので
Gradleの更新
Android StudioからGradleのアップデートのダイアログが表示されるので「Update」ボタンを押すだけで更新できます
アップデート後は以下のバージョンになりました(メニュー「File」→「Progect Structure」→「 Progect 」)
・Android Plugin Version:3.5.3
・Gradle Version:5.4.1
ターゲットAPIを最新にする
※2019/12/16現在の最新のAPI Level は 29(android 10.0(Q))でしたので、
以下の手順ではAPI Level 29にアップデートするための手順です
(必要に応じてバージョンを読み替えてください)
最新のSDKをダウンロードする
メニュー「Tools」→「SDK Manager」を開く
・「SDK Platforms」タブのAndroid 10.0をダウンロード
・「SDK Tools」タブのAndroid SDK Build-Toolsを更新(29.0.2をダウンロードしました)
プロジェクトの設定を変更する
メニュー「File」→「Progect Structure」→「Modules」を開く
「Properties」タブ
「Compile Sdk Version」に29を指定
「Build Tools Version」に29.0.2を指定
「Default Config」タブ
「Target SDK Version」に29を指定
OKを押して適用する
※アプリによってはAPIレベルの変更によってプログラムを更新が必要な場合があります
更新が必要かどうかは以下の公式ドキュメントを確認してください
サポートライブラリをAndroidXに移行する
Support Libraryを最終バージョン(28.0.0 )にアップデートする
メニュー「File」→「Progect Structure」→「Suggestions」を開く
リスト内の全てのサポートライブラリの「Update」ボタンを押して最終バージョン(28.0.0)に更新する
AndroidXに移行する
メニュー「Refactor→「Migrate to AndroidX」を押して一発変換する
※私の場合、app.gradleの置換はされましたがソースコードのサポートライブラリのimportやlayoutは置換されませんでした
ソースコードのサポートライブラリを置換する(置換されなかった場合)
置換が必要な個所は以下の通りです
- app/src/main/java 以下のプログラム
- app/src/main/res/layout 内のレイアウトファイル(xml)
(プログラムを置換していない状態の場合、ビルドするとクラスが見つからないエラーになります。また、レイアウトファイルが未置換の場合はアプリ実行時にクラッシュしてしまいます)
以下の公式ドキュメントにてライブラリを照らし合わせて全て置換します
私の場合は以下の置換が必要でした(例として掲載します)
app/src/main/res/layout 内のレイアウトファイルにて
置換前
import android.support.annotation.Nullable
import android.support.v7.app.AppCompatActivity
置換後
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
app/src/main/res/layout 内のレイアウトファイルにて
置換前
android.support.design.widget.CoordinatorLayout
android.support.design.widget.AppBarLayout
android.support.v7.widget.Toolbar
置換後
androidx.coordinatorlayout.widget.CoordinatorLayout
com.google.android.material.appbar.AppBarLayout
androidx.appcompat.widget.Toolbar
ビルドしてアプリを実行し、一通り動作を確認出来たら移行完了です
この時点で最初に出ていたエラーは無くなっていました

コメント