The problem is (from an app developer standpoint) is that there are too many variables in the android world to code an app once to run successfully across the ecosystem.
Yet strangely many people are successfully doing this.
You have to design a version for on-screen keyboards (because it'll use part of the screen real estate) separately from a version that uses a hardware keyboard. They don't need to be separate apps, but you need to design (visually at least) for both scenarios, or you end up locking out a good portion of the people who use android devices.
Completely wrong. Where are you getting this from?
Sure, there are 100,000+ android devices out there
Over 100,000 Android devices activated per day.
so in order to sell your app on all 100,000 of those phones you've got to tweak your app for each device
No you don't. You have no idea what you're talking about. And you're at Score:4 right now, which is shameful.
One way to call the Camera API
Ugh. You shouldn't have posted because almost everything you have said is just completely wrong.
The Android developer platform is extraordinarily universal. There's a density independent pixel format (which is how an app looks almost the same on a 320x480 screen as it looks on a 480x800 screen), support for varying screen ratios, a single way to inter-operate with the camera and send emails and read the GPS signal and get orientation signals, or even do advance OpenGL graphics.
One app to rule them all.
There are of course differences and occasionally "quirks". If you make a rich graphics game it's going to run terribly on a G1. Flash is only available on some devices. And of course if you have to target a newer API, presumably because it has a feature that you can't live without, you limit your app to that version and above (just as if I use Transactional Filesystem calls my Windows app would be Vista or newer).