Какой компилятор использует Android и можно ли его изменить? - PullRequest
2 голосов
/ 23 ноября 2010

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

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

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

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

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

Ответы [ 3 ]

2 голосов
/ 23 ноября 2010

Чтобы ответить на вопрос 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, я получаю:

Ошибка сборки 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

2 голосов
/ 24 ноября 2010

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

1 голос
/ 23 ноября 2010

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

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

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

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