2012-10-08 94 views
1

我的Android應用程序使用相當多的非平凡外部庫。這些庫都是用Java編寫的,只是添加到構建路徑中。Dx處理外部庫永遠需要

從Eclipse內啓動應用程序需要很長時間,大約5分鐘。這非常令人沮喪!

我啓用了詳細的android編譯輸出。這表明構建過程在外部庫中整體迭代*.class文件。我得到數百這些行:

... 
Dx processing android/support/v4/app/FragmentTransaction.class... 
Dx processing android/support/v4/app/FragmentManagerImpl$3.class... 
Dx processing android/support/v4/app/LoaderManagerImpl.class... 
... 
Dx processing com/prosysopc/ua/client/ServerStatusListener.class... 
... 
Dx processing org/opcfoundation/ua/core/BrowseNextRequest.class... 
... 

(這只是一個小樣本,我再次得到數百這些每個*.class

我真的不知道什麼DX工具在這裏做的,但這絕對是煩人的!

更糟糕的是重複每一個發射,沒有緩存什麼都沒有......

可能的想法這個過程:

  • 是否有這個地方的高速緩存?哪裏?也許它是隻讀的,因此不會持續?
  • 我可以爲我的開發版本完全禁用「DX處理」步驟嗎?

任何可能的解決方案或至少有想法?這真的讓我瘋狂;-)

謝謝!

+0

這些庫是運行應用程序所需的android庫。所以,不,不要禁用它們。我甚至不認爲你可以。 –

+0

這只是一個例子,我還有其他一些圖書館。我不想刪除庫,而是「Dx處理」步驟。 – Eric

+0

只需檢查http://stackoverflow.com/questions/9332778/android-dx-processing-too-slow –

回答

1

dx工具能夠合併dex文件。因此,一種選擇是將這些庫預先轉換爲dex格式,並讓dx將它們與主應用程序類合併。

這個工作流似乎並沒有被默認的ant構建腳本支持,並且我懷疑eclipse構建是否也有類似的東西。你將不得不手動執行一些步驟,或者調整ant構建腳本。

一些注意事項:

  1. 對於DX識別和合並圖書館,它需要包含classes.dex文件
  2. 你仍然需要圍繞原始的Java罐罐子/ APK/ZIP,這樣你就可以對它們進行編譯。您需要防止將java jar傳遞給dx,然後傳遞dex jar。
  3. 事情變得更「有趣」如果你正在使用類似的ProGuard :)

我會離開的這一切工作,hackiness是否值得取決於你的決定。

+0

你有任何指針,如何做這樣的事情? – Eric

+0

非常感謝您的投入,我開始研究這一點。但不幸的是,它是我的頭...所以我想我必須忍受這種不理想的情況,直到谷歌最終決定修復他們的開發工具... – Eric

+0

只是出於好奇,你有沒有做過這樣的事情? – Eric