Files
kam-mobile/BUILD_ATTEMPTS_CHANGES.md
admin_d d6676896d4
Sync changed files to Google Drive / sync (push) Successful in 2m27s
Reuse Android compiler outputs and remove old build artifacts
2026-10-10 02:05:20 +05:00

125 lines
11 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Изменения при попытках собрать 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`.