簡體   English   中英

外部 JAR 上的“轉換為 Dalvik 格式失敗,錯誤 1”

[英]“Conversion to Dalvik format failed with error 1” on external JAR

在 Eclipse 中的 Android 應用程序中,我收到以下錯誤。

意外的頂級例外:
java.lang.IllegalArgumentException:已添加:Lorg/xmlpull/v1/XmlPullParser;
....
轉換為 Dalvik 格式失敗,錯誤 1

僅當我將特定的外部 JAR 文件添加到我的項目時才會出現此錯誤。 我搜索了很長時間以尋找可能的解決方案,但沒有一個可能的解決方案有效。

我什至嘗試更改為 Android 1.6 而不是 1.5(我使用的當前版本)。

轉到 Project » Properties » Java Build Path » Libraries 並刪除除“Android XY”之外的所有內容(在我的情況下為 Android 1.5)。 單擊確定。 轉到項目»清理»清理下面選擇的項目»選擇您的項目並單擊確定。 那應該工作。

也有可能您的項目文件夾中的某個位置有一個 JAR 文件(我已將 Admob JAR 文件復制到我的 src 文件夾中),然后將其添加為 Java 路徑庫。 它沒有出現在包資源管理器下,所以你不會注意到它,但它確實被計數了兩次,導致可怕的 Dalvik 錯誤 1。

另一個可能的原因可能是包名沖突。 假設你在這個包中有一個包com.abc.xyz和一個名為A.java的類,以及另一個包含相同com.abc.xyz.A.java庫項目(它被添加到這個項目的依賴項中),那么你會得到完全相同的錯誤。 這意味着,您對同一個文件A.java有多個引用,並且無法正確構建它。

在其他情況下,如果您不小心或故意在類路徑文件中手動編輯/添加任何內容,可能會發生這種情況。在某些情況下,我們可能會手動將 android.jar 路徑添加到類路徑文件中以生成 java doc。在生成 javadoc 后刪除該路徑代碼將正常工作。如果仍然出現任何問題,請檢查此內容。

我解決了這個問題。

這是 JAR 文件沖突。

我的構建路徑上似乎有兩個 JAR 文件,其中包含相同的包和類。

smack.jarandroid_maps_lib-1.0.2

從其中一個 JAR 文件中刪除這個包解決了這個問題。

Windows 7 解決方案:

確認問題是由文件中的 ProGuard 命令行引起的
【Android SDK安裝目錄】\\tools\\proguard\\bin\\proguard.bat

編輯以下行將解決問題:

call %java_exe% -jar "%PROGUARD_HOME%"\lib\proguard.jar %*

call %java_exe% -jar "%PROGUARD_HOME%"\lib\proguard.jar %1 %2 %3 %4 %5 %6 %7 %8 %9

您可以通過在導出(未)簽名的 Android 應用程序時關閉菜單 >“項目”>“自動構建”來輕松解決此問題(使用 Eclipse Android 開發者工具,構建:v22.0.1-685705)。 之后,不要忘記再次打開它。

如果你有ADT修訂12+,你應該從4.4更新您的ProGuard - > 4.6(描述在這里)。 此外,您應該保留原始格式的 ...\\bin\\proguard.bat 文件。

只需從網上下載它,然后將下載的包中的 lib 文件夾復制到:

【Android SDK安裝目錄】\\tools\\proguard\\lib

編輯(新解決方案):

看起來以前的解決方案只是一個旁路。 我最終設法永久解決了這個問題:就我而言,我的項目和我的項目中引用的 Facebook 項目中的 android-support-v4 文件不匹配。

我通過執行 Lint 檢查發現了這個錯誤(Android 工具/運行 Lint:檢查常見錯誤)

我以前的解決方案:

我已經在這個網站上嘗試了任何可能的解決方案 - 沒有任何幫助!!!

最后我在這里找到了答案: https : //groups.google.com/forum/#!topic/actionbarsherlock/drzI7pEvKd4

簡單的步驟:

轉到項目-> 取消選中自動構建

轉到 Project -> Clean... ,同時清理庫項目和您的應用項目

將您的應用導出為已簽名的 APK,而“自動構建”仍處於禁用狀態

這是另一個場景和解決方案:

如果您最近在為 Eclipse 更新 ADT 后遇到此問題:

  1. 在您的應用項目中,檢查是否有任何指向您的庫項目的鏈接源文件夾(它們的名稱為“LibraryName_src”形式)。
  2. 選擇所有這些項目,右鍵單擊,選擇“構建路徑”->“從構建路徑中刪除”。
  3. 選擇“同時取消文件夾與項目的鏈接”,然后單擊“”。
  4. 清理、重建和重新部署項目。

原因似乎是某些先前版本的 ADT 將庫項目源文件夾鏈接到“子”項目,而當前的 ADT/Dex 組合不再與該解決方案兼容。

編輯:這是由一個 Android 開發博客條目確認的,特別是這個- 請參閱第 8 段以后。

轉到項目,然后取消選中“自動構建”。然后嘗試導出項目,錯誤消失了。

如果您已將Android.jar文件添加到您的構建路徑,這也可能是由於 Eclipse 中的意外快速修復造成的。 右鍵單擊Project -> build path -> configure build path -> android.jar刪除它,刪除。

每次出現此錯誤時,簡單地清理項目對我都有效。

在對所有解決方案進行四個小時的測試后,我今天找到的唯一的解決方案是這里提供的許多解決方案的組合:

  • 從 Eclipse 中Delete項目
  • 從項目文件夾中刪除\\bin\\gen文件
  • 將庫的引用刪除到根項目文件夾中的.classpath文件中
  • 使用命令行重新啟動 Eclipse: eclipse -clean
  • Import項目
  • 右鍵單擊項目 - 選擇Properties > Java Build Path > Libraries並刪除除Android XX.Y之外的所有內容
  • 最后clean項目,等待自動構建或Build
  • 啟動,現在它可以工作了! 至少對於我來說...

我一次嘗試了每一步和許多組合,但只有一次連續所有步驟才能成功! 我希望我不會再遇到這種情況......

僅對於仍然存在此問題的其他人並且他們已經嘗試了上述答案但仍然出現錯誤(這是我的情況),然后我的解決方案是從 Eclipse 中刪除該項目並再次重新導入它。

這使得 Android 庫再次添加到我引用的庫中,所以現在我引用了兩個 Android JAR 文件,因此我刪除了其中一個,現在它可以正常編譯。

解決方案:從Eclipse IDE中刪除項目,然后重新導入,然后查看上述解決方案。

今天自己遇到了這個問題。 清潔和重建沒有解決問題。 刪除並重新導入項目也無濟於事。

我終於將其追溯到我的 .class 文件中的一個錯誤添加。 我認為這是在我嘗試解決另一個問題時由插件工具添加的,刪除它可以消除“轉換為 Dalvik 格式失敗並出現錯誤 1”構建錯誤:

<classpathentry kind="lib" path="C:/dev/repository/android-sdk-windows/platforms/android-3/android.jar">
    <attributes>
        <attribute name="javadoc_location" value="file:/C:/dev/repository/android-sdk-windows/docs/reference"/>
    </attributes>
    <accessrules>
        <accessrule kind="nonaccessible" pattern="com/android/internal/**"/>
    </accessrules>

對我來說,我的構建路徑中出現了一個額外的 JAR 引用。 我刪除了它,現在可以使用了。

我在我的項目中使用 Sherlock ActionBar 庫時處理過這個問題。 您可以執行以下步驟,這對我有用。

  1. 右鍵單擊您的項目,選擇屬性。
  2. 將出現一個對話框,在左側菜單中選擇“Java 構建路徑”。
  3. 刪除右側面板上的“Android 依賴項”和“Android 私有庫”,然后單擊“確定”
  4. 清理您的項目(選擇菜單 Project --> Clean)
  5. 右鍵單擊您的項目,選擇 Android 工具 -> 修復項目屬性
  6. 再次清理項目。
  7. 重啟你的電腦
  8. 打開eclipse並導出apk

希望這會幫助你。

我的問題是由 ADT 12.0 版和 ProGuard 集成引起的。 這個錯誤有據可查,解決方案在文檔中

解決方案在這里

ProGuard 命令行

我發現了別的東西。 Android 將/libs目錄用於 JAR 文件。 我已經多次看到“Conversion to Dalvik format failed with error 1”錯誤,總是當我在 JAR 文件中出錯時。

現在我將 Roboguice 升級到新版本,將新的 JAR 文件放在/libs目錄中並將類路徑切換到新版本。 這導致了 Dalvik 錯誤。

當我從/libs文件夾中刪除 Roboguice JAR 文件之一時,錯誤消失了。 顯然,Android 會從/libs提取所有 JAR 文件,無論您在 Java 構建路徑中指定了哪些文件。 我記不太清楚了,但我認為 Android 默認從Android 4.0 (Ice Cream Sandwich,ICS)開始使用/libs

一般來說,這個問題似乎是在構建路徑中有不必要的 JAR 文件時出現的。

我在處理IntelliJ IDEA時遇到了這個問題。 對我來說,這是因為我添加了在運行時編譯的JUnitMockito庫。 這需要在模塊屬性中設置為“測試”。

將 Proguard 更新到最新版本為我解決了這個問題。

  • 我的 proguard 路徑是C:\\Program Files (x86)\\Android\\android-sdk\\tools\\proguard\\
  • 我從這里下載了新版本
  • 並替換了 bin 和 lib 文件夾

感謝上帝!

就我而言,問題實際上出在 OpenFeint API 項目上。 我已將 OpenFeint 添加為庫項目:

庫項目]![1]![在此處輸入圖像描述 .

它也被添加到構建路徑中,ADT 工具 16 給出了這個場景的錯誤。

右鍵單擊您的項目並單擊構建路徑,配置構建路徑,然后查看圖像並從此處刪除您的項目 OpenFeint,一切都完成了:)

在此處輸入圖片說明

以前提出的解決方案都不適合我。 就我而言,問題發生在我從引用庫源代碼文件夾切換到使用庫 JAR 文件時。 最初在 Android 應用程序項目 Properties\\Android page\\Library 部分下列出了一個 Android 庫項目,該庫也在項目資源管理器樹中作為指向庫源目錄的鏈接進行比較。

首先,我只是從項目樹中刪除了目錄鏈接,並將 JAR 庫添加到構建路徑中,但這導致了異常。

正確的過程是(在改回構建路徑並放回對庫源的引用之后):

  • 通過從應用程序項目 Properties\\ Android 頁面中實際刪除引用來正確刪除庫源目錄鏈接

  • 像往常一樣將庫 JAR 添加到應用程序項目構建路徑。

列出的解決方案都不適合我。

這是我遇到問題的地方:

我首先將 jSoup 外部 JAR 文件添加到我的項目路徑中,方法是將其放在名為“libs”的源文件夾中,然后右鍵單擊它,構建路徑-> 添加到構建路徑。 這引發了 Dalvik 轉換錯誤。 它說我“已經包含”了那個 JAR 文件中的一個類。 我查看了項目的目錄,發現它“已包含”的地方實際上是bin目錄。 我從bin目錄中刪除了 JAR 文件並在 Eclipse 中刷新了項目,錯誤消失了!

就我而言

項目-> 屬性-> java 構建路徑-> 按順序和導出選項卡->取消選中android-support-v4.jar

只需清理項目

如果這不起作用,請嘗試其他解決方案

上面的所有解決方案對我都不起作用。 我沒有使用任何預編譯的 .jar。 我正在使用 LVL 和 Dalvik 錯誤,這些錯誤都與市場許可庫有關。

通過刪除主項目並重新導入(從現有源創建一個新項目)解決了問題。

我遇到了同樣的問題,但這些解決方案都沒有奏效。 最后,我在控制台中看到錯誤是由於重復的類(一個在現有項目中,一個在添加的 jar 文件中):

java.lang.IllegalArgumentException: already added: package/MyClassclass;
[2011-01-19 14:54:05 - ...]: Dx1 error; aborting
[2011-01-19 14:54:05 - ...] Conversion to Dalvik format failed with error 1

因此,請檢查您是否在項目中添加了具有重復類的 jar。 如果是,請嘗試刪除其中之一。

它對我有用。

通常對我來說,清理項目並不能解決這個問題。

但是在 Eclipse 中關閉項目然后重新打開它似乎在這些情況下修復了它......

我遇到了這個問題,但我的解決方案是雙重的。 1.) 我必須在project -> properties -> Android下添加一個 Android 目標版本。 2.) 我沒有所有的谷歌“第三方附加組件”。 單擊可用包下的 AVD SDK 管理->第三方附加組件-> Google Inc 我下載了所有的 SDK,這解決了我的問題。

我使用的是 Android 1.6 並且有一個外部 JAR 文件。 對我有用的是刪除所有庫,右鍵單擊項目並選擇Android Tools -> *Fix Project Properties(它添加回 Android 1.6),然后添加回外部 JAR 文件。

我遇到了這個問題,因為 Eclipse 中的 Android-Maven-plugin 顯然無法識別從幾個項目(包括一個 Android 庫項目)中兩次引用的傳遞引用和引用,並且不止一次地包含它們。 我不得不使用 hocus-pocus 將所有內容只包含一次,即使 Maven 應該負責所有這些。

例如,我有一個核心庫 globalmentor-core,它也被 globalmentor-google 和 globalmentor-android(后者是一個 Android 庫)使用。 在 globalmentor-android pom.xml我必須將依賴項標記為“已提供”,並從其他庫中排除它,並在其中傳遞包含它:

    <dependency>
        <groupId>com.globalmentor</groupId>
        <artifactId>globalmentor-core</artifactId>
        <version>1.0-SNAPSHOT</version>
        <!-- android-maven-plugin can't seem to automatically keep this from being
             included twice; it must therefore be included manually (either explicitly
             or transitively) in dependent projects -->
        <scope>provided</scope>
    </dependency>

然后在最終的應用程序pom.xml我必須使用正確的技巧來只允許一個包含路徑——以及顯式包含核心庫:

    <!-- android-maven-plugin can't seem to automatically keep this from being
        included twice -->
    <!-- <dependency> -->
    <!-- <groupId>com.globalmentor</groupId> -->
    <!-- <artifactId>globalmentor-core</artifactId> -->
    <!-- <version>1.0-SNAPSHOT</version> -->
    <!-- </dependency> -->

    <dependency>
        <groupId>com.globalmentor</groupId>
        <artifactId>globalmentor-google</artifactId>
        <version>1.0-SNAPSHOT</version>
        <exclusions>
            <!-- android-maven-plugin can't seem to automatically keep this from
                being included twice -->
            <exclusion>
                <groupId>com.globalmentor</groupId>
                <artifactId>globalmentor-core</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <dependency>
        <groupId>com.globalmentor</groupId>
        <artifactId>globalmentor-android</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM