2010-11-23 2 views
2

Когда я компилирую проект Android в Eclipse, он не генерирует никаких скриптов Ant или что-то еще, поэтому я предполагаю, что он использует компилятор Eclipse для генерации файлов .class и используя dx для перевода их в .dex. Так что все в порядке, и я знаю, что компилятор Eclipse отличается от javac и не может быть изменен.Какой компилятор использует Android, и я могу его изменить?

Но когда я использую android для создания файла build.xml, я вижу, что он ссылается на другие файлы Ant, и в итоге я могу отследить фактический вызов до javac. Поэтому у меня есть несколько вопросов об этом.

  1. Я новичок в Ant. Выполняет ли команда <javac> Ant команду javac, на которую ссылается переменная env JAVA_HOME? Или что-то еще?
  2. Когда вы используете параметр «Экспорт приложения» в Eclipse, все еще использует компилятор Eclipse? Будет ли я всегда вынужден использовать другой компилятор в Ant против Eclipse?
  3. Могу ли я указать любой компилятор, который я хочу, если я изменил файл build.xml и изменил цель «скомпилировать»?

Мне все равно, какой компилятор я использую, мне просто интересно. Главное, что мне нужно, это убедиться, что я использую современный компилятор, и я могу ожидать всех обычных оптимизаций (например, интернирование строковых литералов). Правильно ли я принимаю это?

P.S. Говоря об оптимизации, делает dx делать что-нибудь более фантастическое, чем просто перевод одного байт-кода в другой?

ответ

2

Чтобы ответить на вопрос 1, Да он должен быть с помощью одного ссылается JAVA_HOME. Свидетельство: я могу успешно создавать проекты с Ant, для моего JAVA_HOME установлено значение c: \ dev \ tools \ JDK6_20. Мой путь включает c: \ dev \ tools \ JDK6_20 \ bin.

Я временно установил JAVA_HOME для несуществующего c: \ dev \ tools \ JDK6_201. Когда я пытаюсь построить ANt, я получаю:

BUILD FAILED C: \ dev \ projects \ Eclipse \ AndroidWorkspace \ MapProject48 \ build.xml: 390: невозможно найти компилятор javac; com.sun.tools.javac.Необходимо не на пути к классам. Возможно, JAVA_HOME не указывает на JDK. В настоящее время установлено значение «C: \ dev \ tools \ JRE \ 6_20_64bit»

Я не знаю, откуда он берет последнюю строку, я думаю, это должен быть мой JRE, как он появляется в реестре.

Я думаю, что в ответ на ваш смелый вопрос: компилятор, как современный, как Javac в вашем JDK

1

Я не уверен на 100%, что вы получаете. Однако Android использует модифицированную форму Java под названием Dalvik.

Dalvik зарегистрирован на основе, что лучше для мобильных устройств.

http://en.wikipedia.org/wiki/Dalvik_(software)

+2

Исходные файлы сначала скомпилированы в java-байтовый код. Насколько я знаю, это было сделано с помощью любого JDK, который вы установили, а не с помощью самого затмения. Затем байт-код Java преобразуется в байтовый код Dalvik с помощью инструментов android sdk (возможно, dx) – 2010-11-23 18:25:46

+0

Обычно принято устанавливать переменные среды% JAVA_HOME% ant% ANT_HOME% и добавлять% JAVA_HOME% \ bin и% ANT_HOME% \ bin в ваш дорожка. Насколько я знаю, для Eclipse нет отдельного «javac». Это просто среда, которая поддерживает многие языки. Вы устанавливаете% JAVA_HOME% вашему JDK, а не JRE – NickT 2010-11-23 18:31:12

2

Что касается вашего вопроса о дх, это не конец процесса.Когда приложение установлено на устройстве, выполняется множество локальных запросов для создания оптимизированного файла dex (ODEX), уникального для среды выполнения этого устройства.

Смежные вопросы