Веб

Как очистить кэш компилятора Flash CS4 (ASO-файлы)

Пошаговое руководство по очистке кэша компилятора Flash CS4: удаление ASO-файлов, проверка Document class и Linkage, очистка SWC и полная пересборка проекта.

Как очистить кэш компилятора Flash CS4 при перемещении классов в другие пространства имен, когда старые ссылки на классы продолжают использоваться?

Я столкнулся с проблемой в Flash CS4, когда переместил класс с именем Jenine из одного пространства имен в другое. Несмотря на обновление всех ссылок, компилятор продолжает использовать старое определение класса. Когда я создаю новый экземпляр класса:

actionscript
var jenineInstance:Jenine = new Jenine();
trace(getQualifiedClassName(jenineInstance));

Он все равно возвращает старое пространство имен (com.oldnamespace.subspace::Jenine) вместо нового (com.newnamespace.subspace::Jenine). Я пытался удалить все ссылки на старый класс, но компилятор продолжает включать его в скомпилированный SWF. Как можно очистить кэш, который использует компилятор Flash для разрешения этих устаревших ссылок на классы?

Компилятор Flash CS4 кеширует скомпилированные определения классов в ASO‑файлах, поэтому после перемещения класса старые ссылки могут оставаться в скомпилированном SWF. Решение — удалить ASO‑файлы (или в Flash: File → Delete All Temporary Files), проверить Document class и привязки в Library, очистить SWC/Library path и полностью пересобрать проект; чаще всего это устраняет проблему с getQualifiedClassName. Подробные шаги, команды поиска/удаления и проверки приведены ниже.


Содержание


Что такое кэш компилятора и ASO‑файлы в Flash CS4

Когда вы компилируете FLA, Flash CS4 создаёт временные файлы (ASO‑файлы), которые ускоряют инкрементальную компиляцию. Эти ASO‑файлы живут рядом с вашим .fla и могут содержать информацию о полных именах классов, поэтому при обычной сборке компилятор может повторно использовать старое определение класса вместо пересборки из обновлённых .as‑файлов. Подробное объяснение и практическое решение — удаление ASO‑файлов — описано в обсуждении на Stack Overflow.

Ещё один частый источник — скомпилированные библиотеки (SWC) или привязки класса в библиотеке FLA: если в Library или в Library path лежит SWC с тем же классом, он перекроет изменённый исходник. О том, как SWC и Source/Library path взаимодействуют, можно прочитать в руководстве по библиотекам ActionScript (EduTech Wiki). Наконец, проверьте, что объявление package в .as совпадает с файловой иерархией и именем класса — см. документацию Adobe по пакетам и пространствам имён (Adobe — Packages and namespaces).


Практическая очистка кэша компилятора Flash CS4: шаг за шагом

  1. Сохраните проект и закройте Flash CS4 (рекомендуется).
  2. Удалите все ASO‑файлы в папке с .fla и в поддиректориях. ASO‑файлы могут называться project.asO, <имя_файла>.asO и т.п. Примеры команд:
  • macOS / Linux:
bash
# из папки проекта
find . -iname '*.aso' -print -exec rm -f {} \;
  • PowerShell (Windows):
powershell
Get-ChildItem -Path "C:\path\to\project" -Recurse -Include *.asO,*.aso | Remove-Item -Force
  • cmd (Windows):
cmd
for /r %i in (*.asO *.aso) do del "%i"
  1. Откройте Flash CS4 и выберите File → Delete All Temporary Files. Это удалит кэшированные ASO и другие временные файлы. После этого сделайте полную публикацию (Publish или File → Publish Settings → Publish).

  2. Проверьте Document class в панеле Properties — поле Document class должно указывать на новое пространство имён (например, com.newnamespace.subspace.Jenine). Если там указано старое имя — замените.

  3. Проверьте Library: откройте Library, щёлкните правой кнопкой по символам, выберите Properties → Linkage и убедитесь, что в поле Class не стоит старое полностью‑квалифицированное имя.

  4. Удалите/проверьте SWC из Library path: временно исключите SWC из Library path и пересоберите — если проблема ушла, значит старое определение было внутри SWC. SWC можно распаковать как ZIP и просмотреть содержимое (catalog.xml/library.swf), чтобы найти упоминание старого класса.

  5. Если вы используете Flash Builder или Flex/IDE вместе с CS4: сделайте Project → Clean в IDE и перезапустите. См. обсуждение проблем с кешем компилятора в Flash Builder: Stack Overflow — How to stop Flash Builder from caching….

  6. Очистите кеш браузера и используйте «cache buster» при тестировании (например, your.swf?v=12345), чтобы исключить показ старого SWF из браузерного кеша. Об этом упоминается в похожих обсуждениях по проблемам компиляции и кеширования (пример обсуждения).

  7. После всех очисток заново опубликуйте FLA и запустите тест:

actionscript
var jenineInstance:Jenine = new Jenine();
trace(getQualifiedClassName(jenineInstance));

Ожидаемый результат: com.newnamespace.subspace::Jenine. Если всё ещё видно старое имя — идём дальше (см. раздел про дополнительные проверки).


Дополнительные проверки и частые причины (SWC, Library, Document class)

  • Дублирование классов в SWC и исходниках. Если один и тот же класс есть в SWC (включённом в Library path) и в Source path, компилятор может брать скомпилированную версию из SWC. В таком случае удалите дубликат из Source или исключите SWC, либо регенерируйте SWC с обновлёнными классами (см. EduTech Wiki).

  • Неправильный package в .as. Если строка package com.newnamespace.subspace { ... } не совпадает с местоположением файла, компиляция может вести себя неожиданно. Проверьте соответствие файловой структуры и объявления package (см. Adobe).

  • Привязка классов в библиотеке FLA. Часто старое имя «зашито» в поле Linkage у символа в Library — это надо исправить вручную.

  • RSL / Runtime shared libraries. Если вы подключаете RSL, класс может подхватываться оттуда. Проверьте Publish settings и список RSL.

  • Поиск старых ссылок. Выполните поиск по проекту (grep / Select-String / поиск в файловой системе) по фрагменту com.oldnamespace или по Jenine, чтобы найти место, где старое имя всё ещё упоминается—включая config‑файлы, XML, HTML‑обёртки, или заархивированные SWC.

  • Если у вас длинная цепочка инструментов сборки, добавьте шаг очистки ASO в ваш сценарий сборки — это гарантирует стабильность.


Как избежать повторной проблемы в будущем

  • Держите единственный источник правды: либо исходники (.as), либо скомпилированные SWC, но не оба одновременно.
  • При переименовании/перемещении классов делайте: 1) изменить package и пути, 2) удалить ASO, 3) пересобрать SWC (если есть), 4) опубликовать FLA.
  • Автоматизируйте очистку временных файлов перед билдом (скрипт, CI job). Пример простого скрипта на bash:
bash
# очистка ASO перед сборкой
find /path/to/project -iname '*.aso' -delete
# затем запуск сборки/публикации
  • Используйте версионирование SWF/HTML (cache buster) при тестировании в браузере, чтобы избежать ложных срабатываний из‑за браузерного кеша.
  • Проверяйте Document class и Linkage в Library сразу после рефакторинга — это экономит время.

Источники


Заключение

Коротко: проблема чаще всего вызвана ASO‑файлами — удалите их (или в Flash: File → Delete All Temporary Files), проверьте Document class и привязки в Library, исключите дублирование в SWC, затем полностью пересоберите проект. После этого кэш компилятора Flash CS4 сбросится, и getQualifiedClassName начнёт возвращать новое пространство имён.

Авторы
Проверено модерацией
Модерация