2011-09-25 7 views
16

Po dodaniu Google Guava r09 do naszego projektu Android, czas budowy znacznie się zwiększył, szczególnie w fazie generowania DEX. Rozumiem, że generowanie DEX bierze wszystkie nasze klasy + wszystkie słoiki, na których polegamy i tłumaczy je na format DEX. Guava to dość duży słoik około 1,1MBDodanie Google Guava do projektu Android - znacznie spowalnia budowę

  1. Czy może być przyczyną spowolnienia budowy?
  2. Czy można zrobić cokolwiek, aby to przyspieszyć?

P.S. Zwykle buduję z Intellij, ale też próbowałem budować z Mavenem - te same wyniki.

Dzięki

Alex

+0

Też to zauważyłem. Dodanie Guava sprawia, że ​​moja kompilacja zabiera ~ 30 sekund zamiast ~ 8s. – goncalossilva

+0

Oddzieliłem klasy, których używam od Guawy. To pomogło mi skrócić czas budowy. Niestety, chyba że faceci z Guava zdecydują się podzielić bibliotekę na mniejsze moduły, jest to jedyny sposób, jaki widzę w przyspieszaniu rozwoju. – AlexV

Odpowiedz

12

Na co warto, mój gut jest to, że to nie jest przyczyną. Ciężko jest zrobić cokolwiek z zaledwie 1,1 MB kodu bajtowego; Nigdy nie zauważyłem, że dex zabiera dużo czasu. Ale załóżmy, że jest to kwestia ze względu na argument.

Jeśli ma to znaczenie, prawdopodobnie można obciąć Guva .jar, aby usunąć całe pakiety, których nie używasz. Składa się z kilku elementów, które niekoniecznie są ze sobą powiązane.

Nie sądzę, że to przyspieszy sprawę, ale być może warto wspomnieć: jeśli uruchomisz kompilację za pomocą Proguard (optymalizator teraz dołączony do pakietu SDK), może on usunąć nieużywane klasy przed przejściem do DEX (i zrobić kilka innych wielkich optymalizacji kodu bajtowego). Oczywiście proces ten prawdopodobnie trwa dłużej niż dex-ing.

+0

Próbowałem przeciąć klasy, których potrzebuję, ale dość szybko znalazłem się w 40 klasach i liczę, poza tym, że jest brzydki :) Rzecz w ProGuard polega na tym, że nie znalazłem sposobu na osadzenie go w kompilacji Intellij. Dzięki. – AlexV

+0

+1 za wzmiankę o Proguard, i warto, nawet jeśli to wymaga czasu (przynajmniej w tym przypadku). – Premraj

+1

@AlexV: Czy nie można uruchomić ProGuard raz ręcznie, aby dowiedzieć się, jakie klasy są potrzebne? Założę się, że to się nie męczy, licząc do 40 ... – maaartinus