2011-09-06 132 views
6

我正在开发使用OpenMRS作为Android后端的医疗记录系统。 OpenMRS依赖于一些严重的重量级库,包括Hibernate和Spring。将java服务器移植到Android

“德兴”整个OpenMRS应用程序生成的文件,甚至为Android classes.dex文件格式太大(这个大小限制已经充分证明)。为了解决这个问题,我目前正在从依赖关系创建多个dex文件,并在运行时使用Android的dex类加载器加载它们。

由于服务器的移动版本将在实践中使用的方式,实际处理需求将是不顾巨大的依赖性非常低。我不想在我的手机上运行企业服务器。

之前我花了两周多的时间我想这个工程,我只是想问问开发者社区:是该战略只是一个白日梦?如果我加载了所有这些库,那么整个二进制文件会被加载到RAM中,只是破坏系统?有没有一种优化这种应用程序的好方法?我在这里错过了一些明显的问题或解决方案吗?

+3

乍看之下,我会说有Hibernate和Spring运行在Android上的梦想是不现实的。为所有这些依赖项提供足够的内存的简单问题不会让你死在你的轨道上。 – Prime

+1

你已经看到http://android-developers.blogspot.com/2011/07/custom-class-loading-in-dalvik.html?这里最困难的部分似乎是,各种dex文件不能在没有附加代码或预处理的情况下相互调用。 (假设有足够的内存来完成你所需要的功能)。 –

+4

这绝对是“客户/服务器”的呼声。这个应用程序的一个重要问题将是保证隐私(HPIAA法规等) – paulsm4

回答

1

简短的回答是:不。

长的答复是,大多数设备仍然只分配相对少量的存储器的每个堆(40-128兆的RAM之间)。您真的需要考虑构建应用程序,因此大部分逻辑以及库和重量级代码仍驻留在服务器上,移动应用程序仅从服务器读取轻量级数据(JSON?)以显示。设备应该只使用位置数据等原生项目,并为用户提供一个与其他Android世界一致的界面。除此之外,您应该寻找方法尽可能多地保留原生应用程序的逻辑。如果没有其他原因,而不是保持它更安全。反向工程的Android应用程序是琐碎而你越留在服务器端,你会越安全。

+0

感谢马特,在跟进评论后,我得出了类似的结论。看起来我将不得不对原始来源进行更多的重新编码,这比我想象的要多。实际上记录了它在我自己的计算机上使用的RAM后,我意识到任何小于1GB的内容都无法工作!但不幸的是,我们的目标是最终让整个服务器在平板电脑上运行,因为我们将它发送到无法访问互联网的贫困地区。我想这将需要一些真正的工程。叹。 – Nick