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 有効でもビルドできるようになるかと思います。