Подтвердить что ты не робот

Компиляция Android медленная (с использованием Eclipse)

Когда я меняю любой файл .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 файл.

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

4b9b3361

Ответ 1

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

Ответ 2

Еще одно обходное решение:

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

Подробнее см. android-workaround-for-slow-building-workspace-problem-in-eclipse

Ответ 3

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

Ответ 4

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

eclipse -vmargs -Xms1024m -Xmx2048m

Ответ 5

Как упоминалось в alex2k8, я включил подробный вывод. Преступником был файл jar AdMob.

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

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

Ответ 6

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

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

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

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

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

Приветствия