【发布时间】:2010-02-20 06:02:33
【问题描述】:
我对以下功能感兴趣:
- 为 Android Market 编写一个完全用 C++ 编写的应用程序(实际上是现有产品的一个端口)。
- 使用快速屏幕缓冲区像素推送(或者为此使用 OpenGL ES)。
- 获取用户输入并将其定向到 C++ 代码。
为 Market 编写这样的应用是否合法?市场政策对这些事情是否严格?
【问题讨论】:
标签: c++ android opengl-es pixels
我对以下功能感兴趣:
为 Market 编写这样的应用是否合法?市场政策对这些事情是否严格?
【问题讨论】:
标签: c++ android opengl-es pixels
从带有 Android 2.3 (Gingerbread) 的 NDK r5 开始,这是可能的,尽管我假设只有支持原生应用的设备必须安装 Gingerbread。
来自本机活动示例:
Android SDK 提供了一个帮助类 NativeActivity,它允许您编写一个完整的 本机活动。使用原生活动,可以编写完全原生的应用程序。 NativeActivity 处理 Android 框架和你的 本机代码,因此您不必继承它或调用它的方法。您需要做的就是声明 您的应用程序在您的 AndroidManifest.xml 文件中成为本机并开始创建您的本机 应用。
【讨论】:
这确实不是我的菜,但是如果您想用 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 的链接。
【讨论】:
使用 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 知识的程序员和开发人员也不必实现一行代码……”
无法保证这位博主的真实性,但是,根据我的阅读,您似乎可以做到这一点
【讨论】:
没有 100% 原生解决方案,但我认为您正在寻找的是 Android NDK(原生开发工具包)
来自他们的网站“请注意,NDK 不允许您开发纯原生应用程序。Android 的主要运行时仍然是 Dalvik 虚拟机。”
我相信它可以让您从 Android 应用程序调用自己的本机代码
我个人从未将它用于我的游戏,但我相信它会在很多事情上有所帮助(比如能够管理我自己的内存并且不会对垃圾收集器造成“滞后”)
【讨论】:
此线程中的对话可以帮助您。 http://groups.google.com/group/android-ndk/browse_thread/thread/50362904ae0574cf
本质是, 可以制作仅限本机的应用程序,Android Market 也不限制您。 但由于对原生开发的支持有限,很有可能会使用一些可能会在未来版本中中断的非标准功能。
【讨论】:
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),所以这样做并不是一个真正的选择。
【讨论】: