Android Studio经常抱怨缺少依赖项(突出显示为红色)。单元测试也失败

时间:2018-09-20 06:10:47

标签: android android-studio gradle ide dependencies

我似乎对Android Studio似乎无法正确解决依赖关系感到非常恼火。我会遇到各种错误,但通常标志是出问题的是导入语句用红色突出显示,例如

enter image description here

enter image description here

通常这是无害的,只会影响代码完成和符号导航。该应用程序将构建并运行良好。但是,对于单元测试,这似乎确实存在问题,因为它们无法运行。例如,我目前看到的是

WARNING: TestEngine with ID 'junit-vintage' failed to discover tests
java.lang.NoClassDefFoundError: android/support/v4/app/NotificationCompat$Builder
    at java.lang.Class.getDeclaredMethods0(Native Method)
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
    at java.lang.Class.getDeclaredMethods(Class.java:1975)
    at org.junit.platform.commons.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:1120)
    at org.junit.platform.commons.util.ReflectionUtils.findAllMethodsInHierarchy(ReflectionUtils.java:1061)
    at org.junit.platform.commons.util.ReflectionUtils.findMethods(ReflectionUtils.java:1045)
    at org.junit.platform.commons.util.ReflectionUtils.findMethods(ReflectionUtils.java:1031)
    at org.junit.vintage.engine.descriptor.VintageTestDescriptor.toMethodSource(VintageTestDescriptor.java:154)
    at org.junit.vintage.engine.descriptor.VintageTestDescriptor.toTestSource(VintageTestDescriptor.java:138)
    at org.junit.vintage.engine.descriptor.VintageTestDescriptor.<init>(VintageTestDescriptor.java:54)
    at org.junit.vintage.engine.discovery.TestClassRequestResolver.addChildrenRecursively(TestClassRequestResolver.java:110)
    at org.junit.vintage.engine.discovery.TestClassRequestResolver.createCompleteRunnerTestDescriptor(TestClassRequestResolver.java:93)
    at org.junit.vintage.engine.discovery.TestClassRequestResolver.determineRunnerTestDescriptor(TestClassRequestResolver.java:64)
    at org.junit.vintage.engine.discovery.TestClassRequestResolver.createRunnerTestDescriptor(TestClassRequestResolver.java:59)
    at org.junit.vintage.engine.discovery.VintageDiscoverer.lambda$discover$0(VintageDiscoverer.java:53)
    at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
    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.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:312)
    at java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:742)
    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.discovery.VintageDiscoverer.discover(VintageDiscoverer.java:55)
    at org.junit.vintage.engine.VintageTestEngine.discover(VintageTestEngine.java:61)
    at org.junit.platform.launcher.core.DefaultLauncher.discoverEngineRoot(DefaultLauncher.java:130)
    at org.junit.platform.launcher.core.DefaultLauncher.discoverRoot(DefaultLauncher.java:117)
    at org.junit.platform.launcher.core.DefaultLauncher.discover(DefaultLauncher.java:82)
    at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:48)
    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)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.intellij.rt.execution.application.AppMainV2.main(AppMainV2.java:131)
Caused by: java.lang.ClassNotFoundException: android.support.v4.app.NotificationCompat$Builder
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 43 more

这里似乎没有一致的行为。不导入的软件包会有所不同。

请注意,我的同事可以运行测试和编译,并且该项目以CI运行,所以我很确定该项目定义正确。

我没有解决问题的好方法。我已经尝试了以下所有内容的组合和排列

  • 已更新:Gradle同步
  • 使缓存无效
  • 清洁项目
  • 已关闭的项目
  • 手动删除项目中的文件(包括删除所有不必要的IDE文件)
  • 已删除$SOURCE/.gradle
  • 已删除~/.gradle

似乎没有任何效果(一致地)。我目前不知道如何在不花费大量时间深入研究Android Studio和gradle的情况下诊断问题。

有人对此有见识或明确的解决方案吗?

0 个答案:

没有答案