Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Robolectric and Android SDK 29

When will Robolectric be compatible with Android SDK 29? Did I upgraded too early by changing targetSdkVersion and compileSdkVersion to 29?

When I run my unit tests I get this huge stacktrace:

java.lang.IllegalArgumentException: API level 29 is not available      at org.robolectric.plugins.UnknownSdk.getJarPath(UnknownSdk.java:25)     at org.robolectric.internal.AndroidSandbox$SdkSandboxClassLoader.<init>(AndroidSandbox.java:102)     at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)     at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)     at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)     at java.lang.reflect.Constructor.newInstance(Constructor.java:423)     at org.robolectric.util.inject.Injector.inject(Injector.java:239)   at org.robolectric.util.inject.Injector.lambda$memoized$1(Injector.java:221)     at org.robolectric.util.inject.Injector$MemoizingProvider.get(Injector.java:485)     at org.robolectric.util.inject.Injector.getInstanceInternal(Injector.java:213)     at org.robolectric.util.inject.Injector.resolveDependencies(Injector.java:283)     at org.robolectric.util.inject.Injector.inject(Injector.java:237)   at org.robolectric.util.inject.Injector.lambda$memoized$1(Injector.java:221)     at org.robolectric.util.inject.Injector$MemoizingProvider.get(Injector.java:485)     at org.robolectric.util.inject.Injector.getInstanceInternal(Injector.java:213)     at org.robolectric.util.inject.Injector.getInstance(Injector.java:197)     at org.robolectric.util.inject.Injector.access$700(Injector.java:85)     at org.robolectric.util.inject.Injector$ScopeBuilderProvider.create(Injector.java:551)     at org.robolectric.util.inject.Injector$ScopeBuilderProvider.lambda$get$0(Injector.java:534)     at com.sun.proxy.$Proxy13.build(Unknown Source)     at org.robolectric.internal.SandboxManager.getAndroidSandbox(SandboxManager.java:57)     at org.robolectric.RobolectricTestRunner.getSandbox(RobolectricTestRunner.java:267)     at org.robolectric.RobolectricTestRunner.getSandbox(RobolectricTestRunner.java:63)     at org.robolectric.internal.SandboxTestRunner$2.evaluate(SandboxTestRunner.java:215)     at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)     at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)     at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)  at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)     at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)   at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)     at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)    at org.robolectric.internal.SandboxTestRunner$1.evaluate(SandboxTestRunner.java:96)     at org.junit.runners.ParentRunner.run(ParentRunner.java:363)    at org.junit.runner.JUnitCore.run(JUnitCore.java:137)  at org.junit.runner.JUnitCore.run(JUnitCore.java:115)  at org.junit.vintage.engine.execution.RunnerExecutor.execute(RunnerExecutor.java:40)     at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184)     at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)     at java.util.Iterator.forEachRemaining(Iterator.java:116)   at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801)     at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)     at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)     at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151)     at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174)     at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)     at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418)     at org.junit.vintage.engine.VintageTestEngine.executeAllChildren(VintageTestEngine.java:80)     at org.junit.vintage.engine.VintageTestEngine.execute(VintageTestEngine.java:71)     at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:229)     at org.junit.platform.launcher.core.DefaultLauncher.lambda$execute$6(DefaultLauncher.java:197)     at org.junit.platform.launcher.core.DefaultLauncher.withInterceptedStreams(DefaultLauncher.java:211)     at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:191)     at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:128)     at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:74)     at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)     at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)     at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70) 
like image 305
Bencri Avatar asked Jun 28 '19 14:06

Bencri


People also ask

Where do you put Robolectric properties?

properties File. To configure all Robolectric tests within a package or group of packages, create a file named robolectric. properties in the appropriate package. Generally, this file would be placed within the appropriate package directory under src/test/resources in your project tree.

What is the minimum android SDK version?

The Android app must have a minimum SDK version 19 or higher.

What is SDK version in Android?

The Android SDK consists of an emulator, development tools, sample projects with source code, and the required libraries to build Android applications. Let's look at the key components one by one.


1 Answers

Create a robolectric.properties file inside the app/src/test/resources directory with the following line:

sdk=28 

This will force Robolectric to use API 28 instead of 29.

like image 170
farmerbb Avatar answered Sep 19 '22 23:09

farmerbb