Integracja Samsung Smart TV SDK z Eclipse Juno (lub nowszym)

Samsung Smart TV

Na stronach Samsung Smart TV Apps Developer Forum można znaleźć narzędzia do tworzenia aplikacji na tę platformę (Smart TV). Dla ludzi zaprzyjaźnionych z Eclipse dobrą opcją jest wersja zintegrowana właśnie z tym IDE. Niestety, nawet najnowsza wersja środowiska (SDK 4.0 Beta) bazuje na Eclipse Indigo, czyli jest przestarzała o niemalże dwie generacje (stabilne Juno, Kepler na etapie M3). Na szczęście jest sposób na rozwiązanie tego „problemu” :)

Zanim rozpoczniemy integrację, kilka uwag:

  • Nie należy ruszać już posiadanych środowisk Eclipse, a także współdzielić workspace’ów (lub przynajmniej zrobić ich backup)
  • W przykładzie integracja bazuje na edycji Juno, choć prawdopodobnie identyczna (lub analogiczna) będzie dla każdej kolejnej wersji Eclipse
  • Aby nie rozwlekać opisu, w niektórych miejscach zastosuję „skróty myślowe” licząc na samoogarnięcie czytelnika ;)

English-speaking readers  should read stackoverflow’s question/answer.

Integracja

Na samym początku musimy ściągnąć podstawkę do dalszych operacji, czyli Eclipse Platform Runtime Binary (czyli coś w stylu „Eclipse bez wtyczek”) dla tej wersji, której chcemy używać. Jak już pisałem, w tym przykładzie użyjemy Juno. Ze ściągniętego archiwum wypakowujemy katalog „eclipse” i wrzucamy go w dowolne miejsce, skąd chcemy go używać (możemy też zmienić jego nazwę, np. na Eclipse Juno). W poniższym przykładzie będzie to lokalizacja D:\Apps\Eclipse Juno, co jest istotne, gdyż w dalszej części pojawiać się będą odwołania do tej ścieżki.

Uruchamiamy oficjalne SDK Samsunga 4.0 (jeśli nie mamy, to musimy ściągnąć i zainstalować) oraz nasz nowy Eclipse Juno (w osobnych workspace’ach). W obu uruchamiamy listę zainstalowanych składników: Help → About Eclipse → Installation Details → Features (ewentualnie Window → Preferences → Install/Update → „Uninstall or update software tha is already installed” → Features). Musimy do Juno doinstalować pakiety, które są w środowisku przygotowanym przez Samsung, są to (grupuję po kategorii):

  • Eclipse Packaging Project
    • Javascript IDE
    • Marketplace Client (opcjonalny, ale warto mieć)
  • Eclipse Web Platform Tools
    • Eclipse Faceted Project Framework
    • Eclipse JavaScript Development Tools
    • Eclipse Web Developer Tools
    • Eclipse XML Editors and Tools
    • Eclipse XPath 2 Developers Tools
    • Eclipse XSL Developer Tools
  • Eclipse.org
    • Eclipse CVS Client

Większość można znaleźć w repozytorium dla edycji Juno w kategorii  „Web, XML, Java EE and OSGi Enterprise Development„. XPath 2 nie ma na liście, ale instalowany jest wraz z XSL Developer Tools. Problematyczny jest jedynie pakiet Javascript IDE, gdyż nie da się go zainstalować używając wbudowanych narzędzi – musimy podkraść go z oficjalnego SDK. W tym celu należy skopiować katalogi:

  • plugins/org.eclipse.epp.package.javascript_1.4.2.20120131-1457
  • features/org.eclipse.epp.package.common.feature_1.4.2.20120213-0814
  • features/org.eclipse.epp.package.javascript.feature_1.4.2.20120213-0814

do naszego Eclipse Juno zachowując ich strukturę (czyli plugins do plugins itd.). W tym momencie nasza lista pakietów powinna wyglądać następująco:

Eclipse Juno z pakietami jak w Samsung SDK

Wydawać by się mogło, że to wszystko… ale wyprzedzając fakty i oszczędzając trochę nerwów dodam, że trzeba też doinstalować Eclipse Graphical Modeling Framework (GMF) Runtime, w przeciwnym wypadku dalsze kroki się nie powiodą, a my ewentualnie dogrzebiemy się do logów w workspace .metadata/.log (fragment):

!ENTRY org.eclipse.equinox.p2.director 2 0 2012-11-25 00:33:56.606
!MESSAGE Problems resolving provisioning plan.
!SUBENTRY 1 org.eclipse.equinox.p2.director 2 0 2012-11-25 00:33:56.606
!MESSAGE Unable to satisfy dependency from tv.samsung.sdk.core 2.1.1.201209271345 to bundle org.eclipse.gmf.runtime.common.core 0.0.0.

Wyłączamy Eclipse Juno. Następnym krokiem jest skopiowanie katalogu dropins/sec_smart_tv_sdk z Samsung SDK 4.0 (w 3.5.2 nie ma tego katalogu!) do naszego Eclipse Juno. Dropins to taki katalog do lokalnej instalacji (takie jakby drzwi kuchenne), z którego Eclipse instaluje pakiety podczas uruchamiania (zresztą podobnie robi w przypadku plugins i features). Aby zostało to wykonane poprawnie, Eclipse musi być uruchomiony jako administrator. W tym momencie mamy:

Eclipse 4.2 z Samsung Smart TV SDK

Niestety, przy próbie wejścia w ustawienia Samsung Smart TV SDK → Samsung Smart TV SDK Preferences widzimy komunikat:

Samsung SDK Install Path Error

Dlatego musimy jeszcze wskazać ścieżkę do wcześniej zainstalowanego SDK 4.0. Eclipse dostarczany razem z SDK można usunąć.

Owocnego developingu :)

Uwagi

Jeśli mimo wykonania powyższych kroków Samsung Smart TV SDK nie pojawia się w naszym Eclipse Juno, możemy spróbować debugować w czym problem. W tym celu w katalogu głównym naszego Eclipse Juno tworzymy plik .options a w nim wstawiamy:

org.eclipse.equinox.p2.core/debug=true
org.eclipse.equinox.p2.core/reconciler=true

Następnie uruchamiamy Eclipse z włączonym debugowaniem: Start -> Uruchom -> D:\Apps\Eclipse Juno\eclipse.exe -debug

Na podstawie wyświetlanych informacji czasem da się dojść do tego w czym tkwi problem, w tym przypadku np. bez wspomnianego GMF otrzymalibyśmy komunikat „Some units will not be installed, because they are already installed or there are dependency issues”, który w zasadzie niewiele mówi, ale jednak na coś wskazuje. O wykrywaniu dropins’ów więcej można przeczytać tutaj.

W razie czego z pomocą mogą przyjść:

  • Usunięcie wpisów dotyczących sec_smart_tv_sdk z D:\Apps\Eclipse Juno\configuration\org.eclipse.osgi\bundles\…\data\cache.timestamps (gdzie … to jaki losowy numer, najwygodniej jest wyszukać plik cache.timestamps)
  • Plik logów w wybranym przez nas workspace (.metadata/.log)

Skomentuj "Integracja Samsung Smart TV SDK z Eclipse Juno (lub nowszym)":

Musisz się zalogować, aby móc dodać komentarz.