warto przeczytać :
Dalvik - miasto na północnym wybrzeżu Islandii w którym żyje ok. 1500 osób. Jest typowym miastem portowym, dobrze rozwinięte jest tu rybołówstwo oraz przeróbka ryb, a także znajduje się niewielki przemysł. Zaopatrywany jest w ciepłą wodę z gorących źródeł. Mieści się tu urząd gminy oraz muzeum. W 1943 roku trzęsienie ziemi zniszczyło większość domostw w Dalvik.
- Wikipedia
Z wierzchu Java, pod maską Dalvik
Docelowym językiem programowania na Androida jest Java. Zwykle pliki z kodem źródłowym napisanym w Javie kompilowane są do plików .class, zawierających instrukcje dla wirtualnej maszyny. Instrukcje te nazywa się bytecode ‘em Javy (Java Bytecode). Kiedy uruchamiamy skompilowany program napisany w Javie, wirtualna maszyna (JVM) ładuje owe pliki do pamięci i uruchamia zawarty w nich kod. Jednak Android nie posiada JVM! Zamiast JVM, Google zdecydował się wyposażyć Androida w technologię Dalvik.
Java Reloaded
Dalvik to coś w rodzaju ulepszonej wirtualnej maszyny Javy. Java ma już swoje lata, ale od tego czasu fundamenty tej technologii nie zmieniły się. Kilkanaście lat doświadczeń z Javą i urządzeniami mobilnymi wykazały nieliczne, lecz bardzo ważne słabe punkty JVM. Sun nadal nie zdecydował się na podjęcie drastycznych kroków, aby te problemy rozwiązać. Skoro Sun nie skłania się do ulepszenia Javy jako platformy w najbliższym czasie, inżynierzy Google’a zdecydowali wziąć sprawy w swoje ręce i stworzyli własne rozwiązanie. Tak właśnie powstał Dalvik - nowoczesna wirtualna maszyna, przystosowana specjalnie do urządzeń mobilnych, gdzie szczególną uwagę należy zwrócić na małe zasoby pamięci, energii i niewielką prędkość procesorów.
Wśród narzędzi zawartych w SDK znajduje się kompilator. Kompilator ów nie tworzy jednak plików .class z bytecode’m Javy, lecz pliki .dex z bytecode’m Dalvik’a. Następnie skompilowane pliki, wraz ze strukturą katalogów i znajdującymi się w nich multimediami, zostają spakowane - zamiast do pliku .jar - do pliku .apk (Android Package). Tak przygotowana aplikacja uruchamiana jest przez wirtualną maszynę Dalvik’a.
Ma to swoje implikacje - zarówno plusy, jak i minusy. Do plusów należy zaliczyć z pewnością lepszą obsługę pamięci, lepszy Garbage Collector, większą wydajność. Z drugiej strony bytecode Dalvik’a nie jest w 100% kompatybilny z bytecode’m Javy. Nie zadziałają więc na Adnroidzie bardziej wyrafinowane sztuczki programistyczne, korzystające z Class Loader’ów czy Java Reflection API.
Prawie jak Java
Bezpośrednio przekłada się to na problemy z uruchomieniem na Androidzie projektów korzystających np. z języków takich jak Groovy, JRuby czy Jython. Ponadto pojawiają się problemy, jeśli chcemy użyć framework’ów IoC takich jak Spring, OSGi czy chociażby PicoContainer. Także iJetty - wersja popularnego, minimalistycznego serwera webowego Jetty, przygotowana specjalnie dla Androida - nie może w tej chwili samodzielnie instalować aplikacji webowych dostarczanych w plikach .war.
A więc Dalvik jest prawie jak Java. Jak wiadomo, prawie robi wielką różnicę i jeśli Google pragnie sukcesu Androida, będzie musiał podjąć pewne kroki. Na razie pojawiają się plotki o obietnicach, że w SDK pojawią się w ClassLoader’y takie jak w Javie, a także z czasem dostępne będzie też pełne wsparcie dla Reflection API.
(ź)gphone