# Представляем... Inner Core Mod Toolchain

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

## Полная поддержка Linux

Теперь, вы можете использовать один и тот же тулчейн на разных платформах. Скрипты работают с относительными путями, таски расширены для обратной поддержки любых платформ, а файлы для сборки были добавлены специально для Unix или обновлены в соотвествии с требованиями обоих платформ. Поддерживаются те же Visual Studio Code, IntelliJ IDEA и прямая работа с консолью.

## Мультипроект

Каждый проект стал отдельной составляющей и отделился от основных настроек тучлейна. Теперь *make.json* содержит лишь информацию, которая действительно нужна для сборки, его удобнее публиковать в открытые репозитории. Создавайте, импортируйте и удаляйте столько, сколько вам позволит ваше дисковое пространство. А таски сборки по активному файлу помогут сэкономить время для перехода между проектами, обо всем позаботится тулчейн. Настройки, заданные в основной конфигурации *toolchain.json* могут быть использованы как стандартные значения для всех проектов. Подробнее о конфигурациях можно узнать в [статье](CONFIG-ru.md).

## Новые проекты по шаблону

Хотите создать новый проект или импортировать существующий? Используйте соответствующие таски `New Project` и `Import Project`, с ними создание проектов станет как никогда проще. Введите имя, опционально измените версию или описание и все готово! Благодаря шаблонам вы можете напрямую использовать разные конфигурации или создать свой идеальный начальный мод. Шаблоны неподвластны обновлениям, выбираются из консоли и могут быть распространены через открытые репозитории. Просто переименуйте *make.json* в *template.json* и ваш проектный шаблон уже может быть использован.

Создали базовый шаблон для новых модов? Задайте свойство `defaultTemplate` в глобальной конфигурации или даже вашем текущем моде для отделения особых шаблонов друг от друга. Даже если указано свойство базового шаблона, вы все равно можете выбирать другой шаблон напрямую из консоли во время создания нового проекта.

## Рабочее пространство

Раз уж весь тулчейн стал мультипроектным, для Visual Studio Code добавлена полная интеграция с файлом формата *\*.code-workspace*, в нем теперь будут находиться все ваши открытые проекты. Открывайте рабочее пространство через редактор со встроенным шаблоном [toolchain.code-workspace](toolchain.code-workspace) и начинайте свой путь без сложных настроек. Или измените свойство `workspaceFile` для полного отключения интеграции или изменения пути к файлу пространства.

Вы все также можете открывать папку тулчейна в вашем редакторе, пользуясь таском `Select Project`. Остальные папки проектов скрываются, так что вы можете сосредоточиться исключительно на выбранном моде.

## Подключение за пару секунд

Собрали проект, а что дальше? Если устройство уже подключено, оно просто будет сохранено в списке для последующих подключений. В противном случае будет вызван мастер настройки подключений, в котором вы сможете настроить автоматическое подключение по проводу, удаленно или подключением с автоматическим определением локальных адресов. После этого подключение будет выполняться само по себе с предпочтением к проводному подключению, либо пользователю будет предложено выбрать одно устройство из списка. Используйте таск `Configure ADB` для настройки новых устройств если у вас уже есть подключение.

Для каждого мода вы все также можете настраивать `pushTo`, на этапе первой сборки предлагается выбрать глобальный модпак для отправки на устройство. Он будет использован для каждого мода по умолчанию, свойство в *make.json* указывает на полный путь до мода, а глобальное значение определяет лишь путь до модпака.

## Ускорение сборки

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

## Сборка жабы с компилятором R8/D8

Проекты отныне официально поддерживают использование Java 8 со всеми сахарными прелестями и компиляцией для поддержки на старых версиях Android. Скомпилированые классы кешируются чтобы сэкономить время на последующую компиляцию, а неизменные библиотеки так и вовсе будут скомпилированы лишь один раз. В ближайшее время также планируется и реализация использования Kotlin в качестве языка для компиляции, но это уже совсем другая история.

## Обновления как никогда проще

Запустите таск `Check for Updates` и все готово! Устанавливаются обновления для скриптов тулчейна, конфигураций тасков если это не отключено и семпла мода если он есть. Проекты ни коим образом не могут быть затронуты. Однако не одним тулчейном теперь богат тулчейн. Этот же таск проверит обновления для всех установленных компонентов.

Что такое компоненты? Android Debug Bridge, TypeScript декларации, жабный компилятор, класспатч с автоматическими обновлениями под последние версии Inner Core, нативный компилятор и хедеры, включая еще и GNU STL. Каждый компонент обновляется лишь тогда, когда в него внесены изменения. Вы сможете установить компоненты используя установочный скрипт или впоследствии таском `Integrity Components`, если такая необходимость появится.

## Вся информация перед глазами

Собрали для вас информацию по использованию тулчейна, описание каждой настройки в конфигурациях и ответы на частые вопросы. И если последнее впоследствии будет неоднократно пополняться, информации по доступным возможностям должно быть достаточно чтобы не заниматься исследованиями скриптов тучлейна часами напролет.

## Прочие изменения

То что по каким либо причинам не вошло в остальной список, но возможно будет для вас не менее интересным.

- Скрипт установки расширен для использования стартовых операций импорта, установки компонентов и интерактивной консоли с настройками; он также может быть использован для переустановки поврежденного тулчейна
- Поддержка сборки `custom` скриптов с настройками `sourceName`, `optimizationLevel` и поддержкой мультиинклюдов свойством `includes`
- Добавлены таски для исключительной сборки, в таких случаях отправка на устройство выполнена не будет
- Обновлены нативные хедеры, в класспатч добавлены пропущенные библиотеки и генерация новых библиотек для обновлений, декларации разделены для поддержки контекста прелоадера (зарузчика ресурсов) модов
- Архив релиза собирается в подпапку эквивалентной названию папки проекта, в корне архива сборки теперь лежит папка а не весь проект
- Отдельный таск для ребилда конфига деклараций
- Немалая часть известных ошибок сопровождается соответствующими сообщениями и кодами выхода вместо прямого возникновения
- По умолчанию на устройство отправляются все файлы, а не только измененные, так как существует несколько человек у которых есть проблемы с этим; измените свойство `adb.pushUnchangedFiles` чтобы вернуть эту опцию в старое русло
- Частичная поддержка 'голового' жабаскрипта, компилятор tsc требуется если вы планируете использовать декларации или тайпскрипт
- toolchain-mod -> toolchain, toolchain-mod/src -> toolchain-sample-mod, toolchain-mod теперь это шаблон построенный на базовых необходимостях моддеров
- Рекомендуется убрать префикс *src* из своих проектов, папки лучше расположить прямо в корне проекта перед глазами
- Из воркспейса скрыты только действительно ненужные папки, основные скрипты, декларации, хедеры и класспатч к ним не относятся
- Исправлены сборка базового шаблона для мода и пример с использованием всех доступных возможностей
- Установка NDK не выкидывает пользователя с ошибкой если установка отменяется
- В проекте вместо пробелов используется табуляция; это касается как тулчейна, так и собранных им модов; ну и неиспользованные импорты удалены просто как есть
- Удалено стандартное создание модов с прилегающими к нему архивами
- Свойство `ndkPath` может использовать относительные пути от тучлейна
- Android Debug Bridge не будет загружен по умолчанию если он уже установлен в систему
- Нативный и жабный компиляторы больше не пытаются компилировать пустые папки или файлы с неподдерживаемым расширением
- Шорткуты `{datestamp}` и `{timestamp}` для свойств *mod.info* (`info` в *make.json*) превращаются в дату и время компиляции соответственно
- Библиотека distutils признана устаревшей и больше не требуется для работы тулчейна
- Исключение тулчейна из результатов поиска
- Базовые конфиги в случае чего наследуются от основного конфига тулчейна, что и позволяет использовать овверайды в проектах
- Для некоторых свойств добавлены относительные или абсолютные пути, изучите настройки конфигураций для получения подробностей
- Скрипт импорта расширен для поддержки новых типов скриптов, жабного и нативного кода, а также сжатия нескольких *make.json* в один; дополнительно копируются папки репозиториев для упрощения перехода на новый тулчейн
- Обновлены прогрессы в тасках, в целом все консольные элементы претерпели изменения
- Сниппеты для калбеков еще быстрее помогут вставлять новые в код
- Еще несколько новых свойств в конфиге, нет смысла расписывать их здесь
- Все еще требуется Python 3.6, однако для обеспечения асинхронной работы автопинга необходим Python 3.7

> Пока это лишь первый этап обновления, в дальнейшем уже запланирован новый функционал.
