我在运行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
位于TestProject
和UnderTestProject
的pom文件中,作为依赖项。这是仍然出现错误的原因吗?我怎样才能解决这个问题?仅在AnotherProject
的pom中加入UnderTestProject
并在UnderTestProject
的pom中加入TestProject
?
eclipse的构建路径如何与maven的pom结合?
我不清楚这一点,我们将非常感谢任何帮助。
谢谢!
我尝试了以下操作,但仍然遇到问题:
AnotherProject
的pom中删除了TestProject
,并向其添加了UnderTestProject
。 UnderTestProject
添加<scope>provided</scope>
,我的AnotherProject
甚至无法构建。我现在陷入困境,如果你有出路,请告诉我。
谢谢!
答案 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依赖项:
这对我有用,希望有所帮助。
答案 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
上测试)。