Android má aplikace v Javě, takže není potřeba nic upravovat. Jediné, co by bylo potřeba přeložit/doplnit, jsou třeba pluginy do některých videopřehrávačů (MX Player). Nativní aplikace v Androidu prakticky nejsou (na rozdíl od Apple iOS, kde jsou všechny nativní). Nativní znamená, že jsou ve strojovém kódu daného procesoru.
Důvodů je několik, jen ty základní:
- Použití existujících knihoven (vlastních, 3. stran) popř. binárek v aplikacích.
- Výkon, zejména pro náročnější výpočty (fyzika, herní logika, apod.), zkuste si pustit CF-bench a uvidíte, jaký je na Vašem zařízení rozdíl mezi nativním a Java kódem jen pro takové věci jako floatové operace.
- Multiplatformní vývoj min. pro Android a iOS - jádro napsáno v C a omáčka kolem (GUI) nativně - viz ty Angry Birds.
Ale zrovna na x86 telefonech většinou funguje emulace, takže to bere i "armovské" binárky, ovšem otázka je, jak se to podepíše na výkonu a nefunguje to na 100% u všech her (a zatím je to x86).
Výkon, zejména pro náročnější výpočty (fyzika, herní logika, apod.), zkuste si pustit CF-bench a uvidíte, jaký je na Vašem zařízení rozdíl mezi nativním a Java kódem jen pro takové věci jako floatové operace
Pokud ten kód nebo Dalvik není napsaný úplně hloupě, neměl by v tom být významný rozdíl.
To využití stávajícího kódu napsaného v C/C++ ale dává smysl.
Takže požadované porovnání dalvik/native v CF-Bench Java vůči nativnímu v rámci 2 testů za jednoho spuštění aplikace s benchmarkem (MIPS/MSFLOPS/MDFLOPS/Mem read/Mem Write):
1. Huawei Ascend G300/Android 4.0.3 (za běhu systému)
1. běh: 3%/5%/11%/24%/26%
2. běh: 11%/44%/44%/23%/37%
2. ZTE Grand X In (x86)/Android 4.0.4 (po startu systému)
1. běh: 17%/48%/51%/16%/40%
2. běh: 16%/55%/51%/16%/39%
3. Asus EEE Pad Transformer TF300T (4+1 jader)/Android 4.2.1 (po startu systému)
1. běh: 21%/65%/59%/8%/81%
2. běh: 21%/64%/59%/9%/65%
Bohužel nemám po ruce něco s Androidem 4.4, ale rozdíl u momentálně nejpoužívanějších verzí je snad jasný. Z části za to asi můžou i věci jako garbage collection a další overhead Javy, ale nativní je rychlejší. U MSFLOPS je Java výkonově na 1/5, u floatů kolem polovičního výkonu a u čtení paměti to hodně kolísá, ale je to pod 1/4. Obdobný test si můžete udělat sami.
Samozřejmě existují i jiné benchmarky, můžete to proměřit a eliminovat vliv toho, co používám.
Zvláštní je, že podobná tvrzení ještě nikdy nikdo nedokázal podpořit nějakými čísly. Zatímco k vyvrácení čísla existují, např. i tady na Rootu.
"Vzdy minimalne o rad vykonnejsi" ma znamenat "vzdy minimalne 10x vykonnejsi"?
Nejake zname porovnani mame tady http://benchmarksgame.alioth.debian.org/ tam to tedy uplne o rad nevychazi :-), ale z pohledu me prace bych velmi rad znal mereni, kde je vykon skutecne o rad jinde. Bez konkretnich mereni, ktere navic pujde overit (=pristupne zdrojaky+presne info jak prekladat a spoustet) vam rekneme az tak uplne neverim ;-)
Vyrobit ako tak odladenu navigaciu je pomerne zlozite, je skoda aby sa nezdielal zdrojovy kod na vsetky ostatne platformy (iOS, Win CE, linux, ...). Java/C# nie su pomale pre vacsinu veci, na niektore vsak ano, niekedy aj 5x a pamatova narocnost podobne. Vypocet optimalnej cesty, praca s optimalizovanym formatom pre ulozenie mapy, su napr veci kde by to asi bolelo.
Dalej si je treba uvedomit, ze Dalvik(alebo aj .NET VM vo WP7/8) asi nema vykon VM Javy/C# na desktope. Tieto mobilne VM maju obmedzene prostriedky na JIT kompilaciu a nie su na ARM architekturu tak vyzrete.
Pre porovnanie mobilnych VM (vs c++):
http://stackoverflow.com/questions/17134522/does-anyone-have-benchmarks-code-results-comparing-performance-of-android-ap - nie je to komplexny test, ale vidiet ze Mono je minimalne tak vyzrete ako Dalvik, c++ vie byt ovela rychlejsie
http://www.koushikdutta.com/2009/01/dalvik-vs-mono.html - aj tu je nejake c++
http://www.youtube.com/watch?v=It8xPqkKxis - stare
Zrovna na Androidu by se hodilo, kdyby Dalvik uměl výsledky JIT persistentně ukládat a při příštím spuštění použít místo nové kompilace. Systém tam má aplikace ve své moci, takže nehrozí, že by mu je uživatel někam přesouval, nahrazoval potají za jiné verze nebo spouštěl na jiném hardwaru.
Jinak si nemyslím, že by výpočet optimální cesty nebo práce s mapou nešla v Javě napsat tak, aby byla stejně efektivní, jako nativní kód. Ale chápu, že se nevyplatí psát to podruhé. Akorát se trochu bojím, že to, že se některé navigace chovají z pohledu uživatele divně (UI nereaguje tak, jak by člověk čekal), může být způsobené právě použitím nativního kódu. Pravda, Sygic jsem zatím pořádně nezkoušel, třeba se bude chovat lépe než konkurence. Musím se někdy podívat, zda Google mapy a Seznam Mapy také používají nativní kód, protože u nich ten nepříjemný pocit při používání nemám.
http://www.android-x86.org/download
da se PC pouzivat s timhle jako androidi tablet? t.j. funguje BT a WiFi a jdou tam instalovat aplikace z google shopu?
Čest práci.
Používám android-x86 4.0RC2 na svém Netbooku Asus Eee PC T91 s Atom Z520 a musím říct, že wifi funguje skvěle, webkamerka také funguje, ale trhá se, což je nejspíš způsobeno tím, že ta grafika GMA500 co v tom Netbooku je, má špatnou podporu (nefunguje 3D a suspend to ram a kdo ví co ještě). Takže proto na mém netbooku je nízké rozlišení a všechny efekty nejsou úplně plynulé.
Jinak dotyková obrazovka funguje výborně i když neumí multitouch a musím zoomování řešit aplikací Assistive Zoom, což simuluje dva dotyky (roztažení prstů nebo stažení prstu k sobě) pomocí tažením prstu po obrazovce. Co se týče funkčních kláves, tak tam mi funguje zeslabování a zesilování (i s indikátorem v androidu) a pouze HW jas obrazovky.
Co se týče aplikací. Aplikace se dají nainstalovat klasicky z Google Play. V tom problém není, je spíš problém v tom, že některé padají. Nevím z jakého důvodu, může to být v mém případě nízské rozlišení, nebo nefunkční 3D podpora ovladače.
Zkuste to ve virtuálu a uvidíte sám :)