用C或C ++编写Android应用程序?

我试图开发/移植一个游戏到Android,但它是在C,Android支持Java,但我相信必须有一种方法来获得一个C应用程序,任何人都知道这个主题的好教程?

谢谢!

对于任何人通过谷歌来到这里,请注意,从SDK 1.6开始Android现在有一个官方的原生SDK。

您可以从这里下载Android NDK(Native Development Kit): https : //developer.android.com/ndk/downloads/index.html

还有一篇关于NDK的博客文章:
http://android-developers.blogspot.com/2009/06/introducing-android-15-ndk-release-1.html

Android NDK是一个工具集,可让您使用C和C ++等语言在本机代码中实现部分应用程序。 对于某些types的应用程序,这可以帮助您重用以这些语言编写的代码库。

有关如何开始使用本机开发的更多信息,请点击此链接 。

示例应用程序可以在这里find。

通常情况下,你必须:

  1. 安装Google Android NDK。 它包含libs,头文件,makfile示例和gcc工具链
  2. 从您的ARM C代码构build一个可执行文件,如果需要,使用提供的库进行优化和链接
  3. 使用提供的adb接口连接到电话并testing您的可执行文件

如果您正在寻找销售应用程序:

  1. 从你的C代码构build一个库
  2. 创build简单的Java代码将使用这个库
  3. 将此库embedded到应用程序包文件中
  4. testing你的应用
  5. 出售或免费分发

Google已经发布了一个Native Development Kit(NDK)(根据http://www.youtube.com/watch?v=Z5whfaLH1-E在00:07:30)。;

希望这些信息会在谷歌组织页面( http://groups.google.com/group/android-ndk )上更新,因为它说它还没有发布。

我不确定在哪里得到一个简单的下载,但是我听说你可以从甜甜圈分支下的Google Git仓库获得一份NDK的副本。

官方的立场似乎是,这不是你想做的事情。 在Android开发者列表上看到这个线程 。 谷歌设想Android在各种不同的设备(CPU,显示器等)上运行。 因此,启用开发的最佳方式是使用针对Dalvik虚拟机的(便携式)托pipe代码。 出于这个原因,Android SDK不支持C / C ++。

但是,看看这个网页 :

Android包含一系列由Android系统的各种组件使用的C / C ++库。 这些function通过Android应用程序框架向开发者公开。

托pipe的应用程序框架似乎被分层放置在这些库之上。 该页面继续列出C / C ++库:标准C库,媒体,3D,SQL精简版和其他。

所以你所需要的只是一个编译链,将C / C ++编译到合适的CPU(在G1中是ARM)。 有关如何做到这一点的简要说明在这里 。

我不知道在哪里可以find这些库提供的API的描述。 我猜可能有头文件埋在SDK的某处,但文档可能是粗略/缺失。 但我认为这是可以做到的!

希望这是有用的。 为了logging,我没有写任何原生的android应用程序 – 只是一些简单的托pipe的应用程序。

安迪

您可以使用nestedvm将C(或其他GCC语言)翻译成Java字节码,并将其用作端口的基础。 例如,请参阅Simon Tathams便携式拼图收集的Android端口 。

我期望这种方法已经被NDK淘汰了,但是如果某些networking或者某些东西不允许人们升级他们的手机,那么这种方法可能就不存在了。

Google已经推出了Google I / O 2011:将Android和Android的C和C ++游戏引入到 http://www.youtube.com/watch?v=5yorhsSPFG4

这很好理解NDK在c和c ++中为android编写应用程序的用法。

如果你只是想交叉编译任何基于控制台的本地游戏,并在Android上运行它们,那么本文已经展示了3种方法。

1:使用独立工具链进行静态编译

2:使用Android NDK的工具链进行交叉编译

3:使用AOSP源代码进行交叉编译

也许你在找这个?

http://www.mosync.com/

这是一个使用c ++开发几个移动平台的中间层。

看着这似乎是可能的:

“事实上只有Java语言支持并不意味着你不能开发其他语言的应用程序,这已经被许多开发者,黑客和移动应用程序开发专家所证实。在Android平台上成功运行原生C ++应用程序,即使在这个时候,显示和声音仍然存在很多问题,包括S-Tris2游戏和Edgelib的3Danimation演示。

自2009年以来,在这个问题上有一个发展。
Necessitas – 用于Android的Qt(C ++框架)
入门video 。

看看谷歌ndk集团看起来很有希望,第一版的NDK将在2009年上半年。

更新:它被释放http://android-developers.blogspot.com/2009/06/introducing-android-15-ndk-release-1.html

我不确定NDK提供了官方Java API的全面覆盖。

http://developer.android.com/sdk/ndk/index.html#overview

请注意,NDK不支持您开发原生应用程序。 Android的主运行库仍然是Dalvik虚拟机。

Google刚刚发布了NDK,这正好可以。

http://feedproxy.google.com/~r/blogspot/hsDu/~3/2foWz7hwFtE/introducing-android-15-ndk-release-1.html

它可以在这里find: http : //developer.android.com/sdk/ndk/1.5_r1/index.html

你可以下载c4droid,然后安装GCC插件并安装到你的SD。 从shell我只是遍历到GCC二进制文件的目录,然后调用它来创build一个可执行文件。

find/ -name gcc

/mnt/sdcard/Android/data/com.n0n3m4.droidc/files/gcc/bin/arm-linux-androideabi-gcc

cat> test.c

#include<stdio.h> int main(){ printf("hello arm!\n"); return 0; } 

./arm-linux-androideabi-gcc test.c -o test

。/testing

你好arm!

这篇博文可能是一个很好的开始: http : //benno.id.au/blog/2007/11/13/android-native-apps不幸的是,很多重要的东西是“留给读者的一个练习”。

我不知道一个教程,而是一个很好的开发工具:Ideaworks实验室的Airplay SDK。 (最近更名为“ Marmelade ”)使用C / C ++,您可以为Windows Mobile,iPhone,Android构build应用程序。 我不喜欢的唯一组件是GUI编辑器 – 一个越野车,但你总是可以用记事本replace它。

原生C / C ++文件Ubuntu中的libstdc ++。*是x86(或x86_64)二进制文件,但Android设备和仿真器是ARM​​。 当然,即使你设置了正确的soname,这也无济于事。 这是非常天真的方式,导致无处。 Android对C ++的支持非常有限,意味着没有例外,标准C ++库(包括STL)和RTTI。 如果你需要这样的function,请使用我自定义的NDK发行版

http://crystax.net/android/ndk.php – 它支持上面列出的完整的C ++function。

为什么会出现错误:未定义引用'__cxa_end_cleanup'链接错误。 Android的stlport

时间。 因为没有链接到libstdc ++。 A.错了。

因为它使用了一些静态库,所以需要链接完整的libstdc ++。 一个jar头

http://crystax.net/android/ndk.php这里下载包;

sources \ cxx-stl \ gnu-libstdc ++ \ libs \ armeabi目录。

Android本身对libstdc ++支持有限,所以必须链接到一个完整的libstdc ++。 一份工作

在Android.mk中添加文件LOCAL_LDFLAGS = $ (LOCAL_PATH) / libs / libcurl.a \

  $ (LOCAL_PATH) / libs / liblua.a \ `$ (LOCAL_PATH) / libs / libstdc + +. A` 

LOCAL_CPPFLAGS + =-lstdc + +-fexceptions可以被编译

有一个计划允许Android的下一个SDK版本的C / C ++库(Codename Eclair?)到目前为止,通过Android Java SDK是不可能的。 然而,你可以抓住巨大的开源项目,推出你自己的库,然后刷你自己的设备…但任何想要使用你的库的人也必须刷新你的自定义构build。

简短的回答:你不能。

@ Backslash17:通过文章和以下链接安装说明,所有公司的工作是在模拟器上启动一个自编译的可执行文件,绕过android框架。 一旦你有了模拟器,你可以telnet进去,并有一个linuxshell。 运行一个linux程序当然是微不足道的。 但是,这不是没有越狱(又名根访问)的手机,而不是在市场上交付。

除非Google打开其他机会,或者有人编写将Language X编译成Dalvik字节码的自定义编译器(Dalvik是运行Android程序的VM),否则您将无法编写本机代码。