Компиляция 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-файл.

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

Solutions Collecting From Web of "Компиляция Android медленная (с использованием Eclipse)"

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

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

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

См. Описание android-workaround-for-slow-building-workspace-problem-in-eclipse для подробностей

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

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

 eclipse -vmargs -Xms1024m -Xmx2048m 

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

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

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

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

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

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

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

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

ура