はじめに
皆さん、ごきげんよう!れぶです!
今回の記事では、Robolectric 4.8
でshadowOf
メソッドを使用した際に出るコンパイルエラーの解決法を書いていきます。同じエラーでハマってる方に特に参考になれば光栄です。
それでは、参りましょう!!
開発環境
- MacBook Air
- Android Studio Bumblebee | 2021.1.1 Patch 1
- Java 8
- compileSdkVersion 32
- minSdkVersion 21
- Robolectric 4.8
エラー内容
Robolectric 4.8
で、Shadows.shadowOf
メソッドを使ってShadow
インスタンスを生成する際に、以下のコンパイルエラーが発生します。
-
cannot access BackdropFrameRenderer
-
class file for com.android.internal.policy.BackdropFrameRenderer not found
つまり、「com.android.internal.policy.BackdropFrameRenderer」クラスがないため、アクセスできないよと言われています。見覚えのないクラスで最初戸惑うと思います。
解決方法
結論、Robolectricのバージョンを4.8▶︎4.8.1にアップグレードすることでエラーが解消されます。
上記のページを参照すると、Robolectric 4.8.1
ではRobolectric 4.8
で起こったバグ(shadowOf
メソッドのコンパイルエラー)をしっかり修正してくれていることが分かりますね。
具体的には、問題となっていた「com.android.internal.policy.BackdropFrameRenderer」クラスに対して、「isInAndroidSdk」パラメーターを「false」に設定することで修正されています。この辺の内部構造に関しては、「そうなんだ」ぐらいで受け止めるのがまずは良いかと思います。
おそらく次回リリース(予定)の安定バージョン4.9でも、4.8で起こったエラーにしっかり対応してくれると思うので、期待したいですね!
サンプルコード
とここで、自分自身がRobolectricを使ってサンプルのテストコードを書いたので、もし良かったら参考にしてみてください。
おわりに
今回は、Robolectric 4.8
で起こったshadowOf
メソッドのエラーに対する対応を記述しました。
Robolectric
でも、前のバージョンのバク修正や機能の拡張などによってバージョンが日々更新されます。以下のリリースノートからバージョンの進捗を確認できますので、エラーが出てハマってしまった際にはご覧ください。自分も今回のエラーに対する対応方法は、ここから発見しました。
また、Robolectric
でもSDK
やJava
のバージョンによってはうまく動作しないこともあるため、今一度バージョンを確かめてみてください。
以上です。この記事が少しでも役立つと嬉しいです。ありがとうございました!