从build Gradle(Android studio)中的测试中排除lib-jar文件

从build Gradle(Android studio)中的测试中排除lib-jar文件,android,unit-testing,android-gradle-plugin,Android,Unit Testing,Android Gradle Plugin,为了访问android hidden API,在本例中,为了访问项目中包含的UpdateEngine类我从[]访问了一个带有android hidden API的jar 该应用程序运行正常,我可以毫无问题地访问所有UpdateEngine功能 问题是我所有的测试,包括单元测试都停止了 我发现如果我从项目中删除android.jar文件,测试就可以工作。所以我想从测试中排除整个jar。我该怎么做 在我的应用程序的buil.gradle中,我有: dependencies { // the

为了访问android hidden API,在本例中,为了访问项目中包含的UpdateEngine类我从[]访问了一个带有android hidden API的jar

该应用程序运行正常,我可以毫无问题地访问所有UpdateEngine功能

问题是我所有的测试,包括单元测试都停止了

我发现如果我从项目中删除android.jar文件,测试就可以工作。所以我想从测试中排除整个jar。我该怎么做

在我的应用程序的buil.gradle中,我有:

dependencies {
    // the lib file android.jar is inside folder libs-sdk
    compileOnly fileTree(include: ['*.jar'], dir: 'libs-sdk')

    (...)
}
如果我使用jar执行测试,我会出现如下错误:

java.lang.ClassFormatError: Illegal field modifiers in class android/content/Context: 0x1E

    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
    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)
    at org.powermock.core.classloader.MockClassLoader.loadModifiedClass(MockClassLoader.java:190)
    at org.powermock.core.classloader.DeferSupportingClassLoader.loadClass(DeferSupportingClassLoader.java:71)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at java.lang.Class.getDeclaredConstructors0(Native Method)
    at java.lang.Class.privateGetDeclaredConstructors(Class.java:2671)
    at java.lang.Class.getDeclaredConstructors(Class.java:2020)
    at org.powermock.api.mockito.repackaged.ClassImposterizer.setConstructorsAccessible(ClassImposterizer.java:86)
    at org.powermock.api.mockito.repackaged.ClassImposterizer.imposterise(ClassImposterizer.java:72)
    at org.powermock.api.mockito.internal.mockcreation.MockCreator.createMethodInvocationControl(MockCreator.java:122)
    at org.powermock.api.mockito.internal.mockcreation.MockCreator.createMock(MockCreator.java:70)
    at org.powermock.api.mockito.internal.mockcreation.MockCreator.mock(MockCreator.java:47)
    at org.powermock.api.mockito.PowerMockito.mock(PowerMockito.java:144)
    at ch.myesmart.ota.BaseTests.<init>(BaseTests.java:35)
    at ch.myesmart.ota.yaml.YamlHelperTest.<init>(YamlHelperTest.java:12)
    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.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.createTestInstance(PowerMockJUnit44RunnerDelegateImpl.java:187)
    at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.createTest(PowerMockJUnit44RunnerDelegateImpl.java:172)
    at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.invokeTestMethod(PowerMockJUnit44RunnerDelegateImpl.java:194)
    at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.runMethods(PowerMockJUnit44RunnerDelegateImpl.java:147)
    at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$1.run(PowerMockJUnit44RunnerDelegateImpl.java:121)
    at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:34)
    at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:44)
    at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.run(PowerMockJUnit44RunnerDelegateImpl.java:123)
    at org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.run(JUnit4TestSuiteChunkerImpl.java:121)
    at org.powermock.modules.junit4.common.internal.impl.AbstractCommonPowerMockRunner.run(AbstractCommonPowerMockRunner.java:53)
    at org.powermock.modules.junit4.PowerMockRunner.run(PowerMockRunner.java:59)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
    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)
java.lang.ClassFormatError:类android/content/Context中的字段修饰符非法:0x1E
位于java.lang.ClassLoader.defineClass1(本机方法)
位于java.lang.ClassLoader.defineClass(ClassLoader.java:763)
位于java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
位于java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
在java.net.URLClassLoader.access$100(URLClassLoader.java:73)
在java.net.URLClassLoader$1.run(URLClassLoader.java:368)
在java.net.URLClassLoader$1.run(URLClassLoader.java:362)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.net.URLClassLoader.findClass(URLClassLoader.java:361)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:424)
位于sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:357)
位于org.powermock.core.classloader.MockClassLoader.loadModifiedClass(MockClassLoader.java:190)
位于org.powermock.core.classloader.DeferSupportingClassLoader.loadClass(DeferSupportingClassLoader.java:71)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:357)
位于java.lang.Class.getDeclaredConstructors0(本机方法)
位于java.lang.Class.privateGetDeclaredConstructors(Class.java:2671)
位于java.lang.Class.getDeclaredConstructors(Class.java:2020)
位于org.powermock.api.mockito.repacked.ClassImposterizer.setConstructorsAccessible(ClassImposterizer.java:86)
位于org.powermock.api.mockito.repacked.ClassImposterizer.importise(ClassImposterizer.java:72)
位于org.powermock.api.mockito.internal.mockcreation.MockCreator.createMethodInvocationControl(MockCreator.java:122)
位于org.powermock.api.mockito.internal.mockcreation.MockCreator.createMock(MockCreator.java:70)
位于org.powermock.api.mockito.internal.mockcreation.MockCreator.mock(MockCreator.java:47)
位于org.powermock.api.mockito.PowerMockito.mock(PowerMockito.java:144)
在ch.myesmart.ota.BaseTests。(BaseTests.java:35)
在ch.myesmart.ota.yaml.YamlHelperTest.(YamlHelperTest.java:12)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
位于java.lang.reflect.Constructor.newInstance(Constructor.java:423)
位于org.powermock.modules.junit4.internal.impl.powermockjunit44runnerdelegateinpl.createTestInstance(powermockjunit44runnerdelegateinpl.java:187)
位于org.powermock.modules.junit4.internal.impl.powermockjunit44runnerdelegateinpl.createTest(powermockjunit44runnerdelegateinpl.java:172)
位于org.powermock.modules.junit4.internal.impl.powermockjunit44runnerdelegateinpl.invokeTestMethod(powermockjunit44runnerdelegateinpl.java:194)
位于org.powermock.modules.junit4.internal.impl.powermockjunit44runnerdelegateinpl.runMethods(powermockjunit44runnerdelegateinpl.java:147)
位于org.powermock.modules.junit4.internal.impl.powermockjunit44runnerdelegateinpl$1.run(powermockjunit44runnerdelegateinpl.java:121)
位于org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:34)
位于org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:44)
位于org.powermock.modules.junit4.internal.impl.powermockjunit44runnerdelegateinpl.run(powermockjunit44runnerdelegateinpl.java:123)
位于org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.run(JUnit4TestSuiteChunkerImpl.java:121)
位于org.powermock.modules.junit4.common.internal.impl.AbstractCommonPowerMockRunner.run(AbstractCommonPowerMockRunner.java:53)
位于org.powermock.modules.junit4.PowerMockRunner.run(PowerMockRunner.java:59)
位于org.junit.runner.JUnitCore.run(JUnitCore.java:137)
位于com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
位于com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
位于com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
位于com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)

提前感谢。

修改你的app/build.gradle android{..}块,为下面提到的单元测试提供依赖项列表

testOptions {
        unitTests {
            dependencies {

            }
        }
    }

修改app/build.gradle android{..}块,为单元测试提供依赖项列表,如下所述

testOptions {
        unitTests {
            dependencies {

            }
        }
    }

谢谢,但仍然不起作用…我需要一种排除,但似乎不适用于jar文件。谢谢,但仍然不起作用…我需要一种排除,但似乎不适用于jar文件。