2012-02-08 152 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測試)。