Robolectric の MultiDex 対応に org.robolectric:shadows-multidex
をいれてて
AndroidX への移行している場合、
ビルド時に Jetifier まわりでエラーが出ることがあります:
> Execution failed for JetifyTransform: /home/circleci/.gradle/caches/modules-2/files-2.1/org.robolectric/shadows-support-v4/3.3.2/120e08a6d6d9bd56614f9a3e91c853039107761d/shadows-support-v4-3.3.2.jar.
> Failed to transform '/home/circleci/.gradle/caches/modules-2/files-2.1/org.robolectric/shadows-support-v4/3.3.2/120e08a6d6d9bd56614f9a3e91c853039107761d/shadows-support-v4-3.3.2.jar' using Jetifier.
Reason: The given artifact contains a string literal with a package reference 'android.support.v4.content' that cannot be safely rewritten. Libraries using reflection such as annotation processors need to be updated manually to add support for androidx.
ブラックリストに追加
この場合 Jetifier と相性が悪いので
Workaround としてブラックリスト入りさせる方法が提案されてます:
👉 https://github.com/robolectric/robolectric/issues/4491#issuecomment-498603341
android.jetifier.blacklist=shadows
ShadowAndroidXMultiDex
を使うように変更
あとは Config
を与えるときの Config.Builder.setShadows(ShadowMultiDex.class)
を Config.Builder.setShadows(ShadowAndroidXMultiDex::class)
に変更しておくのも必要です。
バージョンによっては ShadowAndroidXMultiDex
がないことがあるので、shadows-multidex
のバージョンを上げておくことも必要です:
testImplementation "org.robolectric:shadows-multidex:4.3"
GlobalConfigProvider
の設定
で、この Config
を設定するために GlobalConfigProvider
を設定しておく必要があります:
👉 https://github.com/robolectric/robolectric/issues/4770#issuecomment-479559317
package your.own.app.provider
import com.google.auto.service.AutoService
import org.robolectric.annotation.Config
import org.robolectric.pluginapi.config.GlobalConfigProvider
import org.robolectric.shadows.multidex.ShadowAndroidXMultiDex
@AutoService(GlobalConfigProvider::class)
class CustomGlobalConfigProvider: GlobalConfigProvider {
override fun get(): Config {
return Config.Builder
.defaults()
.setShadows(ShadowAndroidXMultiDex::class.java)
.setPackageName("your.own.app")
.build()
}
}
で AutoService
を使ってるので以下を追加します:
testImplementation "com.google.auto.service:auto-service:1.0-rc6"
kaptTest "com.google.auto.service:auto-service:1.0-rc6"
これで Robolectric の Multidex が Jetifier 有効でもビルドできるようになるかと思います。