Rozwiązania Cross-platformowe są obecnie bardzo niedojrzałe. Nie polecam używania tego w poważnych projektach. Znam osoby, które robiły podejście do Titanium, gdzie pisze się w JS i HTML5. Aplikacje, które powstają w ten sposób są toporne, zajmują strasznie dużo miejsca w porównaniu z aplikacjami natywnymi, są niewydajne, trudne w utrzymaniu, a debugowanie ich, to dramat. Jak ostatnio przyglądałem się Sencha Touch, to był to po prostu framework do pisania UI dla aplikacji webowych dostosowanych do urządzeń mobilnych. Nie wiem, czy coś się w tym temacie zmieniło, ale jeśli twórcy tej biblioteki chcą wrzucać to JavaScriptowe UI do do WebView w Androidzie i analogicznych kontrolek w innych platformach, to niestety nie tędy droga. Aplikacje napisane w ten sposób będą chodziły, jak krew z nosa. Obawiam się, że właśnie PhoneGap działa na takiej zasadzie, ale głowy nie dam, bo nie wczytywałem się w dokumentację i nie widziałem źródeł tej biblioteki. W każdym razie, musi być jakiś powód używania technologii webowych w wymienionych bibliotekach i jakoś ciężko mi sobie wyobrazić, żeby to narzędzie było w stanie przekonwertować kod JS i HTML na czystą Javę i Obj-C.
Aplikacje cross-platformowe mają rację bytu jedynie w sytuacji, gdy piszemy gry. Możemy wtedy wykorzystać środowisko Unity i język C#. Jest to dobra droga, gdyż development takich aplikacji wygląda inaczej, niż w przypadku "tradycyjnych" projektów. Natomiast w przypadku klasycznych aplikacji użytkowych lub biznesowych, nie ma to na chwilę obecną sensu.
Podsumowując:
Jeśli chcemy, aby nasze aplikacje były napisane porządnie, działały porządnie i były łatwe w utrzymaniu, to musimy je napisać osobno na Androida w Javie, osobno na iOS w Obj-C i ewentualnie na inne, mniej popularne platformy.
Jeśli piszemy grę, to możemy wykorzystać środowisko Unity i język C#. Wtedy możemy wprowadzić aplikację na wiele platform za jednym zamachem.