Thursday, February 7, 2013

Why Your Android App Won't Port to Blackberry 10

I've read quite a few articles recently about how simple it will be to port Android applications to BlackBerry 10.  It's been hailed as the cure for the meager app offering BlackBerry will have on its new platform.  Naturally, I investigated this as a such a simple port could open up a new platform for many of my apps I've already written.  However, I soon discovered the list of unsupported APIs, and my whole plan was crushed.  Even if your app can still function, chances are it's feature set will be severely limited by these restrictions if it does anything interesting. Here's some of the biggest sticking points:

Potential Deal Breakers


These are some of the limitations that would likely make your app fundamentally useless.

  • Services cannot run in the background.  Once your app leaves the foreground, all background services are killed.  Your app cannot play music, download data, schedule alarms, monitor location, or any of the multitude of reasons you might require performing work in the background.
  • There is NO support for Bluetooth.  None.  If you're app requires Bluetooth, give up now.  If you have a feature that requires Bluetooth, you need to find a way to disable it.  Same goes for NFC, but that's likely less of an issue for most developers.
  • Intent filters for ACTION_SEND and ACTION_VIEW from outside your app are disabled.  If your application allows users to view or share images, text, files, URLs or any other data from other applications, your users will have to open your app first, and you'll have to provide a mechanism for them to import if from inside your application.
  • The NDK is not supported.  Game-over for many OpenGL apps that used C++.  However, there is a native SDK for BlackBerry 10 so porting an Android application may not have been the best option anyway.  There are however many other applications of the NDK that go beyond games that will not be able to port.
  • No live wallpapers, widgets, home screens, lock screens.

Alternative Implementations


If you made it through the first list, congrats!  Chances are you'll be capable of porting your application.  However, there's a significant chance you'll have to rewrite substantial parts of your applications.  Most of these are related to the absence of Google Play Services.
  • Notifications will be limited to one line of text.  If you've built fancy, interactive notifications, they'll need to be reduced down to the bare minimum.  This will likely eliminate some functionality and cause maintenance headaches.
  • BlackBerry will use a different push notification service than with Google.  Not only will this require a different implementation in your app, but it'll require server-side support as well.
  • In-app purchases will go through BlackBerry App World so you'll have create an alternative implementation for interacting with it.
  • If your application uses Maps, you'll have to use an alternative web-based Google Maps API for displaying them.  In addition to having to redo your work, it appears to be a more limited API with a poorer user experience.
  • Google account authentication through Google Play Services will not be available, so you'll have to create an alternative route to obtain oAuth tokens.

Other Sources of Frustration

  • Since Google Play services will not be available on the device, you won't be able to use the Android Backup services.  If you need to remotely persist user preferences, there's currently no substitute so you'll have to create your own service.
  • In app +1 buttons will not be available.
  • Support for all the accessibility APIs is missing so any improvements you've made for the deaf or blind will be unavailable.
  • Your application cannot add or modify the user's contacts so any improvements will be limited to use inside your app.
  • You cannot set Thread priority.  Your background task that sends Analytics is going to have the same priority as the UI thread.
There's dozens of other unsupported APIs and features, but these are likely the most difficult hurdles to get across.  Furthermore, I noticed in the documents there seems to be a gap sometimes between what's stated as being supported and unsupported.  The permissions list stood out the most here.  It may be possible that there are more undocumented cases you'll come across so I'd be glad to here any feedback from any developers that discover more.

1 comment:

  1. Your this blog is very informative and interesting. Keep doing this type of great work.
    access Bee MP3 in UK

    ReplyDelete