Reuse Android compiler outputs and remove old build artifacts
Sync changed files to Google Drive / sync (push) Successful in 2m27s

This commit is contained in:
admin_d committed 2026-10-10 02:05:20 +05:00
1 parent 29df541ea1
commit d6676896d4
70 files changed
+225 -2828

No files matched your search

+124
View File
@@ -0,0 +1,124 @@
# Изменения при попытках собрать 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`.