用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。
通常情况下,你必须:
- 安装Google Android NDK。 它包含libs,头文件,makfile示例和gcc工具链
- 从您的ARM C代码构build一个可执行文件,如果需要,使用提供的库进行优化和链接
- 使用提供的adb接口连接到电话并testing您的可执行文件
如果您正在寻找销售应用程序:
- 从你的C代码构build一个库
- 创build简单的Java代码将使用这个库
- 将此库embedded到应用程序包文件中
- testing你的应用
- 出售或免费分发
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://openhandsetmagazine.com/2007/11/running-c-native-applications-on-android-the-final-point/ (现在只能通过WayBack Machine)
“事实上只有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,这正好可以。
它可以在这里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它。
这三个步骤是好的,并在这个职位存储。
1) 如何在android上移植原生c代码
3) http://mindtherobot.com/blog/452/android-beginners-ndk-setup-step-by-step/
原生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),否则您将无法编写本机代码。