RSLs Monkey Patching
Запись от alatar размещена 23.01.2012 в 00:53
Эта статья компиляция нескольких статей найденных на просторах и собственных изысканий.
Источники:
1. http://blogs.adobe.com/dloverin/2010...flex_rsls.html
2. http://renaun.com/blog/2010/08/flex-...nkey-patching/
3. http://www.hrundik.ru/blog/ru/2009/1...ibraries-rsls/
Теорию можете почитать в источнике 3. Инструкция будет описываться для FlashBuilder 4.
Зачем вообще писать о том, о чем уже написано?
Все источники грешат или неполнотой информации (наиболее полный и вменяемый источник 2) или костылями в виде спецпрелоадера.
Почему бы просто не запостить баг и не подождать пока починят?
Можно конечно
Что патчить?
Да много чего. Для примера будем патчить, что под рукой. Например LineSeries из пакета mx.charts.
Подготовка
Эта часть несущественна, вы можете пропатчить любой класс и приведена лишь для примера.
Для начала создадим библиотеку с именем, например, sdkBugFixes
File -> New -> Flex Library Project
Не забудьте указать необходимую версию SDK.
Создадим два пакета mx.charts.series и mx.charts.styles.metadata (LineSeries инклюдит отсюда пару классов).
В mx.charts.series копируем, собственно, LineSeries.as. В mx.charts.styles.metadata — FillStrokeStyles.as и ItemRendererStyles.as.
В LineSeries.as ищем строчку и удаляем ее.
Теперь собственно патчинг. Ищем функцию describeData и в начало добавляем:
Теперь у нас будет корректно считаться maximum для LinearAxis при смене series в LineChart.
Добавляем в опции компилятора -include-inheritance-dependencies-only=true для уменьшения размера библиотеки (опция появилась в SDK 4.5). Далее идем в Project -> Properties -> Flex Library Build Path -> Library Path, ищем chart.swc и выставляем Link Type в Merged into code. Если этого не сделать, получим RTE из-за отсутствия базового класса.
Применение патча
Если вы не поленились почитать теорию в источнике 3, то уже знаете (а возможно и знали) что нам необходимо, что бы наш класс загрузился до класса который мы патчим. Для этого необходимо сделать следующее.
1. В своем проекте перейти в Project -> Properties -> Flex Build Path -> Library Path.
2. Снять флажок с Automatically determine library ordering based on dependencies.
3. Нажать Add Project и добавить созданную библиотеку к проекту.
4. Выделить charts.swc и нажать Remove.
5. Выделить папку с библиотеками SDK и нажать Remove.
6. Нажать Add SWC... и добавить charts.swc.
7. Нажать Add Flex SDK.
8. Кнопками Up / Down разместить библиотеки в следующем порядке
-SDK
-sdkBugFixes
-charts.swc
Должно получиться так:
9. Для нашей библиотеки выставляем Link Type как RSL, verification None (если грузиться будет с доверенного домена) или Digest (recommended) (если грузиться будет с другого домена с файлом политик), после чего надо нажать Add указать адрес файла политик (либо не указывать, что аналогично verification None) и нажать OK. В FB 4.5 пункт verification убрали, т.е. в нем всегда будет ситуация с выбранным Digest.
10. Повторить пункт 9 для charts.swc, с одним нюансом, вместо charts.swz, необходимо вписать charts.swf. Дело в том, что swz кешируются флеш-плеером и грузятся всегда перед остальными библиотеками.
FB 4.0
FB 4.5
После этих манипуляций пропатченный класс будет загружен раньше оригинального.
Всего комментариев 1
Комментарии
27.01.2012 01:49 | |
Очень специфично.
Я делал манкихак, но не к флексу а к спрингу, но в рсл ни разу не надо было. Но всё равно спасибо. Может пригодится. |
Последние записи от alatar
- Трансформации вокруг произвольной точки (05.02.2015)
- Декомпозиция матрицы. (25.12.2014)
- Баги TextField в iOS (29.07.2013)
- [Spark] Стрелочный индикатор. (06.12.2012)
- RSLs Monkey Patching (23.01.2012)