Upgrade to Android 2.3.3

If you want to manually update your Android phone to 2.3.3, you might run into some “Bad signature” failure. I don’t know what exactly causes this error but I’m guessing that Android 2.3.3 requires that you have the latest updates on your Android device and if you don’t, you end up with the “Bad signature” failure with not much help. Thankfully, I came across the following link that helped me to upgrade my Android OS properly to get 2.3.3 upgrade working. Here it is:

http://ossadmin.wordpress.com/2011/02/26/goodbye-vodafone-uk-nexus-one-rom/

Trader Desktop in Flash, Java Swing, Android powered by LCDS

We’ve been working on some cool new features in my group, and one of those features is the Java client library. It basically allows Java and Android application to call remoting and messaging destinations in LiveCycle Data Services. What this means is that one can write a Java Swing application, or better, a native Android application to talk to Livecycle Data Services destinations. Here’s a short video that shows the Trader Desktop in LCDS samples app in Flash, Java Swing, and Android emulator.

http://www.vimeo.com/15631383

Cool, huh? If you’re coming to Adobe MAX in Los Angeles, and interested in learning more about the new cool LCDS features, Greg Wilson will have a session on multi-client support in LCDS next. I will also have a session on advanced messaging where I’ll demo some of the multi-client stuff.

LauncherPro is evil!

Don’t ever install LauncherPro on an Android device! If you’re one of those unlucky souls who installed it, you’ll eventually get a “LauncherPro has expired” error and your phone will be in an unusable state. That’s what happened to me. The software expired, and all I get is a browser window that directs me to launcherpro.com to install the new version. But, I don’t have WIFI connection, and I can’t get to WIFI settings to get on WIFI because the home button is locked by the software, I can’t make phone calls, read messages, or any other place on my phone other than the browser (which is useless without WIFI). I Googled and bunch of other people ran into this and there doesn’t seem to be a quick solution. Didn’t the software developer ever think that some people might not be on WIFI when the software expires? To save yourself the hassle, don’t ever consider using LauncherPro.

Android API and java.beans package #2

In one of my previous posts, I talked about how the Android API lacks support for java.beans package and I outlined some possible solutions to it. Turns out that Apache Harmony has java.beans package implemented under Apache license which means you can port and use these classes in Dalvik, as long as you have the license information in the source code. So, that’s the route I took and for those interested in where the code is it’s under /classlib/modules/beans/src/ of Apache Harmony source download.

SocketExceptions with Android

I’ve run into two SocketExceptions with Android today and wanted to post the solutions here to save time for others. First is the following permission error the app was trying to create a socket connection:

08-26 06:42:15.784: WARN/System.err(447): java.net.SocketException: Permission denied

Turns out that, in Android, applications don’t have access to the internet by default, you need to enable it as explained by some good folks here. The solution is to add this line in the root of the AndroidManifest.xml file of your application:


The second error was more tricky. It happened during socket creation again and the stacktrace was as follows:

08-26 08:00:03.838: WARN/System.err(421): java.net.SocketException: Bad address family

...
26 08:00:03.888: WARN/System.err(421):     at java.nio.channels.Selector.open(Selector.java:48)

This is due to Android emulator not supporting IPv6. I’m not sure if it’s just the Android emulator or if it’s a general bug with Android 2.2 (that apparently got fixed) but the details are provided by folks here and the temporary solution is to disable IPv6 before calling selector with this call:

System.setProperty("java.net.preferIPv6Addresses", "false");

Hope, this saves some time for someone else!