Android optimizations - worst offenders?

I've ported my Win/Mac project to Android, and to my delight, it runs pretty much 'as-is' but it's got a terrible frame rate.

I was wondering if anyone knows which are the most important optimizations, in which order I'll get more bang for the byte, so to speak?

I've already reduced the poly count quite a lot.

I have a few textures, I try to keep them below 512x512, but is that too big? How much is too much?

I have some shaders running, specifically using Bumped Diffuse, Bumped Specular, and Reflective/Bumped Diffuse. Do these run in HW or are they emulated?

I have some scripts, they're pretty low-powered stuff. I do use the WWW object every 5 seconds to update elements in the scene, is there danger in that?

Any tips appreciated.

My guess is running through the iPhone script optimisation guide (it's in the manual) will be well worth it. Also, which phone are you running it on? There's a lot of hardware variaiton on the android platform.

When I ran my iPhone game, which has some non-trivial scripting in it, through the Unity 3 profiler, I was shocked. More than 70% of the time was spent doing GUI operations of one form or another.

If you are using UnityGUI calls or even GUITextures, you may want to look into rewriting your UI to use textures that all operate off a single material. This can reduce the drawcalls needed to 1. A product like EZGUI or the GUIManager script can help with this, though I personally have not tried either one yet.

(This is one of the topics mentioned in the optimization guide that JTBently mentions in his answer. Don't underestimate it.)

I should also mention that 5% of the time was spent in an OnGUI call that I didn't need and thought I'd removed from the scene long ago. So nothing beats putting your game through a profiler. If you are not planning to move to Unity 3 w/iPhone, you could port a version of your game from Unity 1.7 iPhone to Unity 2.6 Pro, and profile it there.