"AndroidX" 移行の際につまずいた点
AndroidX移行を行なった際につまずいた点を残しておきます。
AndroidXとは直接関係ないところでつまずいているのですが、流れで自分と同じ問題にぶつかった人の助けになればと思います。
環境
- | 移行前 | 移行後 |
---|---|---|
Android Studio version | 3.0 | 3.3 Canary 10 |
Gradle version | 4.1 | 4.10 |
Plugin version | 3.0.1 | 3.3.0-alphp10 |
Kotlin version | 1.2.30 | 1.2.70 |
Android Studio 3.0 -> 3.1
Android Studio 3.0 -> 3.1のマイグレーションの際は、こちらの記事を参考にさせていただきました。
この記事では載せられていなかったのですが、3.1 Canary 8から、
kapt "com.android.databinding:compiler:$version"
を書かなくてもよくなりました。
Databindingのkaptの有無 ( + annotationProccessorにするかどうか)によって、エラーが発生するということはありませんでした。
kapt -> annotationProccessorにしようとした
※AndroidX移行とは無関係
gradle fileのimplementation
やらannotationProccessor
やら、kap
の違いがイマイチよく分かっていなかったため、compile
-> implementation
にする際に、kapt
->annotationProccessor
としてしまいました。
結果、Dagger
でよくあるDaggerAppComponent
が生成されず頭を抱えることになりました。
Kotlin使ってるならkapt
でしょ...
どうして生成されないかは、JavaとKotlinのコンパイルの順番に関係しているようで、それは以下の記事を読むとよくわかります。
終わらないMigrate to AndroidX
Migrate to AndroidXしようと思ったけどRefresh java project dataが終わらない……進んでんのかこれ……?
— ませぎ (@boc_sho) 2018年9月17日
Android Studio 3.3 Canary 10 特有のバグかわかりませんが、Migrate to AndroidX
を行なったらUpdate indecies - Refresh java project data
と出て、そこから進まないっといったことが起きました。(Android Studio 3.2では起きませんでした。)
File -> Invalidate Caches /Restart...
を行なってから、またMigrate to AndroidX
を行うと完了できます。
Dagger versionを上げることによってのエラー
Gradle Plugin version
を上げた際に、「Dagger
も同じくversionを上げてください。」という警告が出たので、2.11 -> 2.17に上げてしまいました。(2.15で十分だったが、この際に最新にあげようと思って)
その後ビルドできたので、いざMigrate to AndroidX...
したら、
Cannot find symbol databindingComponent
e: [kapt] An exception occurred: java.util.NoSuchElementExceptione: [kapt] An exception occurred: java.util.NoSuchElementException
2種類のエラーが発生しました。
初めはDatabinding周りのエラーだと思っていましたが、後者が原因だったようです。
二つ目のエラーはDagger 2.17
に起こるバグのようで、issueが立っていました。
Dagger
のversionを2.16
にすることによって、両方のエラーが解決できました。
最後に
AndroidX移行はそこそこ最近のことで、それぞれの環境に依存するということもあり、情報があまりありません。
もし自分の記事によって、エラーが解決出来たなら幸いです。