【问题标题】:Porting Visual C/C++ to Android将 Visual C/C++ 移植到 Android
【发布时间】:2012-08-15 13:48:01
【问题描述】:

在我最近开始的实习(我正在学习计算机科学)中,我必须将一个有点大的现有项目移植到 Android。它是一个 Visual C/C++ 项目,最终应该使用 NDK 在 Android 上运行。问题是我对移植软件一无所知,因为这不在我的研究中......

我有几天的时间来了解我将要参与的项目。

关于复杂性的几句话: 它是一个 Visual Studio 解决方案,由 28 个项目组成,其中大多数项目都很大......

现在我需要开发一个将其移植到 Android 的概念,这就是我写这篇文章的原因。我完全不知道从哪里开始,也不知道如何找到移植它的概念。我尝试在网上搜索一些东西或一些关于此的书籍,但我一无所获。

我当然知道,基本上我必须删除 Visual/Windows 特定的所有内容,并用适当的 Android/Linux 函数替换它,或者如果 Android 上没有相应的内容,则实施新的东西。

但是由于这个项目有点庞大,我不能只是尝试用正确的编译器编译它并处理错误消息,这将导致无处可去,我猜......

所以现在我的实际问题是: 有没有人对此或类似的事情有经验,并且可以提供一些提示如何开始?正如我所说,我首先需要一个概念。关于如何开始和处理移植这种规模的软件项目的更一般性的内容也非常受欢迎,因为我对此一无所知......

【问题讨论】:

  • 其他人假设.net。我假设不是。是.net吗?
  • 不,它不是 .net,它只是 c++,使用了很多视觉特定的东西和一些 Windows 特定的东西,比如句柄......
  • 哦,逻辑上(对于那种程序)它必须使用数据库,但我还没有在代码中看到它(因为写的项目非常庞大......),但我认为他们希望我在 portet 版本中使用 Android 的 SQLite 数据库...

标签: android visual-c++ android-ndk porting


【解决方案1】:

我认为您以错误的方式处理整个问题。有几种工具可让您将 C# 和可视化 C++ 以及其他可视化语言从其受人尊敬的 IDE 编译到 android 平台。例如有 mono for android 。 Mono 是一个 Visual Studio 插件,可帮助您使用 Visual Studio 和 .net 技术创建 android 项目。我认为您应该将研究重点放在这样的工具上,因为手动更改所有代码几乎是不可能的并且太耗时了。 Here 是一个页面,可帮助您开始使用 mono for android。祝你好运。

【讨论】:

  • 我怀疑这是一个体面的解决方案,你正在用 C/C++ 换取一个抽象框架,这会让你失去性能;这种框架适用于具有特定知识并希望制作小型应用程序或无需过多优化的应用程序的人。你的答案是 50%/50%
  • 我同意你的观点,但这一切都取决于可用的时间范围。如果您必须尽快部署项目,那么自动化解决方案更适合初学者。如果时间充裕,可以用原生 android 代码重写下一个版本。我们在公司也遇到过同样的问题,所以我们在第一个版本中使用了第三方 IDE,而下一个版本是用 java 从头开始​​重写的。
  • 感谢您的回答。这看起来很有趣,但我担心我实习的公司不想只为我购买新软件。但我会提议,因为他们刚刚开始进行安卓开发,他们可能需要一个好的解决方案......
  • 还有一个问题,因为您在谈论可用时间。从现在到实习结束,我有大约 20 周的时间,其中 20 周用于构思和实施。这绝对不是用java重写它的解决方案,但是最好手动重写Android中不支持的部分,或者这对使用mono之类的东西没有影响?哦,我想在为 Android 使用单声道时,有些部分需要重写?我猜Windows特定的东西也不适用于单声道?但是“正常”的视觉特定的东西是用单声道翻译的,还是我弄错了?
  • 我在阅读一些关于 mono for android 的内容时偶然发现的另一个问题是,mono 是否支持 Visual C++?他们总是谈论 Visual C#,但我没有找到关于将 Visual C++ 与 mono 用于 android 的示例/文章……抱歉,对于这么多 cmets,如果你对所有这些东西有一些答案,我会非常高兴…… :)
【解决方案2】:

看到这个答案Android NDK with Visual Studio。 我个人不使用它,但这似乎是解决您问题的好方法。 和你一样,过去我们不得不将一个大型的 Visual C++ 库项目移植到 Android 上,我们是这样进行的:

  1. 尝试编译主库接口(通过创建相关的Android.mk)
  2. 通过使用链接错误,您应该猜测要编译的其他项目并为它们创建 mks
  3. 循环直到不再出现链接错误。

【讨论】:

  • 感谢您的回答,这只是我想到的第一件事,但我想这个项目真的很大,并且还包含很多无法编译的视觉材料android,所以我想通过错误来解决这个问题将是某种永无止境的故事......
【解决方案3】:

你没有告诉项目的源代码大小(有多少几千行源代码)。

如果代码足够大(例如至少 100 个KLOC),您可以考虑自定义 GCC 编译器(假设是最近的 4.6 或 4.7 版本),也许使用 MELT(一种高级域特定语言扩展 GCC),或者在 C 中痛苦地编码一个 GCC 插件。这种 GCC 定制方法仅适用于大型代码库(您需要几天时间来掌握 GCC 内部知识)。

另一方面,许多设计良好的应用程序可能已将其操作系统功能打包在定义良好的接口和库中。您可能会考虑将您的应用程序移植到 Qt 或其他一些跨平台库。

我们需要有关您的项目的更多详细信息,以便为您提供更多帮助。

【讨论】:

  • 关于更多细节的事情是我有几天时间大致了解该项目,现在我应该发展一个将其移植到android的概念,所以我自己对细节不太了解的项目。但我认为定制 gcc 编译器是一种矫枉过正,因为这是我的实习工作,据我所知,他们对我能做到这一点非常乐观……如果我的概念正在形成,我可能会留下另一条评论确实了解有关该项目的更多信息
  • 你可以知道它是什么类型的应用程序,以及大概的源代码大小。
猜你喜欢
  • 2010-10-13
  • 1970-01-01
  • 2012-08-16
  • 2010-10-08
  • 2011-03-13
  • 1970-01-01
  • 1970-01-01
  • 2011-03-25
  • 1970-01-01
相关资源
最近更新 更多