2012-02-08 114 views
4

我在运行Android检测测试时遇到了IllegalAccessError。
这是logcat的输出:安卓工具测试:IllegalAccessError

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中只有UnderTestProjectTestProject的pom中包含UnderTestProject

eclipse的构建路径如何与maven的pom绑定?

我不清楚这一点,任何帮助将不胜感激。

谢谢!


我尝试以下,但还是收到问题:

  1. 删除AnotherProjectTestProject的POM,并添加UnderTestProject它。
  2. 按照this thread.的建议我的UnderTestProject甚至没有建立,如果我添加<scope>provided</scope>AnotherProject

我被困在这一点,请让我知道,如果你有出路。

谢谢!

回答

1

首先,按照库Android的Maven的插件wiki页面上部分:

如果你的项目建立包含库那么这些也需要被添加为提供< <范围> /范围>,否则它们将被添加到测试中,这将导致重复错误«预先验证的类中的类参考解析为意外的实现»。

......

注意的Bug#142,只能用<包装>罐子< /包装>图书馆将在这一点上工作。enter image description here

这对我的作品,希望它能帮助:在订单和导出标签>配置构建路径,勾选Maven依赖 -

然后在您的UnderTestProject单击鼠标右键,单击构建路径。

+0

感谢您的回答!我现在已经搬到了Robolectric,并且已经进行了测试。但是,我必须进行仪器测试,并且一旦我再次到达仪器,我将验证这一点。直到那时我才接受你的答案。 – Chaitanya 2012-02-16 00:52:43

+7

Your ... system ... font ... is ... Comic Sans ... – 2012-11-12 23:02:01

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> 
0

你没有指定这是否是仅限Eclipse的问题,或者该项目无法使用Maven构建(使用android-maven-plugin)。就我而言,两者都会失败。原因是:来自UnderTestProject.apk的传递依赖关系也会找到他们的方式导致pre-verified类问题TestProject.apk。对我来说,解决办法是在我的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测试)。