【问题标题】:The impact of native code in Android/iPhone app development原生代码对 Android/iPhone 应用程序开发的影响
【发布时间】:2011-12-21 08:31:01
【问题描述】:

我想为 Android为 iOS 创建一个应用。

现在,我必须在我的应用程序中使用大量原生 C++ 代码。
所以我想知道:

  • 使用本机代码是否存在任何性能问题?
  • 是否可以使用本机代码完全控制(手机的)资源?
  • 在 Android 或 iOS 中使用本机代码是否有任何限制或缺点?
  • 您能否推荐在 Android/iOS 应用程序开发中大量使用本机代码?还是不鼓励?

【问题讨论】:

    标签: android iphone c++ ios native-code


    【解决方案1】:

    对本机 UI 控件和事件的完全访问权限通常涉及在 iOS 上使用 Objective C 和在 Android 上使用 Java for Dalvik。计算内核、模型对象内部、Open GL 渲染等都可以在 C/C++ 中完成。在 Mac OS X 和 iOS 上,Objective C++ 本机代码,因此运行速度与本机代码一样快(假设您的代码本身并不慢)。在 Android 上,通过 NDK 接口调用可能会有一点开销。

    iOS 安全沙盒不允许从现有操作系统设备上的任何应用完全访问对所有资源的控制。

    【讨论】:

    • c++ 作为本机代码是否可以在其他平台(Windows、Linux、Mac、Symbian)上正常工作?
    【解决方案2】:

    我没有任何 IOS 开发者。经验,所以我只想谈谈Android。

    Android NDK 用于使用本机代码。

    NDK 承诺对资源进行多个而非完全的控制。不建议纯粹使用本机代码来实现您的应用程序。 “一般来说,你应该只在对你的应用程序必不可少的情况下使用本机代码,而不仅仅是因为你更喜欢用 C/C++ 编程。” #When to Develop in Native Code 中的详细信息。

    【讨论】:

    • 我不想使用很多本机代码,因为我更喜欢用 C/C++ 编程,但我的应用程序已经用 C++ 构建,而且它很大,所以我想要大部分(不是所有)代码可以重复使用。
    • 足够合理。但作为原生代码,整个应用程序的共谋性会被提高。即使这样,您也必须以任何方式重写代码以适应 JNI,而且很难调试。
    【解决方案3】:

    您可以在 iOS 上使用 cc++ 代码以及 objective-c(如果是 c++ 您需要将源文件从 *.m 重命名为 *.mm)。但苹果不推荐它。不要担心android。

    编辑

    另外,我只记得:我的朋友在 android 的 c 中使用了thirdprty 库。所以,你也可以在那里使用它

    【讨论】:

    • 我听说apple do not recommend 但有什么问题?有详细的资料吗?
    • 这只是在文档中写的,我没有看到任何详细信息。但是一旦我使用了用 c/c++ 编写的第三方库并且工作正常。不知道这里有什么问题。另外,我只记得:我的朋友在 android 的 c 中使用了thirdprty 库。所以,你也可以在那里使用它
    • AFAIK Apple 不建议使用 Obj-C++ 作为您的全局基础语言,即将 Obj-C 与 C++ 混合在整个应用程序中,因为它会弄乱您的项目。当我编写我的库并将其集成到应用程序中时,我使用 .cpp 作为 lib 代码,使用 .c 作为接口 - 这很好用。
    • Objective C++ 作为基础语言很好。多年来,我一直在我的地图和导航产品中使用它。它运行良好,让我可以完全访问所有现代 C++。我的代码包含一个纯 C++ 的核心库,以及一个提供核心库包装器的 Objective C 接口;包装器使用 Objective C 类和方法,但其内部实现是在 Objective C++ 中。这为我的客户提供了适用于 Objective C 和 Swift 的完整 API。
    【解决方案4】:

    对于 iOS:使用 Objective-C++ 完全没问题——我的游戏代码是用 C++ 编写的,所以大部分 UI(与 C++ 模型对象对话)都是用 Objective-C++ 编写的。 C++ 和 Objective-C 一样原生,两者都可以被认为是编译成机器指令的 C 方言。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-18
      • 1970-01-01
      • 2010-11-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多