android instrumentation测试:IllegalAccessError

时间:2012-02-08 19:23:40

标签: android maven instrumentation buildpath

我在运行Android检测测试时遇到了IllegalAccessError。
这是Logcat输出:

java.lang.IllegalAccessError: Class ref in pre-verified class resolved to unexpected implementation

这是我的设置:
TestProject测试UnderTestProject,其中包含构建路径中的AnotherProject(在“项目”标签中),并从“订单和导出”标签中导出。被测试的班级属于AnotherProject

我已按照this stackoverflow question中的建议来配置构建路径。

使用Maven从命令行完成构建。 AnotherProject位于TestProjectUnderTestProject的pom文件中,作为依赖项。这是仍然出现错误的原因吗?我怎样才能解决这个问题?仅在AnotherProject的pom中加入UnderTestProject并在UnderTestProject的pom中加入TestProject

eclipse的构建路径如何与maven的pom结合?

我不清楚这一点,我们将非常感谢任何帮助。

谢谢!


我尝试了以下操作,但仍然遇到问题:

  1. AnotherProject的pom中删除了TestProject,并向其添加了UnderTestProject
  2. 遵循this thread.上的建议如果我为UnderTestProject添加<scope>provided</scope>,我的AnotherProject甚至无法构建。
  3. 我现在陷入困境,如果你有出路,请告诉我。

    谢谢!

3 个答案:

答案 0 :(得分:1)

首先,按照android-maven-plugin wiki页面here上的 Libraries 部分进行操作:

  

如果您的项目设置包含库,那么那些也需要添加为&lt; scope&gt;提供&lt; / scope&gt;否则它们将被添加到测试中,这将导致重复错误«预验证类中的类ref被解决为意外实现»。

     

......

     

注意错误#142,只有包含&lt; packaging&gt; jar&lt; / packaging&gt;的库将在这一点上工作。

然后右键单击UnderTestProject,单击Build Path - &gt;配置构建路径,在“订单和导出”选项卡中勾选Maven依赖项:enter image description here

这对我有用,希望有所帮助。

答案 1 :(得分:1)

我遇到了同样的问题。为了解决这个问题,我必须将主应用程序的pom.xml中的库依赖项添加到测试应用程序的pom.xml中,但是向它们添加<scope>provided</scope>

因此,如果我在 MyApp pom.xml中具有以下依赖关系:

<dependency>
    <groupId>com.nineoldandroids</groupId>
    <artifactId>library</artifactId>
    <version>2.4.0</version>
</dependency>

我必须将它添加到 MyAppTest pom.xml:

<dependency>
    <groupId>com.nineoldandroids</groupId>
    <artifactId>library</artifactId>
    <version>2.4.0</version>
    <scope>provided</scope>
</dependency>

答案 2 :(得分:0)

您没有指定这是否是仅限Eclipse的问题,或者项目也无法使用Maven构建(使用android-maven-plugin)。就我而言,两者都会失败。原因:来自UnderTestProject.apk的传递依赖性也会进入导致TestProject.apk类问题的pre-verified。我的解决方案是在TestProject的pom中应用它:

<dependency>
    <groupId>com.example</groupId>
    <artifactId>UnderTestProject</artifactId>
    <version>1.0-SNAPSHOT</version>
    <type>apk</type>
    <exclusions>
        <exclusion>
            <groupId>*</groupId>
            <artifactId>*</artifactId>
        </exclusion>
    </exclusions>
</dependency>

正如所讨论的here一样,以这种方式使用通配符会产生警告,但可以很好地完成工作(在Maven 3.1.1上测试)。