【问题标题】:Can I make a rather native C++ app with Android?我可以用 Android 制作一个相当原生的 C++ 应用程序吗?
【发布时间】:2010-02-20 06:02:33
【问题描述】:

我对以下功能感兴趣:

  1. 为 Android Market 编写一个完全用 C++ 编写的应用程序(实际上是现有产品的一个端口)。
  2. 使用快速屏幕缓冲区像素推送(或者为此使用 OpenGL ES)。
  3. 获取用户输入并将其定向到 C++ 代码。

为 Market 编写这样的应用是否合法?市场政策对这些事情是否严格?

【问题讨论】:

    标签: c++ android opengl-es pixels


    【解决方案1】:

    从带有 Android 2.3 (Gingerbread) 的 NDK r5 开始,这是可能的,尽管我假设只有支持原生应用的设备必须安装 Gingerbread。

    来自本机活动示例:

    Android SDK 提供了一个帮助类 NativeActivity,它允许您编写一个完整的 本机活动。使用原生活动,可以编写完全原生的应用程序。 NativeActivity 处理 Android 框架和你的 本机代码,因此您不必继承它或调用它的方法。您需要做的就是声明 您的应用程序在您的 AndroidManifest.xml 文件中成为本机并开始创建您的本机 应用。

    【讨论】:

    • 举个例子。眼见为实:)
    • @Deo Checkout samples/native-activity/ 在 NDK 中。
    【解决方案2】:

    这确实不是我的菜,但是如果您想用 C 编写程序,可以使用称为 Android NDK(本机开发工具包)的东西。但不确定 C++ 编译器的支持如何。

    据我所知,您的应用几乎可以 100% 使用本机代码,但请记住,如果采用这种方式,您可能很难支持 Android 硬件中的不同 CPU。如果您需要引导本机代码以使其从 java 启动,这对您来说可能不是什么大问题。

    我在谷歌搜索“Android NDK”时发现了一些不同的教程。 This one is a very minimalistic Hello World。显然,您需要的不仅仅是一个将字符串返回给 java 的库,但这是一个很好的开始,您可能必须完成所描述的所有事情。使用 NDK 和 Android 作为关键字进行搜索,您会得到一个很好的选择。我认为没有理由在此处列出它们,因为此类列表往往会在一年左右的时间内过时和损坏。

    我猜来自 Google 的官方 Android Developer site 将保持不变并在平台的新版本上进行更新,它有一个指向当前 NDK 的链接。

    【讨论】:

    • 如果我不得不猜测,那是因为您建议使用 Gooling 获取字符串,而不是提供项目的直接链接。有时人们想要挑剔。不过,为您提供的链接+1。这是设置开发环境的相当彻底的演练,而不仅仅是一小段代码。
    • 除非该链接不适用于 NDK AFAICT。它用于编写控制台应用程序,使用作为 Android 开源项目一部分的交叉编译器。页面上甚至没有出现“NDK”一词,而且帖子是在 NDK 发布之前写的。
    • @CommonsWare:好吧,我错误地称它为“使用 NDK 的你好世界”,它更多地是作为用 C 编写的示例。
    • @Conspicuous Compiler:好的,我明白了。我的目的是帮助他用一个关键字开始搜索,不仅是为了找到 NDK 文档,还为了找到教程和其他人写的东西。我的印象是 OP 不知道 NDK 作为一个术语。我希望没有人认为这是一个 lmgtfy 答案。
    • 嘿,既然您已经更改了链接,我的第一条评论似乎很荒谬。进步!
    【解决方案3】:

    使用 Gingerbread (Android 2.3),您似乎可以用 C++ 构建整个应用程序。

    cf: http://phandroid.com/2011/01/11/android-developers-blog-awesome-ndk-leads-to-awesome-apps/

    " 在最新版本的 NDK r5 中,为了配合 Gingerbread 的发布,进行了许多重大改进。最重要的是能够完全用 C++ 为 Android 2.3 编写本机应用程序。这意味着即使是没有 Java 知识的程序员和开发人员也不必实现一行代码……”

    无法保证这位博主的真实性,但是,根据我的阅读,您似乎可以做到这一点

    【讨论】:

      【解决方案4】:

      没有 100% 原生解决方案,但我认为您正在寻找的是 Android NDK(原生开发工具包)

      来自他们的网站“请注意,NDK 不允许您开发纯原生应用程序。Android 的主要运行时仍然是 Dalvik 虚拟机。”

      我相信它可以让您从 Android 应用程序调用自己的本机代码

      我个人从未将它用于我的游戏,但我相信它会在很多事情上有所帮助(比如能够管理我自己的内存并且不会对垃圾收集器造成“滞后”)

      【讨论】:

        【解决方案5】:

        此线程中的对话可以帮助您。 http://groups.google.com/group/android-ndk/browse_thread/thread/50362904ae0574cf

        本质是, 可以制作仅限本机的应用程序,Android Market 也不限制您。 但由于对原生开发的支持有限,很有可能会使用一些可能会在未来版本中中断的非标准功能。

        【讨论】:

          【解决方案6】:

          http://developer.android.com/guide/basics/what-is-android.html

          “Android SDK 提供了开始使用 Java 编程语言在 Android 平台上开发应用程序所需的工具和 API。”

          http://arstechnica.com/open-source/news/2009/06/android-goes-beyond-java-gains-native-cc-dev-kit.ars

          一般来说,你不会。通过 JNI 对 C++ 的支持有限,但它主要是为了补充 Java 代码,而不是取代它。 C++ 没有框架/API 支持 (AFAIK),所以这样做并不是一个真正的选择。

          【讨论】:

          • 我相信 OpenGL API 至少直接暴露在 NDK 级别,例如对于全屏游戏,完全原生绝对是一种选择(并且可能是推荐的)。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-04-29
          • 1970-01-01
          • 2017-01-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多