在 Android 和“其他平台”之间生成可移植应用程序的推荐方法

2023-11-27

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

UI 不太可能以任何方式便携(良好的触摸功能 4 英寸屏幕 UI 与鼠标和键盘 19 英寸屏幕 UI 之间的差异太大),所以我很高兴重新实现这一点分别地。

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

我的问题有两个:

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

只要提供一些理由,包含“哈哈哈哈,你注定失败”的答案就可以。

(P.S. 如果这个社区 wiki 仍然可用的话,我会制作这个社区 wiki;对我来说,这似乎是一个完美的 CW 问题——Android 可移植性技巧和工具的列表)


看起来您已经通过将 UI 和业务逻辑/模型分开来确定关键点。 而且 sqlite 本身不仅在 Android 中使用。当然,您与之交互的方式(例如 SQLDBOpenHelper)又有所不同。

因此,我认为将业务逻辑和模型尽可能分开是可行的方法。 然后,您可以在它周围放置一个包装器(例如,与特定数据库对话的“数据访问对象”模式)。

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

当您想要使用多平台时,您可能还会考虑 Appcelerator 或 Adob​​e AIR 之类的东西

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Android 和“其他平台”之间生成可移植应用程序的推荐方法 的相关文章

随机推荐

  • 避免在 scikit learn StandardScaler 中缩放二进制列

    我正在 sci kit learn 中构建线性回归模型 并将输入缩放为 sci kit learn Pipeline 中的预处理步骤 有什么方法可以避免缩放二进制列吗 发生的情况是这些列与其他列一起缩放 导致值以 0 为中心 而不是 0 或
  • 使用 CSS 更改链接文本

    我想用 CSS 更改我的链接文本 但它不起作用 a testclass display none a testclass after content new text a class testclass href someurl com C
  • 在 Haskell 中使用填充进行压缩

    有几次我发现自己想要一个zip在 Haskell 中 它会向较短的列表添加填充 而不是截断较长的列表 这很容易写 Monoid在这里对我有用 但您也可以只传递要用于填充的元素 zipPad Monoid a Monoid b gt a gt
  • 屏幕密度为 440 dpi 的设备与 Google Play 上发布的应用不兼容

    添加后
  • 工作流/管道插件中的访问阶段结果

    我有一个具有不同阶段的管道 我希望当前的作业检查上一个构建已经经过了多少阶段并将其记录在控制台中 考虑这是我当前的管道 node stage 1 do something stage 2 do something else 我想要一个很棒的
  • 如何在 MySQL 上进行 SQL 区分大小写的字符串比较?

    我有一个函数返回五个大小写混合的字符 如果我对此字符串进行查询 无论大小写 它都会返回值 如何使 MySQL 字符串查询区分大小写 使用它来进行区分大小写的查询 SELECT FROM table WHERE BINARY column v
  • 使用 LINQ 获取每第 n 行

    我们的 SQL 数据库中有一个表 其中包含我需要用来创建图表的历史原始数据 我们通过实体框架和 LINQ 访问数据库 对于较小的日期时间间隔 我可以简单地读取数据并生成图表 var mydata entity DataLogSet Wher
  • Oracle用rownum查看性能

    我正在使用 Oracle 10g 并且有一个连接两个大表 数百万条记录 的视图 我试图为用户选择有限的数据 样本 如下所示 select from VIEW NAME where ROWNUM lt 5 它非常慢 我认为不应该 因为我只需要
  • 添加许多约束时 PuLP 非常慢

    我正在尝试使用 PuLP 但它需要50秒添加 4000 个约束 包含 67 个变量 解决问题只需要几分之一秒的时间 我们希望使用 PuLP 轻松测试大量问题的多个求解器 PuLP 应该花这么长时间吗 直接使用 PyGLPK 只需要几分之一秒
  • 在Java中解析Java的最佳方法

    正如标题所说 我想用Java解析一些Java源代码 我很确定还有其他 java 库已经执行此操作 但我找不到任何库 Antlr 有一个 Java 语法文件 看this
  • XPath:通过*纯*文本查找 HTML 元素

    请注意 这个问题的更精致的版本 可以找到适当的答案here 我想使用 Selenium Python 绑定来查找网页上具有给定文本的元素 例如 假设我有以下 HTML
  • 软件测试工具 - 用于java [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 有人能给我列出 5 个在
  • ASP.NET MVC - 在 RegisterGlobalFilters() 中使用 ActionFilterAttribute 时 Response.Filter 为 null

    我想在我的网站上使用 G ZIP 我用 google 搜索了以下代码 public class CompressAttribute ActionFilterAttribute public override void OnActionExe
  • 如何终止 setTimeout() 函数

    我通过我的应用程序使用 setTimeout 函数 但是当需要进行垃圾收集时 该方法仍然运行并调用函数 如何阻止它调用某个函数 我尝试将其设置为 null 但不起作用 设置超时时间返回对超时的引用 然后您可以在调用时使用它清除超时 var
  • 为什么不能从不同的线程更新 ObservableCollection?

    在多线程 WPF 应用程序中 它是不可能更新一个ObservableCollection来自 WPF 窗口线程以外的线程 I know 有解决方法 所以我的问题不是如何避免 这种类型的 CollectionView 不支持从与 Dispat
  • 三星 Galaxy Note 上 getExternalStoragePublicDirectory 的路径

    在我的应用程序中 我正在创建存储在设备下载目录中的文件 我的所有用户都对这种机制感到满意 除了使用三星 Galaxy Note 的用户 如果没有这样的设备 调试起来有点困难 在我的代码中 我正在使用 File newFile new Fil
  • 请求的资源上不存在“Access-Control-Allow-Origin”标头 - AngularJS

    XMLHttpRequest cannot load http mywebservice No Access Control Allow Origin header is present on the requested resource
  • Google Analytics cookie 与静态内容的子域

    我在 www example com 上有一个网站并使用 Google Analytics 我还设置了 static example com 来提供所有静态内容 问题是 GA 的默认行为是在 example com 上发布 cookie 但
  • 铃声首选项默认值

    我的首选项屏幕有此代码
  • 在 Android 和“其他平台”之间生成可移植应用程序的推荐方法

    我正在为 Android 开发一个应用程序 我认为它的功能可能在其他 运行 Java 的 平台上有用 例如常规桌面应用程序 尽管我希望所涉及的其他平台对于手头的问题 UI 不太可能以任何方式便携 良好的触摸功能 4 英寸屏幕 UI 与鼠标和