Android emulator:
http://developer.android.com/guide/developing/tools/emulator.htmlAs for Androids having difference specs, I don't see that as a big problem.
Screen size / orientation is simple.
Just code your elements to be relative to an anchor (top, top-left, bottom-right, top-center), plus perhaps a pixel offset.
So, no matter what size screen or orientation, you score is always bottom-right, for example.
You just need a 'ConvertAnchorToScreenCoordinates()' function.
Same as game content. A tile map would be easy, just pre-calculate the number of tiles down and across, etc.
But I see the problem with various input methods: keyboard, single touch, multi-touch, etc.
You would have to create a custom library to account for it all.
Use this in your game initialization:
IF Device.HasKeyboard()
Input.EventAdd_Keyboard("Fire", kAscii_Space)
//ELSEIF Device.IsMultitouch()
ELSEIF Device.IsTouch()
Input.EventAdd_TouchPoint("Fire", 100, 200)
ELSE
Input.EventAdd_HWButton("Fire", kHardwareButton_3)
ENDIF
This code (ha, I just made that all up, sure to have logic/bug problems) will setup a 'Fire' event that could be called anywhere in your game logic and would work for any device, iPhone, Computer, etc, such as:
IF Input.IsEvent("Fire") THEN . . .
It would be better (faster) to use constants instead of strings for event names, instead of "Fire", use kEvent_Fire, but you get the idea.
The 'Input.IsEvent' code would then handle the device specific checking as initialized earlier.
This keeps your game logic clean and device independent.
But since I've never done this, I'm sure there may be hurdles I can't predict yet.
I'm starting this soon for my own project, using compiler directives.
... If iPhone then rotate means tilting, else rotate means analog stick movement, etc.
(Input.AxisAdd_Tilt("Rotate", "XAxis"), or Input.AxisAdd_Joystick("Analog2.XAxis") maybe)
view_x = Input.GetAxis("Rotate") (or something)
So testing on the PC versus the iPhone won't require any extra thought/changes.
[Edit]
This could also allow for more than one input method on the SAME device. Add a touch point AND keyboard key to both trigger a 'Fire' event.