11 KiB
Изменения при попытках собрать 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. - Записана ошибка:
/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-e01492c520261009T201018Z-293f32ce20261009T201542Z-734c8b9e20261009T201938Z-0d29dc0920261009T202407Z-e1fdcdb020261009T202805Z-effd854420261009T203305Z-0d62cff220261009T203736Z-692bf34220261009T204411Z-618edf6120261009T204819Z-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.