Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Recommended ways to produce app portable between Android and "other platforms"

I'm developing an application for Android, and I'm thinking that it's functionality might be useful on other (Java-running) platforms (say a regular desktop app -- although I hope that the other platform(s) involved are immaterial to the question at hand).

It's unlikely that the UI will be in any way portable (there's just too much of a difference between a good touch-capable, 4in screen UI, and a mouse-and-keyboard 19in screen UI), so I'm happy enough reimplementing that separately.

However, the core "business logic" (ugh, horrid word) and model (data storage) classes could, in theory, be reused in managing the core app. I've noticed that there aren't a lot of classes I'm writing that don't end up referencing some Android-specific bits (I've got XML resources files, images, and SQLite databases, as examples). Basically everything I've written so far has at least one Android-related import.

My question is twofold:

  • What tools are available out there to help me use Android-related classes and features (eg resources, databases) on non-Android platforms; and
  • What classes, features, etc of the Android platform should I completely avoid using (for the sake of simplicity, let's exclude UI-related items) due to non-portability, and what should I use instead to improve portability.

Answers that consist of "hahahaha, you're doomed" are OK, as long as there's some rationale provided.

(P.S. I'd make this community wiki if that was still available; this seems like a perfect CW question to me -- a list of Android portability tips and tools)

like image 794
womble Avatar asked Feb 12 '11 08:02

womble


People also ask

Which is a best mobile app when we need cross-platform compatibility?

React Native React Native is a popular cross-platform app development framework for both iOS and Android. React Native is undergoing constant improvement and is supported by a large community. React Native is based on React and doesn't involve the use of WebView and HTML technologies.


2 Answers

Looks like you have already identified the key point by keeping UI and biz logic / model separate. Also sqlite itself is used not only in Android. But of course the way you interact with it (e.g. SQLDBOpenHelper) is different again.

So I guess having the biz logic and model as separate as possible is the way to go. You can then put a wrapper around it (e.g. "Data Access Object " pattern which talks to the specific DB).

Still keep in mind that the users experience is best when you are as specific to a platform as possible on the UI side. Example: there is an App (Push & Ride) on the Android market, which seems to run in a J2ME emulator. So screen input does not use the normal soft (or hard) keyboard of the device, but a simulated phone keyboard with the "abc" "def" combos on the number keys, which makes data entry a bit strange. This app is for sure very portable (and its functionality is really great), but it just does not feel right.

When you want to go multi-platform, you may perhaps also look at things like Appcelerator or Adobe AIR

like image 85
Heiko Rupp Avatar answered Oct 05 '22 12:10

Heiko Rupp


I started off doing something similar - I wanted to write an app for Android, Blackberry and J2ME. Conceptually, you can layer your design such that platform-specific components (UI, network access, data storage) are separated from the core business logic.

In practice, I don't find this satisfactory. The issues I faced all related to the core version of Java being different in the different platforms (in Blackberry it is based on J2Se 1.4, while Android used Java 6 as base). This led to annoyances like

  • Not able to reuse code that uses generics
  • My preferred classes not being available uniformly (for example, forced to use Vector over List)

I have opened discussions regarding this on SO (here and here), but couldn't reach a conclusion.

like image 23
curioustechizen Avatar answered Oct 05 '22 13:10

curioustechizen