124 lines
11 KiB
Markdown
124 lines
11 KiB
Markdown
# Изменения при попытках собрать APK
|
||||
|
|
|
|||
|
|
Этот отчёт описывает изменения после завершения первой волны Task 15 (коммит `29df541`), сделанные во время попыток сборки, и последующую правку для повторного использования результатов компиляции. Изменения самой волны Task 15 сюда не включены.
|
|||
|
|
|
|||
|
|
## 1. Ручные исправления исходников во время попыток сборки
|
|||
|
|
|
|||
|
|
### `code/GameDiagnosticsGraphics_Mobile.pas`
|
|||
|
|
|
|||
|
|
- Добавлена повторная секция `private` после вложенного блока `type`, перед полями класса. Это исправляет разбор объявления класса компилятором FPC.
|
|||
|
|
- В `uses` раздела `implementation` добавлен `KM_CommonTypes`, чтобы используемые типы были доступны непосредственно этому модулю.
|
|||
|
|
- Переменная `Stage: TGraphicsVisibleDrawDiagnosticStageId` перенесена из внешнего блока переменных во вложенную процедуру `AdvanceVisiblePhase`. Это исправляет использование счётчика цикла во вложенной процедуре для FPC.
|
|||
|
|
|
|||
|
|
### `code/GameDiagnosticsView.pas`
|
|||
|
|
|
|||
|
|
- Добавлена повторная секция `private` после вложенного объявления `TGraphicsRequest`, перед полями класса, для корректного разбора FPC.
|
|||
|
|
|
|||
|
|
### `port-source/kam_remake/src/render/KM_Render.pas`
|
|||
|
|
|
|||
|
|
- Из интерфейсного `uses` удалены `Windows`, `LCLIntf`, `LCLType`, `OpenGLContext`, `dglOpenGL`.
|
|||
|
|
- Из `uses` реализации удалены `KromOGLUtils`, `KromUtils`, `KM_Defaults`, `KM_IoPNG`, `KM_CommonClasses`.
|
|||
|
|
- Цель: убрать ненужные зависимости мобильного адаптера от настольных модулей, которые мешали Android-компиляции. Тела методов этим изменением не переписывались.
|
|||
|
|
|
|||
|
|
### `port-source/kam_remake/src/res/KM_ResSprites.pas`
|
|||
|
|
|
|||
|
|
- В объявлении и реализации `OverloadRXDataFromFolder` тип параметра `aOnProgress` выбирается условно: `TUnicodeStringEvent` для FPC, прежний `TProc<string>` для остальных компиляторов.
|
|||
|
|
- Объявления и реализации `GetSoftenShadowType` и `SoftenShadowsList` заключены в `{$IFDEF WDC}`.
|
|||
|
|
- Подключение `KM_Resource` заключено в `{$IFDEF WDC}`.
|
|||
|
|
- Вложенная процедура `AppendFolder` внутри `OverloadGeneratedFromFolder` также заключена в `{$IFDEF WDC}`.
|
|||
|
|
- Цель: устранить несовместимый с FPC тип callback и ограничить зависимости от настольного владельца ресурсов. Это не устранило все настольные зависимости проекта: последняя сборка остановилась на `Graphics` в `KM_ResFonts`.
|
|||
|
|
|
|||
|
|
### Временная правка, которая была отменена
|
|||
|
|
|
|||
|
|
Во время разбора зависимостей менялся `port-source/kam_remake/src/res/KM_Resource.pas`. Эти правки полностью отменены; в текущем diff изменений этого файла нет.
|
|||
|
|
|
|||
|
|
## 2. Ресурс, добавленный во время сборки
|
|||
|
|
|
|||
|
|
### `private-assets/data/Sprites/Tileset.rxx`
|
|||
|
|
|
|||
|
|
- Создана копия существующего `private-assets/data/sprites/Tileset.rxx` в каталог `Sprites` с заглавной буквой.
|
|||
|
|
- Причина: различие регистра пути на Linux. Использована копия, поскольку подготовка ресурсов запрещает символьные ссылки.
|
|||
|
|
- Это игнорируемый Git ресурс, поэтому обычный `git diff` его не показывает. Исходный файл в `sprites` не заменялся.
|
|||
|
|
|
|||
|
|
## 3. Автоматические изменения сборочного скрипта
|
|||
|
|
|
|||
|
|
### `out/current/build.json`
|
|||
|
|
|
|||
|
|
- Метаданные прежней успешной сборки заменены результатом последней попытки: `20261009T204819Z-d5b17e32`.
|
|||
|
|
- Итоговый статус: `FAIL`; компиляция завершилась с кодом `1`; упаковка APK не запускалась (`NOT_RUN`).
|
|||
|
|
- Количество подготовленных ресурсов изменилось с `1` на `8`.
|
|||
|
|
- Записана ошибка:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
/work/vendor/kam_remake/src/res/KM_ResFonts.pas(5,13) Fatal: Can't find unit Graphics used by KM_ResFonts
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### `out/current/kam-mobile.apk` и `out/current/package.json`
|
|||
|
|
|
|||
|
|
- Прежние файлы удалены автоматически существующим обработчиком неуспешной сборки, чтобы старый APK не выдавался за результат текущей попытки.
|
|||
|
|
- Новый APK при этих попытках не создан.
|
|||
|
|
|
|||
|
|
### `build-evidence/<build_id>/`
|
|||
|
|
|
|||
|
|
Созданы каталоги с логами и итоговыми `build.json` для попыток:
|
|||
|
|
|
|||
|
|
- `20261009T200852Z-e01492c5`
|
|||
|
|
- `20261009T201018Z-293f32ce`
|
|||
|
|
- `20261009T201542Z-734c8b9e`
|
|||
|
|
- `20261009T201938Z-0d29dc09`
|
|||
|
|
- `20261009T202407Z-e1fdcdb0`
|
|||
|
|
- `20261009T202805Z-effd8544`
|
|||
|
|
- `20261009T203305Z-0d62cff2`
|
|||
|
|
- `20261009T203736Z-692bf342`
|
|||
|
|
- `20261009T204411Z-618edf61`
|
|||
|
|
- `20261009T204819Z-d5b17e32`
|
|||
|
|
|
|||
|
|
Рабочие каталоги этих попыток также создавались в игнорируемом Git каталоге `build/<build_id>/`. Это сгенерированные файлы компиляции, подготовки ресурсов и упаковки, а не ручные правки исходников.
|
|||
|
|
|
|||
|
|
## 4. Последующая правка инкрементальной сборки
|
|||
|
|
|
|||
|
|
Эти изменения сделаны отдельно, после остановки попыток сборки, по просьбе сохранять логи и повторно использовать скомпилированные модули.
|
|||
|
|
|
|||
|
|
### `app/CastleEngineManifest.xml`
|
|||
|
|
|
|||
|
|
- Удалена опция FPC `-B`, которая принудительно пересобирала все модули.
|
|||
|
|
- Остальные опции компилятора оставлены.
|
|||
|
|
|
|||
|
|
### `tools/generate.py`
|
|||
|
|
|
|||
|
|
- `-B` удалён и из списка разрешённых `COMPILER_OPTIONS`, чтобы проверка постоянного манифеста соответствовала изменению.
|
|||
|
|
- `materialize_application_project` теперь обновляет существующий проект вместо требования всегда создавать новую папку.
|
|||
|
|
- Неизменившийся сгенерированный манифест не перезаписывается, чтобы сохранить его время изменения.
|
|||
|
|
- Каталог данных может существовать; проектные Android services обновляются копированием после проверки.
|
|||
|
|
- Добавлены проверки символьных ссылок для повторно используемых каталога проекта, каталога данных и манифеста.
|
|||
|
|
|
|||
|
|
### `tools/build_cache.py` — новый файл
|
|||
|
|
|
|||
|
|
- Выбирает постоянный проект `build/work/<cpu>/application`.
|
|||
|
|
- Записывает параметры совместимости в `build/work/<cpu>/inputs.json`.
|
|||
|
|
- Сравнивает CPU, upstream commit, манифест, контракт выбора исходников, пути поиска, состав файлов исходников и параметры инструментария.
|
|||
|
|
- Для контейнерной сборки учитывает digest Docker image; для локальной — хеши исполняемых файлов `castle-engine` и `fpc`.
|
|||
|
|
- При несовместимости удаляет сгенерированный проект; при совпадении сохраняет его для повторного использования `.ppu` и `.o`.
|
|||
|
|
- Пишет сведения об использовании кэша в лог каждой попытки `compiler-cache.json`.
|
|||
|
|
|
|||
|
|
### `tools/runner.py`
|
|||
|
|
|
|||
|
|
- Подключает `cached_project` и использует постоянную папку проекта вместо `build/<build_id>/application`.
|
|||
|
|
- Отдельные логи каждой попытки остаются в `build/<build_id>/logs`; копирование в `build-evidence` сохранено.
|
|||
|
|
- Перед компиляцией удаляет прежние итоговые библиотеки `lib<name>_android_<cpu>.so` и APK внутри проекта; промежуточные `.ppu` и `.o` сохраняет.
|
|||
|
|
- Передаёт digest образа внутрь контейнера через `KAM_TOOLCHAIN_IMAGE` для проверки совместимости кэша.
|
|||
|
|
- Сериализует обычные запуски через `build/runner.lock`, чтобы они не меняли общий кэш одновременно. Внутренний запуск контейнера повторно эту блокировку не берёт.
|
|||
|
|
|
|||
|
|
### `README.md`
|
|||
|
|
|
|||
|
|
- Описаны постоянная папка компиляции, отдельные логи, автоматический сброс кэша и ручная очистка удалением `build/work/`.
|
|||
|
|
- Обновлено описание назначения каталога `build/`.
|
|||
|
|
|
|||
|
|
## 5. Состояние на момент отчёта
|
|||
|
|
|
|||
|
|
- После правки инкрементальной сборки сборка и тесты не запускались. Ускорение пока не измерено.
|
|||
|
|
- Первый запуск нового механизма заполнит новый кэш; старые папки попыток автоматически в него не переносятся.
|
|||
|
|
- Ошибка отсутствующего модуля `Graphics` остаётся нерешённой; правка кэша её не исправляет.
|
|||
|
|
- Перечисленные изменения после `29df541` не закоммичены и не отправлены в Git.
|
|||
|
|
- Настройки агентов и TOML-файлы этой правкой не редактировались.
|
|||
|
|
- Этот отчёт сохранён в `BUILD_ATTEMPTS_CHANGES.md`.
|