robolectric android studio,Android Studio 3.6.3/4.0/4.1/4.2配置Robolectric-4.5.1,Powermock-1.6.6单元测试环境...

基础配置以及常见错误

目前版本的Android Studio 3.6.3/4.0/4.1/4.2使用最新的Robolectric-4.5.1,只能配合Powermock-1.6.6,不能高于这个版本PowerMock, 尽管软件源中的版本已经更新升级到2.0.7版本了,但是Robolectric并没有及时更新依赖。尝试过使用最新版本的PowerMock,结果很多莫名的报错。

build.gradle

Vim

// 单元测试

testImplementation "com.android.support.test:runner:1.0.2"

testImplementation "junit:junit:4.13"

testImplementation "org.robolectric:robolectric:4.5.1"

// 注意AndroidX环境下,不能引入shadows-supportv4,Jetifier转换的时候报错

testImplementation "org.robolectric:shadows-supportv4:4.5.1"

// MultiDex支持

testImplementation "org.robolectric:shadows-multidex:4.5.1"

// 此处版本更新需要特别小心,目前 robolectric 跟 powermock 存在兼容问题,

// 需要固定的某些版本才能正常配合

// 依赖关系参考

// https://github.com/robolectric/robolectric/wiki/Using-PowerMock

testImplementation "org.powermock:powermock-module-junit4:1.6.6"

testImplementation "org.powermock:powermock-module-junit4-rule:1.6.6"

testImplementation "org.powermock:powermock-classloading-xstream:1.6.6"

testImplementation "org.powermock:powermock-api-mockito:1.6.6"

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

//单元测试

testImplementation"com.android.support.test:runner:1.0.2"

testImplementation"junit:junit:4.13"

testImplementation"org.robolectric:robolectric:4.5.1"

//注意AndroidX环境下,不能引入shadows-supportv4,Jetifier转换的时候报错

testImplementation"org.robolectric:shadows-supportv4:4.5.1"

//MultiDex支持

testImplementation"org.robolectric:shadows-multidex:4.5.1"

//此处版本更新需要特别小心,目前robolectric跟powermock存在兼容问题,

//需要固定的某些版本才能正常配合

//依赖关系参考

//https://github.com/robolectric/robolectric/wiki/Using-PowerMock

testImplementation"org.powermock:powermock-module-junit4:1.6.6"

testImplementation"org.powermock:powermock-module-junit4-rule:1.6.6"

testImplementation"org.powermock:powermock-classloading-xstream:1.6.6"

testImplementation"org.powermock:powermock-api-mockito:1.6.6"

如果 Windows 系统下出现如下提示,受限于Windows系统路径不能超过260个字符的限制

13:36 Error running 'xxxTest': Command line is too long. Shorten command line for xxxTest or also for Android JUnit default configuration.

1

13:36Errorrunning'xxxTest':Commandlineistoolong.ShortencommandlineforxxxTestoralsoforAndroidJUnitdefaultconfiguration.

在项目/.idea/workspace.xml文件中添加一行代码如下

/.idea/workspace.xml

XHTML

...

1

2

3

4

...

对于使用MultiDex的应用,如果报告如下错误:

java.lang.RuntimeException: MultiDex installation failed (/var/folders/h6/4__l0pyn32j1mkkysynnxydr0000gn/T/robolectric-Method_xxxxxxxxxxxx_isCorrect4035485067136008322/com.xxxx.xxxx.app-sourceDir (Is a directory)).

at android.support.multidex.MultiDex.install(MultiDex.java:121)

at com.xxx.xx.app.xx.application.xxxxxx.attachBaseContext(MyApplication.java:212)

at android.app.Application.attach(Application.java:212)

at org.robolectric.util.ReflectionHelpers.callInstanceMethod(ReflectionHelpers.java:283)

at org.robolectric.shadows.ShadowApplication.callAttach(ShadowApplication.java:79)

at org.robolectric.android.internal.AndroidTestEnvironment.installAndCreateApplication(AndroidTestEnvironment.java:250)

at org.robolectric.android.internal.AndroidTestEnvironment.setUpApplicationState(AndroidTestEnvironment.java:169)

at org.robolectric.RobolectricTestRunner.beforeTest(RobolectricTestRunner.java:301)

at org.robolectric.internal.SandboxTestRunner$2.lambda$evaluate$0(SandboxTestRunner.java:243)

at org.robolectric.internal.bytecode.Sandbox.lambda$runOnMainThread$0(Sandbox.java:89)

at java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:266)

at java.util.concurrent.FutureTask.run(FutureTask.java)

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)

at java.lang.Thread.run(Thread.java:748)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

java.lang.RuntimeException:MultiDexinstallationfailed(/var/folders/h6/4__l0pyn32j1mkkysynnxydr0000gn/T/robolectric-Method_xxxxxxxxxxxx_isCorrect4035485067136008322/com.xxxx.xxxx.app-sourceDir(Isadirectory)).

atandroid.support.multidex.MultiDex.install(MultiDex.java:121)

atcom.xxx.xx.app.xx.application.xxxxxx.attachBaseContext(MyApplication.java:212)

atandroid.app.Application.attach(Application.java:212)

atorg.robolectric.util.ReflectionHelpers.callInstanceMethod(ReflectionHelpers.java:283)

atorg.robolectric.shadows.ShadowApplication.callAttach(ShadowApplication.java:79)

atorg.robolectric.android.internal.AndroidTestEnvironment.installAndCreateApplication(AndroidTestEnvironment.java:250)

atorg.robolectric.android.internal.AndroidTestEnvironment.setUpApplicationState(AndroidTestEnvironment.java:169)

atorg.robolectric.RobolectricTestRunner.beforeTest(RobolectricTestRunner.java:301)

atorg.robolectric.internal.SandboxTestRunner$2.lambda$evaluate$0(SandboxTestRunner.java:243)

atorg.robolectric.internal.bytecode.Sandbox.lambda$runOnMainThread$0(Sandbox.java:89)

atjava.util.concurrent.FutureTask.run$$$capture(FutureTask.java:266)

atjava.util.concurrent.FutureTask.run(FutureTask.java)

atjava.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)

atjava.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)

atjava.lang.Thread.run(Thread.java:748)

需要在build.gradle中引入

build.gradle

Vim

// MultiDex支持

testImplementation "org.robolectric:shadows-multidex:4.5.1"

1

2

3

//MultiDex支持

testImplementation"org.robolectric:shadows-multidex:4.5.1"

例子测试代码:

ExampleUnitTest.java

Java

package com.mobibrw.example;

import org.junit.Test;

import static org.junit.Assert.*;

import org.junit.runner.RunWith;

import org.robolectric.RobolectricTestRunner;

import org.robolectric.annotation.Config;

import org.robolectric.shadows.multidex.ShadowMultiDex;

/**

* Example local unit test, which will execute on the development machine (host).

*

* @see Testing documentation

*/

@RunWith(RobolectricTestRunner.class)

@PowerMockIgnore("jdk.internal.reflect.*")

@Config(shadows = ShadowMultiDex.class)

public class ExampleUnitTest {

@Test

public void addition_isCorrect() {

assertEquals(4, 2 + 2);

}

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

packagecom.mobibrw.example;

importorg.junit.Test;

importstaticorg.junit.Assert.*;

importorg.junit.runner.RunWith;

importorg.robolectric.RobolectricTestRunner;

importorg.robolectric.annotation.Config;

importorg.robolectric.shadows.multidex.ShadowMultiDex;

/**

* Example local unit test, which will execute on the development machine (host).

*

* @see Testing documentation

*/

@RunWith(RobolectricTestRunner.class)

@PowerMockIgnore("jdk.internal.reflect.*")

@Config(shadows=ShadowMultiDex.class)

publicclassExampleUnitTest{

@Test

publicvoidaddition_isCorrect(){

assertEquals(4,2+2);

}

}

注意,需要

@Config(shadows = ShadowMultiDex.class)

1

@Config(shadows=ShadowMultiDex.class)

才能使得配置生效。

如果发生如下错误:

java.lang.VerifyError: Expecting a stackmap frame at branch target 43

Exception Details:

Location:

com/meizu/cloud/pushsdk/base/IntentReceiver.onReceive(Landroid/content/Context;Landroid/content/Intent;)V @6: ifne

Reason:

Expected stackmap frame at this location.

Bytecode:

0x0000000: b200 08b6 0013 9a00 25bb 0004 5912 0110

0x0000010: 0ab7 000e 59b3 000a b600 10bb 0003 59b2

0x0000020: 000a b600 0fb7 000c b300 09b2 0009 bb00

0x0000030: 0659 2a2b 2cb7 0011 b600 0d57 b1

at java.lang.Class.getDeclaredConstructors0(Native Method)

at java.lang.Class.privateGetDeclaredConstructors(Class.java:2671)

at java.lang.Class.getConstructor0(Class.java:3075)

at java.lang.Class.getDeclaredConstructor(Class.java:2178)

at org.robolectric.util.ReflectionHelpers.callConstructor(ReflectionHelpers.java:396)

at org.robolectric.internal.bytecode.ShadowImpl.newInstanceOf(ShadowImpl.java:18)

at org.robolectric.shadow.api.Shadow.newInstanceOf(Shadow.java:35)

at org.robolectric.android.internal.AndroidTestEnvironment.registerBroadcastReceivers(AndroidTestEnvironment.java:541)

at org.robolectric.android.internal.AndroidTestEnvironment.installAndCreateApplication(AndroidTestEnvironment.java:265)

at org.robolectric.android.internal.AndroidTestEnvironment.setUpApplicationState(AndroidTestEnvironment.java:169)

at org.robolectric.RobolectricTestRunner.beforeTest(RobolectricTestRunner.java:301)

at org.robolectric.internal.SandboxTestRunner$2.lambda$evaluate$0(SandboxTestRunner.java:243)

at org.robolectric.internal.bytecode.Sandbox.lambda$runOnMainThread$0(Sandbox.java:89)

at java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:266)

at java.util.concurrent.FutureTask.run(FutureTask.java)

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)

at java.lang.Thread.run(Thread.java:748)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

java.lang.VerifyError:Expectingastackmapframeatbranchtarget43

ExceptionDetails:

Location:

com/meizu/cloud/pushsdk/base/IntentReceiver.onReceive(Landroid/content/Context;Landroid/content/Intent;)V@6:ifne

Reason:

Expectedstackmapframeatthislocation.

Bytecode:

0x0000000:b20008b600139a0025bb000459120110

0x0000010:0ab7000e59b3000ab60010bb000359b2

0x0000020:000ab6000fb7000cb30009b20009bb00

0x0000030:06592a2b2cb70011b6000d57b1

atjava.lang.Class.getDeclaredConstructors0(NativeMethod)

atjava.lang.Class.privateGetDeclaredConstructors(Class.java:2671)

atjava.lang.Class.getConstructor0(Class.java:3075)

atjava.lang.Class.getDeclaredConstructor(Class.java:2178)

atorg.robolectric.util.ReflectionHelpers.callConstructor(ReflectionHelpers.java:396)

atorg.robolectric.internal.bytecode.ShadowImpl.newInstanceOf(ShadowImpl.java:18)

atorg.robolectric.shadow.api.Shadow.newInstanceOf(Shadow.java:35)

atorg.robolectric.android.internal.AndroidTestEnvironment.registerBroadcastReceivers(AndroidTestEnvironment.java:541)

atorg.robolectric.android.internal.AndroidTestEnvironment.installAndCreateApplication(AndroidTestEnvironment.java:265)

atorg.robolectric.android.internal.AndroidTestEnvironment.setUpApplicationState(AndroidTestEnvironment.java:169)

atorg.robolectric.RobolectricTestRunner.beforeTest(RobolectricTestRunner.java:301)

atorg.robolectric.internal.SandboxTestRunner$2.lambda$evaluate$0(SandboxTestRunner.java:243)

atorg.robolectric.internal.bytecode.Sandbox.lambda$runOnMainThread$0(Sandbox.java:89)

atjava.util.concurrent.FutureTask.run$$$capture(FutureTask.java:266)

atjava.util.concurrent.FutureTask.run(FutureTask.java)

atjava.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)

atjava.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)

atjava.lang.Thread.run(Thread.java:748)

JDK 1.7引入了代码校验,这个我们需要关闭这个功能才行,如下图:08509166f00c4ccbc010179262c33cde.png

可惜的是, 目前如果需要在Android Studio中运行或者测试单个测试用例,需要每个测试文件单独添加才行。

对于使用

$ bash gradlew test

1

$bashgradlewtest

运行测试的情况来说,需要在项目app/build.gradle下添加如下内容:

build.gradle

Vim

android {

...............................

testOptions {

unitTests.all { jvmArgs '-noverify' }

}

...............................

}

1

2

3

4

5

6

7

android{

...............................

testOptions{

unitTests.all{jvmArgs'-noverify'}

}

...............................

}

也可以添加到defaultConfig下面,如下:

build.gradle

Vim

android {

...............................

defaultConfig {

.....................

testOptions {

unitTests.all { jvmArgs '-noverify' }

}

.....................

}

...............................

}

1

2

3

4

5

6

7

8

9

10

11

android{

...............................

defaultConfig{

.....................

testOptions{

unitTests.all{jvmArgs'-noverify'}

}

.....................

}

...............................

}

这个问题更详细的解释如下:

Java 7引入了更严格的验证,并稍微改变了类格式 - 以包含用于验证代码是否正确的堆栈映射。您看到的异常意味着某些方法没有有效的堆栈映射。

Java版本或字节码工具都可能是责任。通常这意味着应用程序使用的库生成的节码不能通过更严格的验证。因此,可以将其作为一个错误报告给库的开发者。

作为解决方法,您可以添加-noverify到JVM参数以禁用验证。

在Java 7中,还可以通过添加 -XX:-UseSplitVerifier 使用较不严格的验证方法,但在Java 8中删除了该选项(-XX:-UseSplitVerifier)。

很大的可能是第三方库是低版本的JDK编译的,然后在高版本的JDK版本中使用。

1

2

3

4

5

6

7

8

9

Java7引入了更严格的验证,并稍微改变了类格式-以包含用于验证代码是否正确的堆栈映射。您看到的异常意味着某些方法没有有效的堆栈映射。

Java版本或字节码工具都可能是责任。通常这意味着应用程序使用的库生成的节码不能通过更严格的验证。因此,可以将其作为一个错误报告给库的开发者。

作为解决方法,您可以添加-noverify到JVM参数以禁用验证。

在Java7中,还可以通过添加-XX:-UseSplitVerifier使用较不严格的验证方法,但在Java8中删除了该选项(-XX:-UseSplitVerifier)。

很大的可能是第三方库是低版本的JDK编译的,然后在高版本的JDK版本中使用。

脚本中运行全部单元测试:

$ bash gradlew test

1

$bashgradlewtest

打包编译发行版本:

$ bash gradlew clean assembleRelease

1

$bashgradlewcleanassembleRelease

最后,编译执行的JDK的版本一般建议跟Android Studio使用的JDK一致,完全可以使用Android Studio自带的JDK进行编译。

$ echo "export JAVA_HOME='/Applications/Android Studio.app/Contents/jre/jdk/Contents/Home'" >> ~/.bashrc

$ source ~/.bashrc

# 由于macOS Catalina 10.15.6已经切换到zsh了,因此需要配置zsh的配置文件

$ echo "export JAVA_HOME='/Applications/Android Studio.app/Contents/jre/jdk/Contents/Home'" >> ~/.zprofile

$ source ~/.zprofile

1

2

3

4

5

6

7

8

$echo"export JAVA_HOME='/Applications/Android Studio.app/Contents/jre/jdk/Contents/Home'">>~/.bashrc

$source~/.bashrc

# 由于macOS Catalina 10.15.6已经切换到zsh了,因此需要配置zsh的配置文件

$echo"export JAVA_HOME='/Applications/Android Studio.app/Contents/jre/jdk/Contents/Home'">>~/.zprofile

$source~/.zprofile

当前建议的版本

Android Studio 4.0/4.1 JDK Version

Shell

$ java -version

openjdk version "1.8.0_242-release"

OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b3-6222593)

OpenJDK 64-Bit Server VM (build 25.242-b3-6222593, mixed mode)

1

2

3

4

$java-version

openjdkversion"1.8.0_242-release"

OpenJDKRuntimeEnvironment(build1.8.0_242-release-1644-b3-6222593)

OpenJDK64-BitServerVM(build25.242-b3-6222593,mixedmode)

目前,暂时不建议在生产环境中使用Android Studio 4.2发布版本,目前测试发现Android Studio 4.2编译出的代码,在华为系列手机上存在问题,主要是崩溃问题。可能出现如下崩溃日志:

A/DEBUG: *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***

A/DEBUG: Build fingerprint: 'HONOR/BMH-AN10/HWBMH:10/HUAWEIBMH-AN10/11.0.0.168C00:user/release-keys'

A/DEBUG: Revision: '0'

A/DEBUG: ABI: 'arm64'

A/DEBUG: SYSVMTYPE: Maple

APPVMTYPE: Art

A/DEBUG: Timestamp: 2021-05-10 17:32:02+0800

A/DEBUG: pid: 25826, tid: 25843, name: HeapTaskDaemon >>> com.xx.xxx <<<

A/DEBUG: uid: 10587

A/DEBUG: signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x10

A/DEBUG: Cause: null pointer dereference

A/DEBUG: x0 00000079388b9200 x1 000000792cc8ea98 x2 0000000000000008 x3 000000007145cdf0

A/DEBUG: x4 0000000000000474 x5 000000001339122c x6 12ec18c812ec2148 x7 0000000071485dd0

A/DEBUG: x8 0000000000000000 x9 89793691a5863ce4 x10 0000000052c00000 x11 0000000000000008

A/DEBUG: x12 000000000000000b x13 000009ec00000079 x14 0005ffb86a66d4d9 x15 00000aff3f1ff8cb

A/DEBUG: x16 00000079387f9e38 x17 00000079ba841b40 x18 00000078d47be000 x19 000000792cc8ea98

A/DEBUG: x20 000000007145cdf0 x21 0000000000000008 x22 0000000071bdb820 x23 0000000071bd9f98

A/DEBUG: x24 0000000000000028 x25 0000000000002a30 x26 000000792cc90020 x27 0000000000001888

A/DEBUG: x28 0000000071bd9fb0 x29 000000792cc8ea80

A/DEBUG: sp 000000792cc8ea10 lr 0000007938432790 pc 000000793843276c

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

A/DEBUG:************************************************

A/DEBUG:Buildfingerprint:'HONOR/BMH-AN10/HWBMH:10/HUAWEIBMH-AN10/11.0.0.168C00:user/release-keys'

A/DEBUG:Revision:'0'

A/DEBUG:ABI:'arm64'

A/DEBUG:SYSVMTYPE:Maple

APPVMTYPE:Art

A/DEBUG:Timestamp:2021-05-1017:32:02+0800

A/DEBUG:pid:25826,tid:25843,name:HeapTaskDaemon>>>com.xx.xxx<<<

A/DEBUG:uid:10587

A/DEBUG:signal11(SIGSEGV),code1(SEGV_MAPERR),faultaddr0x10

A/DEBUG:Cause:nullpointerdereference

A/DEBUG:x000000079388b9200x1000000792cc8ea98x20000000000000008x3000000007145cdf0

A/DEBUG:x40000000000000474x5000000001339122cx612ec18c812ec2148x70000000071485dd0

A/DEBUG:x80000000000000000x989793691a5863ce4x100000000052c00000x110000000000000008

A/DEBUG:x12000000000000000bx13000009ec00000079x140005ffb86a66d4d9x1500000aff3f1ff8cb

A/DEBUG:x1600000079387f9e38x1700000079ba841b40x1800000078d47be000x19000000792cc8ea98

A/DEBUG:x20000000007145cdf0x210000000000000008x220000000071bdb820x230000000071bd9f98

A/DEBUG:x240000000000000028x250000000000002a30x26000000792cc90020x270000000000001888

A/DEBUG:x280000000071bd9fb0x29000000792cc8ea80

A/DEBUG:sp000000792cc8ea10lr0000007938432790pc000000793843276c

如果升级到Android Studio 4.2执行测试用例的时候,可能报告如下错误:

Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.973 sec <<< FAILURE! - in com.Test

initializationError(com.Test) Time elapsed: 0.007 sec <<< ERROR!

org.objenesis.ObjenesisException: java.lang.reflect.InvocationTargetException

Caused by: java.lang.reflect.InvocationTargetException

Caused by: java.lang.IllegalAccessError: class jdk.internal.reflect.ConstructorAccessorImpl loaded by org/powermock/core/classloader/MockClassLoader cannot access jdk/internal/reflect superclass jdk.internal.reflect.MagicAccessorImpl

1

2

3

4

5

Testsrun:1,Failures:0,Errors:1,Skipped:0,Timeelapsed:0.973sec<<

initializationError(com.Test)Timeelapsed:0.007sec<<

org.objenesis.ObjenesisException:java.lang.reflect.InvocationTargetException

Causedby:java.lang.reflect.InvocationTargetException

Causedby:java.lang.IllegalAccessError:classjdk.internal.reflect.ConstructorAccessorImplloadedbyorg/powermock/core/classloader/MockClassLoadercannotaccessjdk/internal/reflectsuperclassjdk.internal.reflect.MagicAccessorImpl

这个问题是由于Android Studio 4.2自带的JDK版本已经升级到了Java 11.0.8版本,跟PowerMock不兼容。

解决此问题的方式是在测试用例的忽略列表中增加:

@PowerMockIgnore("jdk.internal.reflect.*")

1

@PowerMockIgnore("jdk.internal.reflect.*")

另外,在Android Studio 4.2使用Robolectric-4.5.1以下的版本(比如Robolectric-4.3.1)执行测试用例的时候,可能报告如下错误信息:

[Robolectric] : sdk=28; resources=BINARY

Downloading from maven

Downloading: org/robolectric/android-all/10-robolectric-5803371/android-all-10-robolectric-5803371.pom from repository sonatype at https://oss.sonatype.org/content/groups/public/

Error transferring file: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: sun.security.ssl.SSLContextImpl$DefaultSSLContext)

[WARNING] Unable to get resource 'org.robolectric:android-all:pom:10-robolectric-5803371' from repository sonatype (https://oss.sonatype.org/content/groups/public/): Error transferring file: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: sun.security.ssl.SSLContextImpl$DefaultSSLContext)

Downloading: org/robolectric/android-all/10-robolectric-5803371/android-all-10-robolectric-5803371.pom from repository central at http://repo1.maven.org/maven2

Error transferring file: Server returned HTTP response code: 501 for URL: http://repo1.maven.org/maven2/org/robolectric/android-all/10-robolectric-5803371/android-all-10-robolectric-5803371.pom

[WARNING] Unable to get resource 'org.robolectric:android-all:pom:10-robolectric-5803371' from repository central (http://repo1.maven.org/maven2): Error transferring file: Server returned HTTP response code: 501 for URL: http://repo1.maven.org/maven2/org/robolectric/android-all/10-robolectric-5803371/android-all-10-robolectric-5803371.pom

Downloading: org/robolectric/android-all/10-robolectric-5803371/android-all-10-robolectric-5803371.jar from repository sonatype at https://oss.sonatype.org/content/groups/public/

Error transferring file: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: sun.security.ssl.SSLContextImpl$DefaultSSLContext)

[WARNING] Unable to get resource 'org.robolectric:android-all:jar:10-robolectric-5803371' from repository sonatype (https://oss.sonatype.org/content/groups/public/): Error transferring file: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: sun.security.ssl.SSLContextImpl$DefaultSSLContext)

Downloading: org/robolectric/android-all/10-robolectric-5803371/android-all-10-robolectric-5803371.jar from repository central at http://repo1.maven.org/maven2

Error transferring file: Server returned HTTP response code: 501 for URL: http://repo1.maven.org/maven2/org/robolectric/android-all/10-robolectric-5803371/android-all-10-robolectric-5803371.jar

[WARNING] Unable to get resource 'org.robolectric:android-all:jar:10-robolectric-5803371' from repository central (http://repo1.maven.org/maven2): Error transferring file: Server returned HTTP response code: 501 for URL: http://repo1.maven.org/maven2/org/robolectric/android-all/10-robolectric-5803371/android-all-10-robolectric-5803371.jar

1

2

3

4

5

6

7

8

9

10

11

12

13

14

[Robolectric]:sdk=28;resources=BINARY

Downloadingfrommaven

Downloading:org/robolectric/android-all/10-robolectric-5803371/android-all-10-robolectric-5803371.pomfromrepositorysonatypeathttps://oss.sonatype.org/content/groups/public/

Errortransferringfile:java.security.NoSuchAlgorithmException:Errorconstructingimplementation(algorithm:Default,provider:SunJSSE,class:sun.security.ssl.SSLContextImpl$DefaultSSLContext)

[WARNING]Unabletogetresource'org.robolectric:android-all:pom:10-robolectric-5803371'fromrepositorysonatype(https://oss.sonatype.org/content/groups/public/):Errortransferringfile:java.security.NoSuchAlgorithmException:Errorconstructingimplementation(algorithm:Default,provider:SunJSSE,class:sun.security.ssl.SSLContextImpl$DefaultSSLContext)

Downloading:org/robolectric/android-all/10-robolectric-5803371/android-all-10-robolectric-5803371.pomfromrepositorycentralathttp://repo1.maven.org/maven2

Errortransferringfile:ServerreturnedHTTPresponsecode:501forURL:http://repo1.maven.org/maven2/org/robolectric/android-all/10-robolectric-5803371/android-all-10-robolectric-5803371.pom

[WARNING]Unabletogetresource'org.robolectric:android-all:pom:10-robolectric-5803371'fromrepositorycentral(http://repo1.maven.org/maven2):Errortransferringfile:ServerreturnedHTTPresponsecode:501forURL:http://repo1.maven.org/maven2/org/robolectric/android-all/10-robolectric-5803371/android-all-10-robolectric-5803371.pom

Downloading:org/robolectric/android-all/10-robolectric-5803371/android-all-10-robolectric-5803371.jarfromrepositorysonatypeathttps://oss.sonatype.org/content/groups/public/

Errortransferringfile:java.security.NoSuchAlgorithmException:Errorconstructingimplementation(algorithm:Default,provider:SunJSSE,class:sun.security.ssl.SSLContextImpl$DefaultSSLContext)

[WARNING]Unabletogetresource'org.robolectric:android-all:jar:10-robolectric-5803371'fromrepositorysonatype(https://oss.sonatype.org/content/groups/public/):Errortransferringfile:java.security.NoSuchAlgorithmException:Errorconstructingimplementation(algorithm:Default,provider:SunJSSE,class:sun.security.ssl.SSLContextImpl$DefaultSSLContext)

Downloading:org/robolectric/android-all/10-robolectric-5803371/android-all-10-robolectric-5803371.jarfromrepositorycentralathttp://repo1.maven.org/maven2

Errortransferringfile:ServerreturnedHTTPresponsecode:501forURL:http://repo1.maven.org/maven2/org/robolectric/android-all/10-robolectric-5803371/android-all-10-robolectric-5803371.jar

[WARNING]Unabletogetresource'org.robolectric:android-all:jar:10-robolectric-5803371'fromrepositorycentral(http://repo1.maven.org/maven2):Errortransferringfile:ServerreturnedHTTPresponsecode:501forURL:http://repo1.maven.org/maven2/org/robolectric/android-all/10-robolectric-5803371/android-all-10-robolectric-5803371.jar

这个问题是由于Android Studio 4.2自带的JDK版本已经升级到了Java 11.0.8版本,当Robolectric去服务器下载依赖包的时候,默认使用HTTP地址。当服务器强制要求重定向到HTTPS地址,这部分代码处理存在问题。

解决这个问题的方法就是升级到 Robolectric-4.5.1以及以上的版本即可。

参考链接

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值