We just need the app makers to catch up. Foursquare, for instance, has been redesigned and looks great. However, their widgets haven't been touched and look awful by comparison. Spotify has done a far better job of updating everything at once.
We just need the app makers to catch up. Foursquare, for instance, has been redesigned and looks great. However, their widgets haven't been touched and look awful by comparison. Spotify has done a far better job of updating everything at once.
Android generally monetizes/converts worse than iOS, so those who want a presence on Android can't afford to take advantage of any of the new stuff until old devices are retired sufficiently to make the tradeoff really worth it. It's been really tough to see all of the improvements, because Google is addressing user upgrades so poorly (even though the fault lies mostly with the manufacturers) that the upgrade problem is such a big deal for developers.
http://developer.android.com/tools/extras/support-library.ht...
So older Android versions can use modern apps. Both the examples I gave (Foursquare, Spotify) work with both newer and older versions.
If anything, I think the existence of the compatibility library and ABS show that Google is dropping the ball a bit on the core Android framework. Why even have these be extra (and in one case 3rd party) libraries? Where possible why not just write the core SDK in a way such that it can fall back to 1.6 or 2.2 without having to worry about fiddling with compatibility libraries?
Example 1: Fragments.
Introduced with Honeycomb. Android supports these via the "support" library back to 1.6, but the APIs you're using are slightly different (eg. getFragmentManager() vs getSupportFragmentManager()) and the classes you use live in different packages (eg. android.app.Fragment vs android.support.v4.app.Fragment). If the support library were more tightly integrated with the mainline SDK, you wouldn't have to worry about all these splits, but it isn't so you do. You have to decide up front if you want to code to the mainline SDK classes or the support versions and then this gets worse when you implement other classes which use Fragments in a library meant for other developers -- should your classes assume those developer's Fragments derive from android.support.v4.app.Fragment or android.app.Fragment? It gets really messy really fast.
Example 2: ActionBar
Not even supported via the regular support library, you have to go get ActionBarSherlock which itself extends the Android support library. Kudos to Jake Wharton on this great library, but why didn't Google just make their ActionBar backward compatible to earlier versions out of the gate? It is clearly possible to do this as ABS does it.
I'm sure there is some specific reason the Android devs could give for why the support lib and the main SDK are so increasingly fragmented and it may have a very good legacy reason for existing, but having them work this way is harmful in the long run, IMO. Maintaining this split makes things much harder for devs just trying to get into Android who are very confused by all the different decisions they have to make just to get basic app functionality working across a decent cross-section of Android devices.
Granted, I'm not saying any of this makes Android development impossible or akin to rocket science, but it does make it needlessly complex which is bad given that Android is already seen as a bit of a red-headed-stepchild to iOS development even despite the overall marketshare advantage Android has.