みんからきりまで

きりみんです。

簡単と聞いたbuild.gradleのkts化でハマって一日溶かした

Qiitaに書くほどちゃんとした知見に出来なかったのでこっちに書く。

仕事でやってるプロジェクトがgradle.kts化されてて、もうプロダクションレディなのかーと思って手元でも試してみようとしたらやたらハマった。

build.gradle.ktsへの書き換えとハマリポイント part 1 - Qiita

こちらのエントリなどを見ると以前はsettings.gradleにpluginManagementを書いたりする必要があったみたいだけど、最近の情報を見ると単純にbuild.gradleファイルをktsにリプレースするだけで完了するっぽい事が書かれていた。

Migrating Android App to Gradle Kotlin DSL 1.0 – ProAndroidDev

Multi-flavoured Kotlin DSL build script for Android App

そこで実際に手元のプロジェクトで試してみたら、どうもうまくいかなかった。
app/build.gradle.ktsでpluginsが読み込まれずにandroid {}配下などがすべてエラーになったり、プロジェクトを読み込み直したらそもそもgradleプロジェクトとして読み込まれなくなったり...。

いろいろ試行錯誤して原因を探ったけど分からなかったので、とりあえずGitHubからgradle/kotlin-dslをcloneしてきてその中にあるhello-androidという最小サンプルっぽいものをAndroid Studioで開いてみたら、これもgradleプロジェクトとして認識されなくてエラーになってしまった。

kotlin-dsl/samples/hello-android at master · gradle/kotlin-dsl · GitHub

これは手元の環境になにか問題があるに違いないと思い色々試行錯誤した結果、マシンに古いバージョンのGradleがインストールされていることに気が付き、これがgradlewの代わりに読み込まれるなどの悪さをしているかもしれないと思い、アンインストールしてみた。

そして.gradleと.ideaを削除しプロジェクトを開き直すと、上記のサンプルプロジェクトは無事に読み込みに成功しビルドすることが出来るようになった。

これで一件落着!かと思い、手元の自分のプロジェクトも読み込もうとしたら、やはりgradleプロジェクトとして認識されずエラーが出てしまった。

https://i.gyazo.com/dbcea73bcdd40d421df5fb6c63c25ecb.png

そして原因が全然分からないまま何度も何度も.ideaや.gradleを削除してプロジェクトを開き直したりしていたら、突如読み込みに成功し、ビルドできるようになった。

結局のところ何が原因だったのかはよく分からず、これといった知見を残すことも出来ずに大量の時間を溶かして終わったのだった...。

という話を悔しいので書きなぐった次第です。
何かの参考になるかもしれないので、リプレースした時のコミットログを置いておきますね。

replace gradle files to kts · kirimin/WhoOnGitHub@e3e7154 · GitHub