Also unter Mac OS hast du für's iPhone einen "Simulator" und keinen Emulator. Da die iOS-App dann mit den Ressourcen deines Rechners läuft und nichts emuliert werden muss. Da hat man dann das Problem, dass die App im Emulator bzw. Simulator schneller läuft als am Gerät selbst. Vorraussetzung ist allerdings ein Mac und Objectiv-C.
Vorteil dabei: Bei Mac OS gibt's keine Fragmentierung weswegen man schon davon ausgehen kann, dass die App auf den Geräten läuft für die du deine App kompiliert hast. (je nach iOS-Version halt.)
Bei Android schaut es schon anders aus. Da läuft dann ein Emulator der tatsächlich die ganze Hardware emulieren muss und dementsprechend langsam ist. Zudem hast du das oben angesprochene Problem, dass du dir durch die Android-Fragmentierung nie sicher kannst auf wie vielen Geräten deine App denn läuft.
Ich hab einmal in einem Podcast gehört, dass das Dev-Studio von Angrybird z.B. auf 30 Geräten getestet hat damit sie alle relevanten Geräteklassen abdecken.
Bei Android hast du dafür den Vorteil des gewohnten Java-Toolsets (Eclipse, Ant, etc.) Du kannst sogar externe Jars einbinden die oft auch funktionieren. (Oft allerdings auch nicht ... Dalvik Compiler != certified Java Compiler)
Dritte Möglichkeit sind dann HTML 5 Apps.
Vierte Möglichkeit sind Frameworks wie Phonegap die das ganze dann wieder in native Apps kompilieren.