Intereting Posts

Как интегрировать Scala в базовую платформу Android?

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

То, что у меня до сих пор: исходное дерево платформы из git: //android.git.kernel.org/platform/manifest.git, встроенное в свою девственную форму, руководствуясь «[Загрузите и создайте Google Android] [1]

  • Build / core / combo / scalac.mk # Настраивает связанные с scala компиляторы, включенные config.mk
  • Добавлены определения в build / core / definitions.mk для всех-subdir-scala-файлов и файлов all-scala-files
  • Добавлено определение в определениях.mk для создания файлов scala, чтобы они были включены в пакет

То, что осталось:

  • Включить scala-library.jar
  • Убедитесь, что изменения в -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 теперь будет отброшена, поскольку она загромождает код с обходными решениями и, следовательно, увеличивает мои шансы на провал.

Процесс сборки начинается с корневого Makefile, в котором работает 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.

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

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

Main.mk также включает build / core / definitions.mk, который в свою очередь определяет некоторые полезные функции. Единственное, о чем мы заботимся здесь, это файлы all-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-файлами.

Solutions Collecting From Web of "Как интегрировать Scala в базовую платформу Android?"