2010-08-06 6 views
27

Я заинтересован в интеграции Scala (или некоторых других Java-JVM-языков) в платформу Android. Я не имею в виду писать приложение Android с Scala, которое я сделал на ранней стадии, но фактически подключаюсь к процессу сборки, который создает исходное дерево платформы Android. Я предполагаю, что это будет вопрос подключения к make-файлам и тому подобное. Кто-нибудь знает об этом?Как интегрировать Scala в базовую платформу Android?

То, что я до сих пор: Платформа источник treefrom мерзавец: //android.git.kernel.org/platform/manifest.git построен в девственном виде, руководствуясь «[Скачать и построить Google Android ] [1]»

  • сборки/ядро ​​/ комбо/scalac.mk # Настраивает связанный компилятор Scala переменные, включенный Config.mk
  • Добавлены определения в сборках/ядро ​​/ definitions.mk для все-подкаталога -scala-files и all-scala-files-under
  • Добавлен определение в определениях.mk для построения массива путь к файлам таким образом, что они включены в пакет

Что осталось:

  • Include-library.jar Scala
  • Обеспечить изменения в -bootclasspath не нарушил ничего
  • Выяснить как обрабатывать случаи, когда классы scala зависят от классов java и наоборот
  • Основная очистка кода
  • Тестирование!
  • Выяснить, что делать (кроме просто разместить их здесь) с изменениями я сделал

Похоже, я почти нет !!!

Некоторые заметки из прошлого

Последний: Я нашел, где исходные Java файлы компилируются! В определениях.mk см. «Define transform-java-to-classes.jar». Последняя идея состоит в том, чтобы написать определение transform-scala-to-classes, а затем сохранить эти классы непосредственно в пакете. Я буду называть transform-scala-to-class прямо перед этим шагом в transform-java-to-classes.jar. Поддержка eclipse и cygwin в настоящее время будет отброшена, поскольку она загромождает код с обходными решениями и, следовательно, увеличивает мои шансы на провал.

Процесс сборки начинается с файла root Makefile running build/core/main.mk build/core/main.mk включает в себя build/core/config.mk, который включает в себя build/core/combo/javac.mk, который устанавливает HOST_JAVAC, TARGET_JAVAC и COMMON_JAVAC. COMMON_JAVAC - это «команда компилятора Java с общими аргументами», по внешнему виду две другие переменные получают эти значения по умолчанию, если только в специальной среде (openjdk или eclipse). COMMON_JAVAC не используется вне этого файла. Остальные два используются только в build/core/definitions.mk.

сборка/ядро ​​/ java_library.mk (включая config.mk), похоже, касается только сборки банок. Это выходит за рамки нашей заботы. Любое взаимодействие с банками предполагает файлы классов, которые предполагают, что мы уже успели создать наши файлы scala.

Есть чеки в main.mk относительно версии java. Мы проигнорируем их и предположим, что наша версия scala совместима. Прямо сейчас (в combo/scalac.mk) Я использую тот же параметр -target, который используется в javac.mk. Возможно, это должно храниться в переменной.

main.mk также включает в себя build/core/definitions.mk, который в свою очередь определяет некоторые полезные функции. Единственное, о чем мы заботимся здесь, это все-java-files-under и all-subdir-java-файлы. Последний используется в файлах Android.mk для поиска java-файлов. Первый используется при реализации последнего. Я напишу их эквиваленты Scala.

Чтобы понять, как работает процесс сборки, теперь я запускаю make с -n и другими. Я получил эту идею из статьи stackoverflow "[Инструмент для отладки make-файлов] [2]". Я также изучаю отладку с римейком.

build/core/{config.mk, definitions.mk} дает нам представление о том, какие файлы/команды используются для чего.

В качестве возможного способа взлома поддержки на основе каждого проекта базы данных, скорее всего, можно добавить в файл Android.mk проекта. Из платформы/build/core/build-system.html мы читаем: «Android.mk - это стандартное имя для фрагментов makefile, которые управляют построением данного модуля. Только верхний каталог должен иметь файл с именем« Makefile »». Вы можете создать новую цель, такую ​​как «scala-build», и запустить ее (сделать Scala-build PackageName) до окончательного make. Можно было бы также скрыть его тайно в переменной присваивании, уменьшив необходимость в явном вызове цели.

Другой способ (гораздо более хакерский) - захватить команду, используемую для javac. Это устанавливается в файле build/core/combo/javac.mk. Android.mk вашего проекта должен будет включать * .scala файлы в LOCAL_SRC_FILES вместе с * .java-файлами.

+0

Я бы спросил об этом в списке рассылки по строительству андроидов. https://groups.google.com/group/android-building –

ответ

7

Ребята из reddit говорят, что есть учебник по интеграции Scala в Android с муравьем here.

+0

Я попробую. Благодаря! – Octoberdan

+0

@Octoberdan, если бы вы могли оповестить об этой теме вашего прогресса, это было бы здорово. – folone

+0

Я отсутствовал на выходные, но только что вернулся. У меня не будет времени, чтобы дать ему идти до завтра. Я обязательно дам вам знать! – Octoberdan