Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Блоги > alatar

Оценить эту запись

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 ищем строчку
Код AS3:
include "../../core/Version.as";
и удаляем ее.

Теперь собственно патчинг. Ищем функцию describeData и в начало добавляем:
Код AS3:
if (!chart)
    return [];
Теперь у нас будет корректно считаться 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

Должно получиться так:
Название: Properties.JPG
Просмотров: 1162

Размер: 90.2 Кб

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
Название: Options.JPG
Просмотров: 788

Размер: 26.7 Кб

FB 4.5
Название: Options 4_5.jpg
Просмотров: 893

Размер: 50.1 Кб

После этих манипуляций пропатченный класс будет загружен раньше оригинального.
Размещено в Flex , Flex 4
Комментарии 1 Отправить другу ссылку на эту запись
Всего комментариев 1

Комментарии

Старый 27.01.2012 01:49 Котяра вне форума
Котяра
 
Аватар для Котяра
Очень специфично.
Я делал манкихак, но не к флексу а к спрингу, но в рсл ни разу не надо было.
Но всё равно спасибо. Может пригодится.
 

 


Часовой пояс GMT +4, время: 04:22.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.