AS問題解決系列1—Unable to execute DX錯誤

    今天在將一個開源Android代碼import到Android Studio 1.2.2中,在編譯期間出現一個「Unable to execute DX」的編譯錯誤,錯誤類型是「Multiple dex files define」,具體錯誤信息見下圖:
html

    緣由:該project包含好幾個module,在源代碼被import到Android Studio時,在根目錄下自動生成了.idea/libraries文件夾,其中有兩個xml文件,android

    

     每一個xml文件中都包含有下面相似的name爲libraryTable的component:ide

    

   這兩個xml的目的就是指定項目須要包含的sdk或libs中的jar包。當項目在build的時候,兩個相同的jar都被打包到dex文件中,編譯器搞不定,就出了這麼個錯誤了。工具

   解決的辦法也比較簡單:將其中一個xml文件刪除,只保留一個xml文件,這樣項目build就順利經過了。優化


   後記:根據[3],這個.idea目錄下的文件是用於保存IntelliJ IDEA的設置,當設置修改後這裏的文件應當會有變化。 
ui

   那麼,什麼是DX呢?參考[4]以及本地Android Studio安裝路徑有如下總結:idea

   DX工具將Java class文件轉換爲一個.dex (Dalvik Executable)文件。spa

   dx.jar工具所在的目錄:Android/sdk/build-tools/22.0.1/libcomponent

    dx.bat所在的目錄:Android/sdk/build-tools/22.0.1/libxml


    DX工具在Android中是作什麼用的?

    Java源文件可經過Java編譯器轉換爲Java class文件。

    dx工具將Java class文件轉換爲一個.dex (Dalvik Executable)文件。應用程序的全部class文件都放在這個.dex文件中,在轉換過程當中class文件中的冗餘信息被優化掉。例如,在不一樣的class文件中若是有相同的String,那麼.dex文件只包含這個String的一個引用。所以.dex文件要比對應的class文件要小。

    .dex文件與Android項目中的資源,例如圖片資源,XML文件等, 被打包到一個.apk (Android Package)文件中。

    Android編譯過程可參見下圖:

build process

   

   上圖中的aapt (Android Asset Packaging Tool) 將建立apk, 最終的.apk文件包含應用程序執行全部必要的數據,可經過ADB(Android Device Bridge)工具來部署,見下圖。

   

參考資料

[1] Android項目Build報錯:Unable to execute DX, http://www.baidufe.com/item/976bc16ceb9b4ab5507c.html

[2] Unable to execute DX(Multiple dex files define), http://www.baidufe.com/item/09a352cc9829270660ba.html

[3] Managing Projects Overview, https://developer.android.com/intl/zh-cn/tools/projects/index.html

[4] Android dx tool, http://stackoverflow.com/questions/8487268/android-dx-tool

[5] Building and Running Overview, http://developer.android.com/intl/zh-cn/tools/building/index.html

相關文章
相關標籤/搜索