mwiacek.comColorColor | Mobile  
Nowoczesność czyli LTE i Cordova ? (2013)
Submitted by marcin on Sat 14-Dec-2013

Polski
Polski blog
Android
dobreprogramy.pl



Ostatnio miałem okazję "pobawić się" przez chwilę S4 mini i9195 z LTE. I chociaż telefon ten nie obsługuje wszystkich sieci używanych w Polsce (konkretnie TD-LTE w paśmie 38), to ja akurat chciałem sprawdzić sobie zasięg w Play. Wejście do menu i konsternacja - opcji LTE brak. Krótkie googlowanie, użycie aplikacji ServiceMode Shortcut i jest....ikonka 4G. Niewątpliwie pomimo bałaganu (używanie wielu pasm, brak urządzeń "wielomodowych", ich blokowanie programowe, itd. itd.) jesteśmy świadkami pewnej rewolucji... I chociaż niektórzy operatorzy oferują niskie prędkości (więcej można osiągnąć nawet na HSDPA+), to z czasem ta technologia zdecydowanie może spowodować zmianę sposobu korzystania z różnych urządzeń (o ile rozwiązane zostanie "kilka" problemów typu zasilanie)....

A aplikacje ? Czy dalej będą natywne czy wszystko będzie siecią ?

Ostatnio potrzebowałem sprawdzić sobie jeden z aspektów - daje się bowiem zauważyć, iż niektórzy programiści już teraz korzystają z takich frameworków jak Cordova. Czy wprowadza on opóźnienia przy dostępie do bazy danych na Androidzie ?

W tym celu przygotowalem dwie aplikacje – jedna korzystająca z ostatniej Cordovy (3.2.0), wtyczki CordovaSQLLitePlugin i SQL Ciphera (bądź co bądź dane powinny być szyfrowane, prawda ?) i druga korzystająca z SQL Ciphera (kod javowy androidowy). Wyniki są następujące:

  • mało operacji, czyli otwarcie bazy, stworzenie tabeli, zrobienie w jednej transakcji 100 Insert, zrobienie 100 Insert w 100 transakcjach i zrobienie Select – kod „czysty” ok. 9230 ms, Cordova ok. 9379 ms (sa to wartości uśrednione z 5 pomiarów), czyli różnica wynosi ok. 1,6%
  • to samo co w 1, ale ze zwiększeniem ilości Insert (10000 w transakcji, 100 w oddzielnych transakcjach) – Cordova średnio 24630 ms, Android średnio 10827 ms (różnica 56% na korzyść Androida)
  • to samo co w 1, ale ze zwiększeniem ilości Insert (20000 w jednej transakcji w kodzie Androidowym + 100 w 100 transakcjach, 10000 w jednej transakcji+10000 w jednej transakcji+100 w 100 transakcjach w Cordovie, tutaj wystąpił problem z timeoutem, stąd uzycie 2 x10000 Insertów) – Cordova średnio 42136 ms, występowały pewne problemy pamięciowe, natomiast Android średnio 14260 ms (różnica 66% na korzyść Androida)
  • otwarcie bazy, stworzenie tabeli, zrobienie w jednej transakcji 100 Insert, zrobienie 100 Insert w 100 transakcjach i zrobienie 100 Select w 100 transakcjach – Android ok. 9103 ms, Cordova ok. 9786 ms (6,9% różnicy na korzyść Androida)

Ktoś mógłby powiedzieć, że przecież to jak udowadnianie, że koło jest okrągłe...i pewnie tak, bo aplikacje webowe w dalszym ciągu wydają się mocno przegrywać, niemniej jednak czasem trzeba mieć jakieś konkretne argumenty, prawda ? I nic to, że w rzeczywistości można nie potrzebować 10000 operacji Insert, ważne, że różnica bywa hmmm dosyć szokująca.

A Cordova to czasem tylko jeden z wielu frameworków używanych przy aplikacjach webowych - jest jeszcze jQuery, Dojo, itd. które zapewne też dodają to i owo i które też mogą mieć swoje błędy i przypadłości... Ale to już pewnie temat na inny raz (można zresztą poczytać z jakimi podstawowymi błędami walczyłem kiedyś tworząc aplikację pod Firefox OS: Katedra czy bazar, korpo czy anarchia ?....).

Jeszcze tylko krótkie wypunktowanie, czyli jak "proste" było przygotowanie aplikacji webowej tym razem:

  • pobieramy source.zip z http://cordova.apache.org/ (w chwili pisania 3.2.0)
  • rozpakowywujemy cordova-android.zip
  • pobieramy ant z http://ant.apache.org/bindownload.cgi
  • dodajemy ścieżkę do tools i platform-tools z Android SDK i ścieżkę ant do PATH
  • do katalogu frameworks z cordova-android dodajemy SQLCipher z http://sqlcipher.net/sqlcipher-for-android/ (dodajemy icudt46l.zip do assets i biblioteki do libs)
  • do katalogu frameworks z cordova-android dodajemy CordovaSQLLitePlugin z https://github.com/lite4cordova/Cordova-SQLitePlugin (m.in. na podstawie informacji z http://brodyspark.blogspot.com/2012/12/using-sqlcipher-for-android-with.html - do config.xml w res\xml należy dodać <feature name="SQLitePlugin"> <param name="android-package" value="org.pgsqlite.SQLitePlugin" /> </feature> do src\org\pgsqlite spatchowany SQLitePlugin.java, do assets\www spatchowany SQLitePlugin.js)
  • używamy create z bin z cordova-android do stworzenia nowego projektu androidowego (można z niego pobrać CordovaSQL.java i pliki z assets)
  • w katalogu framework w cordova-android kompilujemy plik jar
  • tworzymy nowy projekt androidowy z plikiem jar z poprzedniego punktu, bibliotekami sqlcipher, odpowiednim layoutem zawierającym org.apache.cordova.CordovaWebView, odpowiednim plikiem config.xml w res\xml i plikami inicjującymi Cordovę w pliku java

Proste, prawda ? Dlatego oba projekty też podaję w wersji źródłowej: Cordova, Android