【问题标题】:android instrumentation testing : IllegalAccessErrorandroid 仪器测试:IllegalAccessError
【发布时间】:2012-02-08 19:23:39
【问题描述】:

我在运行 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 文件中,作为依赖项。这是仍然收到错误的原因吗?我怎样才能解决这个问题?仅在 UnderTestProject 的 pom 中包含 AnotherProject 并在 TestProject 的 pom 中包含 UnderTestProject

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

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

谢谢!


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

  1. TestProject 的pom 中删除了AnotherProject,并在其中添加了UnderTestProject
  2. 按照this thread. 上的建议,如果我为AnotherProject 添加<scope>provided</scope>,我的UnderTestProject 甚至都无法构建。

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

谢谢!

【问题讨论】:

    标签: android maven instrumentation buildpath


    【解决方案1】:

    首先,关注 android-maven-plugin wiki 页面 here 上的 Libraries 部分:

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

    ... ...

    注意错误 #142,此时只有带有 jar 的库才能工作。

    然后右击你的UnderTestProject,点击Build Path -> Configure Build Path,在Order and Export选项卡中勾选Maven Dependencies:

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

    【讨论】:

    • 感谢您的回答!我现在已经搬到 Robolectric,并且已经进行了测试。但是,我必须进行仪器测试,一旦我再次使用仪器,我将验证这一点。在那之前我会接受你的回答。
    【解决方案2】:

    我遇到了同样的问题。为了解决这个问题,我必须将主应用程序的 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>
    

    【讨论】:

      【解决方案3】:

      您没有指定这是仅 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 上测试)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-22
        • 1970-01-01
        • 2013-09-21
        • 2011-08-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多