4

我在运行 Android 仪器测试时收到 IllegalAccessError。
这是 Logcat 输出:

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

这是我的设置:
TestProjecttests UnderTestProject,它包含AnotherProject在构建路径中(在“项目”选项卡中),并从“订单和导出”选项卡中导出。被测类属于AnotherProject.

我已按照此处stackoverflow 问题中的建议配置构建路径。

构建是使用 Maven 从命令行完成的。AnotherProject都在 pom 文件中TestProjectUnderTestProject, 作为依赖项。这是仍然收到错误的原因吗?我怎样才能解决这个问题?仅包含AnotherProject在 pom 中UnderTestProject并包含UnderTestProjectTestProject的 pom 中?

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

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

谢谢!


我尝试了以下方法,但仍然遇到问题:

  1. AnotherProjectTestProject's pom 中删除,并添加UnderTestProject到它。
  2. 遵循了关于这个线程的建议。如果我添加for ,我的UnderTestProject甚至都不会构建。<scope>provided</scope>AnotherProject

我被困在这一点上,如果你有出路,请告诉我。

谢谢!

4

3 回答 3

1

首先,在此处关注 android-maven-plugin wiki 页面上的部分:

如果您的项目设置包含库,那么这些库也需要添加为 <scope>provided</scope> 否则它们将被添加到测试中,这将导致重复错误 «Class ref in pre-verified class resolve to意外实施»。

……

注意 Bug # 142,此时只有带有 <packaging>jar</packaging> 的库才能工作。

然后右键单击您的 UnderTestProject,单击 Build Path -> Configure Build Path,在 Order and Export 选项卡中勾选 Maven Dependencies:在此处输入图像描述

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

于 2012-02-14T00:52:24.670 回答
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>
于 2013-02-01T18:16:20.250 回答
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>

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

于 2013-11-20T18:12:59.863 回答