在Android和“其他平台”之间生成应用程序便携式的推荐方法

2022-09-03 15:26:57

我正在为Android开发一个应用程序,我认为它的功能可能在其他(运行Java的)平台上有用(比如一个普通的桌面应用程序 - 尽管我希望所涉及的其他平台对手头的问题无关紧要)。

UI不太可能以任何方式可移植(良好的触摸功能,4英寸屏幕UI和鼠标和键盘19英寸屏幕UI之间有太大的区别),所以我很高兴单独重新实现它。

但是,从理论上讲,核心的“业务逻辑”(呃,可怕的单词)和模型(数据存储)类可以在管理核心应用程序中重用。我注意到,我正在编写的类中没有很多最终不会引用一些特定于Android的位(我有XML资源文件,图像和SQLite数据库作为示例)。基本上,到目前为止,我写的所有东西都至少有一个与Android相关的导入。

我的问题是双重的:

  • 有哪些工具可以帮助我在非Android平台上使用与Android相关的类和功能(例如资源,数据库);和
  • 由于不可移植性,我应该完全避免使用Android平台的哪些类,功能等(为了简单起见,让我们排除与UI相关的项目),以及我应该使用什么来提高可移植性。

由“哈哈哈哈,你注定要失败”组成的答案是可以的,只要提供一些理由。

(附言如果它仍然可用,我会制作这个社区wiki;这对我来说似乎是一个完美的CW问题 - Android可移植性提示和工具的列表)


答案 1

看起来您已经通过保持UI和业务逻辑/模型分开来识别关键点。此外,sqlite本身不仅在Android中使用。但是,当然,您与它交互的方式(例如SQLDBOpenHelper)也有所不同。

因此,我想让业务逻辑和模型尽可能分开是要走的路。然后,您可以在其周围放置一个包装器(例如,与特定数据库通信的“数据访问对象”模式)。

请记住,当您在UI端尽可能特定于平台时,用户体验是最好的。示例:Android市场上有一个应用程序(Push & Ride),它似乎在J2ME模拟器中运行。所以屏幕输入不是使用设备的普通软(或硬)键盘,而是在数字键上带有“abc”“def”组合的模拟手机键盘,这使得数据输入有点奇怪。这个程序肯定是非常便携的(它的功能真的很棒),但它就是感觉不对。

当你想去多平台时,你可能还会看看Appcelerator或Adobe AIR这样的东西。


答案 2

我开始做类似的事情 - 我想为Android,Blackberry和J2ME编写一个应用程序。从概念上讲,您可以对设计进行分层,以便将特定于平台的组件(UI、网络访问、数据存储)与核心业务逻辑分开。

在实践中,我不认为这是令人满意的。我面临的问题都与Java的核心版本在不同的平台上有所不同有关(在黑莓中,它基于J2Se 1.4,而Android使用Java 6作为基础)。这导致了这样的烦恼

  • 无法重用使用泛型的代码
  • 我的首选类不能统一使用(例如,强制使用 overVectorList)

我已经在SO(这里这里)上就此展开了讨论,但无法得出结论。


推荐