Как очистить кэш компилятора Flash CS4 (ASO-файлы)
Пошаговое руководство по очистке кэша компилятора Flash CS4: удаление ASO-файлов, проверка Document class и Linkage, очистка SWC и полная пересборка проекта.
Как очистить кэш компилятора Flash CS4 при перемещении классов в другие пространства имен, когда старые ссылки на классы продолжают использоваться?
Я столкнулся с проблемой в Flash CS4, когда переместил класс с именем Jenine из одного пространства имен в другое. Несмотря на обновление всех ссылок, компилятор продолжает использовать старое определение класса. Когда я создаю новый экземпляр класса:
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
- Практическая очистка кэша компилятора Flash CS4: шаг за шагом
- Дополнительные проверки и частые причины (SWC, Library, Document class)
- Как избежать повторной проблемы в будущем
- Источники
- Заключение
Что такое кэш компилятора и 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: шаг за шагом
- Сохраните проект и закройте Flash CS4 (рекомендуется).
- Удалите все ASO‑файлы в папке с .fla и в поддиректориях. ASO‑файлы могут называться
project.asO,<имя_файла>.asOи т.п. Примеры команд:
- macOS / Linux:
# из папки проекта
find . -iname '*.aso' -print -exec rm -f {} \;
- PowerShell (Windows):
Get-ChildItem -Path "C:\path\to\project" -Recurse -Include *.asO,*.aso | Remove-Item -Force
- cmd (Windows):
for /r %i in (*.asO *.aso) do del "%i"
-
Откройте Flash CS4 и выберите File → Delete All Temporary Files. Это удалит кэшированные ASO и другие временные файлы. После этого сделайте полную публикацию (Publish или File → Publish Settings → Publish).
-
Проверьте Document class в панеле Properties — поле Document class должно указывать на новое пространство имён (например,
com.newnamespace.subspace.Jenine). Если там указано старое имя — замените. -
Проверьте Library: откройте Library, щёлкните правой кнопкой по символам, выберите Properties → Linkage и убедитесь, что в поле Class не стоит старое полностью‑квалифицированное имя.
-
Удалите/проверьте SWC из Library path: временно исключите SWC из Library path и пересоберите — если проблема ушла, значит старое определение было внутри SWC. SWC можно распаковать как ZIP и просмотреть содержимое (catalog.xml/library.swf), чтобы найти упоминание старого класса.
-
Если вы используете Flash Builder или Flex/IDE вместе с CS4: сделайте Project → Clean в IDE и перезапустите. См. обсуждение проблем с кешем компилятора в Flash Builder: Stack Overflow — How to stop Flash Builder from caching….
-
Очистите кеш браузера и используйте «cache buster» при тестировании (например,
your.swf?v=12345), чтобы исключить показ старого SWF из браузерного кеша. Об этом упоминается в похожих обсуждениях по проблемам компиляции и кеширования (пример обсуждения). -
После всех очисток заново опубликуйте FLA и запустите тест:
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:
# очистка ASO перед сборкой
find /path/to/project -iname '*.aso' -delete
# затем запуск сборки/публикации
- Используйте версионирование SWF/HTML (cache buster) при тестировании в браузере, чтобы избежать ложных срабатываний из‑за браузерного кеша.
- Проверяйте Document class и Linkage в Library сразу после рефакторинга — это экономит время.
Источники
- Flash CS4 refuses to let go — Stack Overflow
- How to stop Flash Builder from caching Compiler config files specified by -load-config — Stack Overflow
- Flash Builder 4 changes not compiled — Stack Overflow
- Flash using ActionScript libraries tutorial — EduTech Wiki
- Adobe Flash Platform — Packages and namespaces
- Compiler Directives - Flash CS2/AS2 (mirror)
Заключение
Коротко: проблема чаще всего вызвана ASO‑файлами — удалите их (или в Flash: File → Delete All Temporary Files), проверьте Document class и привязки в Library, исключите дублирование в SWC, затем полностью пересоберите проект. После этого кэш компилятора Flash CS4 сбросится, и getQualifiedClassName начнёт возвращать новое пространство имён.