Come accennato altrove, il problema principale è che Android è progettato come un sistema operativo portatile, per funzionare su un'ampia varietà di hardware. Si basa anche su un framework e un linguaggio familiare a molti sviluppatori mobili esistenti.
Infine, direi che è una scommessa contro il futuro - qualunque problema di prestazioni esista diventerà irrilevante man mano che l'hardware migliora - ugualmente inducendo gli sviluppatori a codificare contro un'astrazione, Google può estrarre e modificare il sistema operativo sottostante molto più facilmente, che se gli sviluppatori stavano codificando per le API POSIX / Unix.
Per la maggior parte delle applicazioni, il sovraccarico dell'utilizzo di un linguaggio basato su VM rispetto a quello nativo non è significativo (il collo di bottiglia per le app che utilizzano servizi Web, come Twitter, è principalmente di rete). Anche il Palm WebOS lo dimostra, e utilizza JavaScript anziché Java come linguaggio principale.
Dato che quasi tutte le VM JIT si compilano fino al codice nativo, la velocità del codice grezzo è spesso paragonabile alla velocità nativa. Molti ritardi attribuiti ai linguaggi di livello superiore hanno meno a che fare con il sovraccarico della VM rispetto ad altri fattori (un runtime di oggetti complesso, "sicurezza" che controlla l'accesso alla memoria eseguendo il controllo dei limiti, ecc.).
Ricorda inoltre che, indipendentemente dalla lingua utilizzata per scrivere un'applicazione, gran parte del lavoro effettivo viene svolto nelle API di livello inferiore. Il linguaggio di primo livello spesso è solo il concatenamento di chiamate API.
Ci sono, ovviamente, molte eccezioni a questa regola: giochi, app audio e grafiche che spingono i limiti dell'hardware del telefono. Anche su iOS, gli sviluppatori spesso scendono in C / C ++ per ottenere velocità in queste aree.