You definitely want to use different assets for different devices.
My approach, since my public is mainly on iOS, is to use 3 resolutions (works well with all Android devices I could test except a few low-res ones so far) :
- ipadhd : 2048x1536, for devices above 1280x800
- ipad : 1024x768 (50% of ipadhd), for devices above 640x470
- iphone : ~426x320 (42% of ipad), for the other devices
Design everything at the ipadhd size, then use a script to generate the other images (script is not perfect, you'll have to manually retouch some images, but it works in 99% of the cases). I chose to not worry about density so far, I found this approach good enough.
For tiles, you need to first export the source images in all resolutions, then generate the spriteframe for each resolution. Zwoptex allow to do that quite fast.
Notice something else : the ratio is 4/3 : there is no device more "square" than this. This means you only have to worry about scaling in width because first you do a global scale to fill the height, then you have a bit more width, depending on the screen ratio.
A good approach is to anchor your interface in a CCnode on the sides of your screen (top and bottom may need additional rescaling). Then you are left with the center of the screen for your game viewport, which shouldn't have much trouble with more/less size (you just show more of the game if you have more space).
Hope this helps.