今回は、クリスマス還元記事ということで、個人開発になったので、最近アドベントカレンダーに参加してないこともあり今年一番悩んだイシューの解決方法を書きたいと思います。
今回の環境
- Androidのアプリのビルド環境
- Jetpackライブラリの一部であるsafeargsを使っている
- CI/CDの構築を新しくする
今回の問題
- ローカルで、gradleを使ったビルドは成功するのに、なぜかCI/CD環境などのリモート環境だとgradleビルドができなかった
- ローカルだとビルドは通るがリモート環境(Github Action, CircleCI など全滅だった)だとkotlinから自動出力されてるはずのsafeargsのライブラリを使ったもののメソッドがリンクエラーとなる
経緯、前提
- 他の開発者が開発していたもので、その開発者達はすでにいなくなっていたので、資料などなどなく、問題の原因のヒントもなく、引き継いだので前提の開発の経緯などもわからなかったが自動ビルド環境を作成してほしいという要望に応えなければならなかった
結論、原因
- safeargsの画面遷移(navigationのための)のxmlが複数あったのだが、その複数あったxmlの中身のheaderの最初に書くandroid:idが被っていた
- ローカル環境だとうまくマージされてメソッドが一つのファイルに出力されるようだったが、リモート環境だと、上書きされてxmlの一つのファイルだけのメソッドだけが出力されていた
修正方法
- 複数のnavigationのxmlのandroid:idをそれぞれ違うものに設定した
まとめ
ということで、修正方法は何てことなかったのですが、まさか、複数のnavigation xmlが同一のandroid:idになってるとは思わないし、最初navigation xmlをテキストでなく、遷移図の状態で見ていたので悩んでしまいました、そんなこんなで解決できてよかったので、めでたしめでたしでした。