YEAY,
my first Android app hits 1000 downloads in the Android Market. „App Update Notifier“ has won the race for this milestone.
Followed by „Android Bash“ with ~900 downloads…
Thanks for using my apps! 😀
Gr33tz Goddchen
[ad]
YEAY,
my first Android app hits 1000 downloads in the Android Market. „App Update Notifier“ has won the race for this milestone.
Followed by „Android Bash“ with ~900 downloads…
Thanks for using my apps! 😀
Gr33tz Goddchen
[ad]
Hey everybody,
i just wanted to share my way of making Android apps backwards compatible with older Android versions.
In my case i have the „App Update Notifier“ app. Basically it checks your installed apps for available updates. Therefore it queries the Android Market (via Android Market API). To be able to do this one has to provide a valid google account login. On Android 2.x devices there is the AccountManager class that you can query for the phone’s account information and use this information. This way the user doesn’t have to provide his login details again for your app. He just needs to accept once that your app might use his login details. But this feature is not available on Android 1.x. So the user has to provide valid google login details in the settings of my app. Because of that there were two versions of „App Update Notifier“ in the Android Market at the beginning. „App Update Notifier (for 1.x)“ and „App Update Notifier (for 2.x)“.
But then i thought of a way to make both functionalities available in one app. So i had to think of a way to check whether AccountManager is available on the current device or not. So i came up with using Java Reflection. I wrote this simple function:
[sourcecode language=“java“]
public static boolean classAvailable(String name) {
try {
Class.forName(name);
return true;
} catch (ClassNotFoundException e) {
return false;
}
}
[/sourcecode]
[sourcecode language=“java“]
if (classAvailable(„android.accounts.AccountManager“)) {
addPreferencesFromResource(R.xml.settingsscreen_2x);
} else {
addPreferencesFromResource(R.xml.settingsscreen_1x);
}
[/sourcecode]
This way you can check if a class you want to use is available on the device. But now you have a problem. The compiled DEX file contains stuff that might not exist on the current device. Android will then throw a VerifyException when it’s loading the DEX file. Now you have two options: use Reflection only to call your stuff (which is ok when only have to call a single method or so) or you need to seperate the code for different Android versions. So you only have supported references in you invoked dex file. For example i have a class with the AccountManager implementation called Helper2x and a class with the old way called Helper1x. This way on an Android 1.x device, the Helper2x DEX file will never be loaded and therefore will not throw an exception.
Hey everybody,
„App Update Notifier“ is now available in the market. There are two versions. One is for Android 1.5 and 1.6 devices. You have to provide your username and password in the settings. The other one is for Android 2.0 and above. It makes use of the AccountManager, so u don’t have to provide any login information.
„App Update Notifier“ notifies you about updates for your installed apps. It has a background service for update notification as well as a GUI to check manually.
Go check it out. Just search the market for „Goddchen“ or „App Update Notifier“. Or have a look at the two appbrain links:
Gr33tz Goddchen