Компиляция Android идет медленно (с использованием Eclipse) - PullRequest
33 голосов
/ 21 мая 2010

Когда я изменяю любой файл .java и собираю, компиляция занимает 16 секунд. Я не понимаю, почему это должно быть так медленно!?

Я включил подробный вывод для Andoroid.

Window > Preferences > Android > Build output > Verbose.

Результат вывода (Консоль> Android):

[19:46:10] Refreshing resource folders.
[19:46:10] Starting incremental Pre Compiler: Checking resource changes.
[19:46:10] Nothing to pre compile!
[19:46:10] Starting incremental Package build: Checking resource changes.
[19:46:10] ignored resource ...\bin\.\classes.dex
[19:46:10] processing ...\A.class
[19:46:10] processing ...\B.class
    ...
[19:46:21] processing com/google/inject/util/Providers.class...
[19:46:21] processing com/google/inject/util/Types.class...
[19:46:24] Using default debug key to sign package
[19:46:24] Packaging ...\bin\resources.ap_
[19:46:24] Packaging classes.dex
    ...
[19:46:25] Packaging ...\annotations.jar
[19:46:25] Build Success!
[19:46:25] Refreshing resource folders.
[19:46:25] Starting incremental Pre Compiler: Checking resource changes.
[19:46:26] Nothing to pre compile!

«Обработка» файлов .class заняла 14 секунд. И он «обработал» все файлы, даже из всех связанных файлов .jar. Я думаю, что здесь что-то не так, поскольку был изменен только один файл .java.

Что я могу сделать, чтобы улучшить скорость компиляции?

Ответы [ 6 ]

55 голосов
/ 20 сентября 2010

Я думаю, здесь есть недоразумение. Как вы говорите, только измененные классы перекомпилируются (Eclipse за считанные миллисекунды); однако после этого плагин ADT берет каждый скомпилированный класс и переводит его в формат байт-кода Dalvik с помощью инструмента dx. Результатом этого процесса является отдельный файл classes.dex, который содержит все классы в вашем приложении, включая классы, на которые ссылаются библиотеки. Этот последний шаг «перевода» занимает больше времени, потому что он действительно плохо оптимизирован: плагин ADT ничего не кэширует, он просто ретранслирует каждый класс при каждой сборке (и он мучительно медленный). Для средних и крупных проектов это действительно разочаровывает ... Я надеюсь, что Google улучшит это в будущем выпуске ADT / SDK.

9 голосов
/ 23 марта 2011

Еще один обходной путь:

  • отключить Android Package Builder (щелкните правой кнопкой мыши на проекте # Properties # Builders)
  • используйте ant для сборки и развертывания apk

Подробнее см. обходной путь для Android для медленного построения рабочего пространства в затмении

4 голосов
/ 01 декабря 2012

ADT 21 pre-dex все библиотеки. Это означает, что регулярная компиляция только повторно декодирует выходные данные вашего проекта (быстрее), а затем объединяет результат с предварительно проиндексированными библиотеками (довольно быстро).

0 голосов
/ 22 января 2015

Каждый раз, когда вы сохраняете, пакет Eclipse и дексирует все файлы.Но это не обязательно, потому что вам не нужно развертывать ваше приложение в apk каждый раз, когда вы сохраняете.

В любом случае, ключом этой проблемы является снятие флажка с опции:

"Пропустить упаковкуи индексирование до экспорта или запуска. (Ускоряет автоматическую сборку при сохранении файла.) "

Внутри окна " -> Настройки -> Android -> Сборка "

Это решит вашу проблему.

Приветствия

0 голосов
/ 07 сентября 2013

Как упомянул alex2k8, я включил подробный вывод. Виновником был файл фляги AdMob.

Я использую ADT 22.0. Мое приложение включает AdMob, и на этапе запуска или отладки файлы классов в admob jar преобразуются в файлы dex, что было очень медленно.

Я временно удалил код admob и jar из своего проекта, и процесс сборки снова стал нормальным.

0 голосов
/ 09 сентября 2012

Увеличение объема памяти, доступной для Eclipse, похоже, очень помогает.Попробуйте запустить его как:

eclipse -vmargs -Xms1024m -Xmx2048m
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...