0
Help us understand the problem. What are the problem?

posted at

【Android】Robolectric 4.8でshadowOfメソッドを使用した際に出るエラーの解決法

はじめに

皆さん、ごきげんよう!れぶです!

今回の記事では、Robolectric 4.8shadowOfメソッドを使用した際に出るコンパイルエラーの解決法を書いていきます。同じエラーでハマってる方に特に参考になれば光栄です。

それでは、参りましょう!!

開発環境

  • 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でもSDKJavaのバージョンによってはうまく動作しないこともあるため、今一度バージョンを確かめてみてください。

以上です。この記事が少しでも役立つと嬉しいです。ありがとうございました!

参考サイト

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
0
Help us understand the problem. What are the problem?