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

Ускорьте время разработки проекта Android в IntelliJ IDEA

Мне интересно, если есть какой-то способ, как установить skip packaging and dexing в IntelliJ IDEA, как в Eclipse и ADT. Есть поле Additional VM Options в разделе "Компилятор Android DX" в IntelliJ Preferences, возможно, это может быть способ, как его установить. Я также хотел бы получить еще несколько советов, как ускорить сборку проектов Android IntelliJ.

4b9b3361

Ответ 1

В настройках Eclipse полное имя skip packaging and dexing, к которому вы обращаетесь, это Skip packaging and dexing until export or launch. (Speeds up automatic builds on file save), которое добавлено после ADT 12 в orde для решения проблемы инкрементной компиляции Eclipse (что замедляет разработку на Eclipse), проверьте Версия 12.0.0 (июль 2011) и эта ссылка для Обратите внимание, что упаковка и удаление являются фундаментальным шагом при отладке/запуске проекта независимо от того, какой IDE (или non) вы используете. enter image description here

Как упоминал CrazyCoder в своих комментариях, IntelliJ не поддерживает инкрементную компиляцию Eclipse и панель задач по умолчанию, в другом слове, это не скомпилирует ваш проект при изменении файла. Так что это действительно не проблема и не функция IntelliJ.

Ваше узкое место процесса сборки, вероятно, происходит из другого места. AFAIK в проекте среднего размера, затрачивающийся на сборку времени, - это сбор ресурсов (команда AAPT, проверка диаграмма процесса сборки). Некоторые умные люди из xdadevelopers нашли узкое место и создали исправленную версию AAPT:

http://forum.xda-developers.com/showthread.php?t=1907281

Я использую его сам, и я бы сказал, что ускорение скорости ощутимо в Eclipse, обратите внимание, что он только увеличивает шаг AAPT, а не упаковывает рекламные объявления. Если вы используете InteliJ, это, вероятно, мало помогает, так как не нужно часто компилировать проект.

Ответ 2

Я использую IntelliJ 12. Я выиграл время для развертывания и запуска приложений Android, позволяющих IntelliJ "Сделать проект автоматически" . Чтобы включить его, просто перейдите в Настройки Компилятор и установите флажок "Сделать проект автоматически" . В том же окне проверьте "Скомпилировать независимые модули параллельно".

Включение "Сделать проект автоматически" позволяет пропустить задачу "Сделать" перед запуском приложения Android. Вы можете удалить его в "Конфигурации запуска/отладки", выбрав свое приложение для Android и удалив задачу "Сделать" в разделе "Перед запуском".

Ответ 3

У меня нет решения, но у меня есть объяснение, почему существует огромная разница во времени между Eclipse и IntelliJ. Потому что. Всякий раз, когда вы зависите от внешних модулей или библиотек: IntellIJ всегда DEX'es зависимых модулей. Кажется, что Eclipse кэширует их.

Я тоже испытал эту огромную разницу в одном из моих проектов. Я сделал некоторые базовые тесты времени и обнаружил, что мой проект, который за 40 секунд в IntellIJ занял всего 20 в Eclipse. Много времени проводилось в процессе, когда IntelliJ имеет статус Executing DEX, так вот как я нашел этот вопрос. Затем я попытался сделать более тщательный и воспроизводимый эксперимент, и это то, что я нашел.

Настройка проекта

  • Проект Hello World из шаблона New Android Application в Eclipse.
  • Зависимость от AndEngine Проект Open Game Android Engine Engine *.
  • Eclipse: проект AndEngine, определенный как "Android-библиотека". Добавлен в качестве ссылки под вкладкой Android и требуемым проектом на вкладке "Путь/Проекты Java".
  • IntelliJ: AndEngine определяется как "Модуль". Установить как зависимость для основного модуля HelloWorld, при этом флажок экспорта не установлен (не так, как мне кажется, это важно).

*) Я мог бы использовать любой модуль здесь, но это был хороший пример, поскольку он a) довольно большой и b) является модулем Android, что означает, что я должен связать его как проект Android, а не только как JAR as dbm предложите в сообщении выше.

Я добавил код регистрации в onCreate метод MainActivity.java (запуская активность HelloWorld), который также назывался методом в AndEngine, который также записывал строку. (Я модифицировал конструктор SoundManager для вывода строки и назвал конструктор из MainActivity.java). Это позволило мне увидеть, когда приложение было завершено, и что оно также было развернуто правильно.

Затем я сделал следующие изменения и каждый раз три раза в каждом IDE по три раза:

  • A: Изменена только строка журнала в основном модуле
  • A + B: Изменена как строка журнала в основном модуле, так и в модуле AndEngine.

Я сделал ручные тайминги со стандартным секундомером, а затем округлен вверх/вниз до ближайшей секунды. Я сделал три тайминга в каждом случае и вычислил среднее арифметическое.

Результаты:

Graphs of IntellIJ vs Eclipse compile and deploy time

Примечание. Я не включал отдельный подзаголовок для "Выполнение DEX" в Eclipse, потому что он просто выводит "make" или "refreshing workspace" во весь процесс сборки.

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

Вывод:

IntelliJ делает много ненужного DEX'ing. Если кто-нибудь знает, если это настраивается, я думаю, что мы разрешим то, что, по моему мнению, является основной причиной проблемы.

Ответ 4

Иногда, когда я добавляю большие внешние JAR файлы в мой проект (Eclipse), это значительно замедляет процесс сборки.

Однако я заметил, что вместо добавления банок, как обычно (Project -> Properties -> Java Build Path -> Libraries -> Add External JARs...) вместо него можно добавить библиотеку пользователя (Project -> Properties -> Java Build Path -> Libraries -> Add Library... -> User Library) и вместо этого добавить внешние JAR в эту библиотеку.

Это до сих пор всегда решало мои большие проблемы с JAR-build-time-issues. Некоторые умные парни также объяснили мне, почему это так, но, к сожалению, я действительно не помню объяснения. У меня нет опыта в IntelliJ - я не знаю, применимо ли это в вашем случае, тем не менее, вы можете получить отсюда дополнительные идеи...