Como se mencionó en otra parte, el problema principal es que Android está diseñado como un sistema operativo portátil para ejecutarse en una amplia variedad de hardware. También se basa en un marco y un lenguaje familiares para muchos desarrolladores móviles existentes.
Finalmente, diría que es una apuesta contra el futuro: cualquier problema de rendimiento que exista se volverá irrelevante a medida que el hardware mejore, igualmente al hacer que los desarrolladores codifiquen contra una abstracción, Google puede arrancar y cambiar el sistema operativo subyacente mucho más fácilmente, que si los desarrolladores estaban codificando para las API POSIX / Unix.
Para la mayoría de las aplicaciones, la sobrecarga de usar un lenguaje basado en VM sobre el nativo no es significativa (el cuello de botella para las aplicaciones que consumen servicios web, como Twitter, es principalmente de redes). Palm WebOS también lo demuestra, y utiliza JavaScript en lugar de Java como lenguaje principal.
Dado que casi todas las máquinas virtuales JIT se compilan en código nativo, la velocidad del código sin procesar suele ser comparable con la velocidad nativa. Una gran cantidad de retrasos atribuidos a lenguajes de nivel superior tienen menos que ver con la sobrecarga de la VM que con otros factores (un tiempo de ejecución de objeto complejo, comprobación de 'seguridad' del acceso a la memoria mediante comprobación de límites, etc.).
También recuerde que, independientemente del lenguaje utilizado para escribir una aplicación, gran parte del trabajo real se realiza en API de nivel inferior. El lenguaje de nivel superior a menudo es simplemente encadenar llamadas a la API.
Existen, por supuesto, muchas excepciones a esta regla: juegos, aplicaciones de audio y gráficos que superan los límites del hardware del teléfono. Incluso en iOS, los desarrolladores a menudo recurren a C / C ++ para obtener velocidad en estas áreas.