代理出现的奇奇怪怪的问题

公司上网需要代理,然后我就在mac 的网络设置里面加了代理,但是android studio还是不可以,
你要下载gradle的一些东西,你需要在gradle.properites里面加上代理,
你要update svn git,你需要在preference里面 设置 http proxy


genymotion 出现的问题,还是在公司 我虚拟机需要设置代理才能上网,然后回到家,我去掉了电脑和androidstudio的代理,但是忘记去掉虚拟机的了,结果就是 我build app,发现找不到device,后来去掉虚拟机的代理才找到

上面连不上adb 不是主要原因,原因是 geymention adb 和 android studio 的冲突了。如果你先启动 geymention 然后在build apk就 又可能出现这个问题。

解决方法(这个是我实验过的 可行)
1先停止相关的模拟器,比如genymotion emulator之后重新开启adb:

(Tools > Android > Unchecked Unable ADB Integration 之后再重新勾选即可)

2.最后再打开相关的模拟器或者真机调试即可

或者
http://stackoverflow.com/questions/26137634/ddms-adb-exe-start-server-failed-run-manually-if-necessary-android-studio

http://stackoverflow.com/questions/26137634/ddms-adb-exe-start-server-failed-run-manually-if-necessary-android-studio
<think>好的,我现在需要解决用户在使用Jacoco进行离线代码覆盖率时遇到的错误。错误信息是“Caused by: java.io.IOException: Error while instrumenting sun/security/jgss/SunProvider.”,并且出现了“java.lang.instrument.IllegalClassFormatException”。用户提供的Gradle配置中涉及离线插桩,可能是在处理Android项目时遇到了问题。 首先,我需要理解用户的问题背景。用户之前已经配置了Jacoco的离线插桩,但在运行任务时遇到了异常。错误发生在处理SunProvider类时,这属于JDK的内部类。用户之前可能已经尝试过一些配置,但问题依然存在。 接下来,我需要分析错误的原因。错误信息中的“SunProvider”类属于JDK内部的类,位于sun.security包下。这类类通常不建议直接操作,因为它们可能依赖特定的JVM行为,或者被签名保护。Jacoco在插桩时可能会修改这些类的字节码,导致异常。 可能的原因有几个: 1. **JDK版本问题**:用户使用的JDK版本可能存在与Jacoco不兼容的类结构,尤其是高版本JDK中的模块化系统(JPMS)可能影响插桩。 2. **Jacoco版本过旧**:用户当前使用的Jacoco版本(0.8.5)可能不支持某些JDK版本的类,导致插桩失败。 3. **排除配置错误**:用户的配置中可能有正确排除JDK内部类,导致Jacoco尝试插桩这些不可修改的类。 4. **PowerMock与Jacoco的冲突**:用户提到PowerMock导致覆盖率归零,可能需要其他解决方案,而当前的离线插桩配置可能引入了额外的问题。 接下来,我需要逐一验证这些可能性。首先检查排除配置是否正确。用户之前的配置中是否有排除JDK内部类?在用户提供的配置中,确实有: ```groovy jacoco.excludes = ['jdk.internal.*'] ``` 但错误发生在sun.security包,而不是jdk.internal。因此,排除项可能不够全面。需要补充排除sun.*和其他可能的JDK内部包。 其次,考虑Jacoco版本。0.8.5可能对某些JDK版本支持不佳,建议升级到更新的版本,例如0.8.11或更高,可能包含对高版本JDK的支持。 然后,检查JDK版本。如果用户使用的是JDK 17或更高版本,模块系统可能导致Jacoco无法正确处理某些类。需要确认用户是否在使用高版本JDK,并建议使用JDK 8或11进行测试,因为这些版本更稳定且广泛支持。 另外,用户提到PowerMock的问题,可能需要调整测试框架或使用其他方式处理,比如替换PowerMock为MockK等更现代的框架,减少对字节码操作的依赖。 最后,关于错误的具体处理步骤可能包括: 1. 扩展排除列表,添加对sun.security等包的排除。 2. 升级Jacoco版本。 3. 更换JDK版本。 4. 调整测试框架减少冲突。 在回答用户时,需要将这些可能性和解决方案分点列出,并给出具体的配置修改建议,同时提醒用户注意JDK版本的影响。此外,还需要提供相关的问题供用户进一步参考,确保他们能够全面排查问题。</think>您遇到的问题是由于Jacoco尝试对JDK内部类(如`sun/security/jgss/SunProvider`)进行插桩导致的。以下是具体原因及解决方案: --- ### **问题原因** 1. **JDK内部类保护机制** `sun.security`包下的类属于JDK核心类,部分类被签名保护或依赖JVM底层实现,Jacoco插桩时修改字节码会触发`IllegalClassFormatException`。 2. **Jacoco版本兼容性** 您当前使用的Jacoco版本(0.8.5)可能不支持某些JDK特性(如高版本JDK的模块化系统)。 3. **排除规则不完整** 当前配置仅排除了`jdk.internal.*`,但未覆盖`sun.security`等其他JDK内部包。 --- ### **解决方案** #### 1. **完善Jacoco排除规则** 在`build.gradle`中添加对`sun.security`等JDK内部类的排除: ```groovy tasks.withType(Test) { jacoco.includeNoLocationClasses = true jacoco.excludes = [ 'jdk.internal.*', 'sun.security.*', 'com.sun.*', 'javax.crypto.*', 'org.omg.*' ] } ``` #### 2. **升级Jacoco版本** 将`jacoco.toolVersion`升级到最新稳定版(如`0.8.11`),以支持更高版本的JDK: ```groovy jacoco { toolVersion = "0.8.11" } ``` #### 3. **使用JDK 8/11构建** 高版本JDK(如JDK 17+)的模块化系统(JPMS)可能导致Jacoco插桩失败。建议切换到JDK 8或11: ```bash # 查看当前JDK版本 java -version # 推荐使用JDK 8或11 ``` #### 4. **避免PowerMock与Jacoco冲突** PowerMock通过字节码操作修改类行为,可能导致Jacoco无法正确收集覆盖率。可尝试: - **替代方案**:用[MockK](https://mockk.io/)等现代测试框架替代PowerMock。 - **排除PowerMock相关类**:在Jacoco配置中排除PowerMock生成的代理类。 #### 5. **验证插桩路径** 确保`instrument`任务的输入路径正确。对于Android项目,类路径可能需要调整: ```groovy fileset(dir: "$buildDir/intermediates/javac/debug/classes") ``` --- ### **验证步骤** 1. **清理构建环境**: ```bash ./gradlew clean ``` 2. **重新生成覆盖率报告**: ```bash ./gradlew createOfflineTestCoverageReport jacocoTestReport ``` --- ### **示例修改后的配置片段** ```groovy jacoco { toolVersion = "0.8.11" } tasks.withType(Test) { jacoco.includeNoLocationClasses = true jacoco.excludes = [ 'jdk.internal.*', 'sun.security.*', 'com.sun.*', 'javax.crypto.*', 'org.omg.*' ] } task instrument(dependsOn:'compileDebugUnitTestSources') { doLast { ant.taskdef(name: 'instrument', ... ) ant.instrument(destdir: offline_instrumented_outputDir) { fileset(dir: "$buildDir/intermediates/javac/debug/classes") } } } ``` --- ### **补充说明** - **JDK模块化影响**:JDK 9+引入的模块系统(JPMS)可能使部分类无法被插桩,建议使用JDK 8/11。 - **Jacoco插桩原理**:Jacoco通过修改类的字节码插入探针来收集覆盖率数据,但JDK核心类通常有严格的安全限制。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值