24

我对以下功能感兴趣:

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

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

4

6 回答 6

15

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

来自本机活动示例:

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

于 2010-12-16T17:06:33.460 回答
8

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

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

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

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

于 2010-02-20T06:25:21.930 回答
2

使用 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 知识就不必实现一行代码……”

不能保证这位博主的真实性,但是,从我所读到的,看来你可以做到这一点

于 2011-01-21T14:40:52.070 回答
1

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

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

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

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

于 2010-02-20T06:27:55.567 回答
1

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

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

于 2010-02-20T06:56:24.643 回答
0

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),所以这样做并不是一个真正的选择。

于 2010-02-20T06:09:16.377 回答