我正在尝试将游戏开发/移植到Android,但是它是用C语言编写的,并且Android支持Java,但是我敢肯定,一定有一种方法可以在其中安装C应用程序,任何人都知道实现此目的的方法吗?
我正在尝试将游戏开发/移植到Android,但是它是用C语言编写的,并且Android支持Java,但是我敢肯定,一定有一种方法可以在其中安装C应用程序,任何人都知道实现此目的的方法吗?
Answers:
对于通过Google进行此操作的任何人,请注意,从SDK 1.6开始,Android现在具有官方的本机SDK。
您可以从此处下载Android NDK(本机开发套件):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 ++。对于某些类型的应用程序,这可以帮助您重用以这些语言编写的代码库。
有关如何开始本机开发的更多信息,请单击此链接。
示例应用程序可以在此处找到。
通常,您必须:
如果您想出售应用程序:
Google已发布了本机开发工具包(NDK)(根据http://www.youtube.com/watch?v=Z5whfaLH1-E在00:07:30的信息)。
希望该信息会在google 网上论坛页面(http://groups.google.com/group/android-ndk)上进行更新,因为它说尚未发布。
我不确定从哪里可以下载到它,但是我听说您可以从donut分支下的Google Git存储库中获得NDK的副本。
官方立场似乎是,这不是您“想做的”事情。请在Android开发者列表中查看此线程。Google设想在各种不同的设备(CPU,显示器等)上运行android。因此,实现开发的最佳方法是使用针对Dalvik VM的(便携式)托管代码。因此,Android SDK不支持C / C ++。
但是,请看此页面:
Android包含一组供Android系统的各个组件使用的C / C ++库。这些功能通过Android应用程序框架向开发人员公开。
托管应用程序框架似乎位于这些库的顶部。该页面继续列出C / C ++库:标准C库,媒体,3D,SQL lite等。
因此,您只需要一个编译器链,即可将C / C ++编译为适当的CPU(对于G1,为ARM)。有关如何执行此操作的一些简要说明在此处。
我不知道在哪里可以找到这些库提供的API的描述。我猜可能在SDK的某处埋有头文件,但是文档可能太粗略/缺少。但我认为可以做到!
希望那是有用的。作为记录,我还没有编写任何本机android应用程序-只是一些简单的托管应用程序。
安迪
您可以使用nestedvm将C(或其他GCC语言)转换为Java字节码,并将其用作端口的基础。例如,请参见Simon Tathams便携式拼图收藏的Android端口。
我希望NDK会淘汰这种方法,但是如果某些网络或某些不允许人们升级手机的方法可能不会采用这种方法。
Google已经启动了Google I / O 2011:将C和C ++游戏带入Android会话,该会话可从http://www.youtube.com/watch?v=5yorhsSPFG4获得
理解NDK在Android上使用c和c ++编写应用程序的用法很好。
如果您只是想交叉编译任何基于控制台的本机游戏并在android上运行它们,那么本文将为您展示3种方法。
1:使用独立工具链进行静态编译
2:使用Android NDK的工具链进行交叉编译
3:使用AOSP源代码进行交叉编译
看来这似乎是可能的:
“事实上仅支持Java语言,并不意味着您不能用其他语言开发应用程序。许多开发人员,黑客和移动应用程序开发专家已证明了这一点。Edgelib背后的公司Elements Interactive BV的人库,成功地在Android平台上运行了本机C ++应用程序,即使在此时仍存在许多显示和声音问题……等等。其中包括S-Tris2游戏和Edgelib的3D动画演示。”
自2009年以来,此事有了发展。
Necessitas -Qt(C ++框架),用于Android
入门视频。
看看看起来很有前途的google 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虚拟机。
这篇博客文章可能是一个好的开始:http : //benno.id.au/blog/2007/11/13/android-native-apps 不幸的是,许多重要的东西都是“留给读者练习”。
您可以下载c4droid,然后安装GCC插件并安装到SD。从外壳程序中,我仅遍历GCC二进制文件所在的目录,然后调用它以使板载可执行文件。
/mnt/sdcard/Android/data/com.n0n3m4.droidc/files/gcc/bin/arm-linux-androideabi-gcc
#include<stdio.h>
int main(){
printf("hello arm!\n");
return 0;
}
你好,手臂!
Ubuntu中的本机C / c ++文件libstdc ++。*是x86(或x86_64)二进制文件,而Android设备和仿真器是ARM。当然,即使您设置了正确的soname,也无论如何都行不通。这是一种非常幼稚的方法,无济于事。Android对C ++的支持非常有限,这意味着没有例外,标准C ++库(包括STL)和RTTI。如果您需要这样的功能,请使用我的自定义NDK发行版
http://crystax.net/android/ndk.php-它支持上面列出的全部C ++功能。
为什么会出现错误:未定义对'__cxa_end_cleanup'链接的引用。Android stlport
时间。因为没有链接到libstdc ++。答:错了。
因为它使用一些静态库,所以有必要链接完整的libstdc ++。一个罐头
http://crystax.net/android/ndk.php此处下载软件包
来源\ 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
可以编译
简短的回答:不能。
@ Backslash17:仔细阅读本文以及以下带有安装说明的链接,该公司所做的所有工作就是绕过android框架在模拟器上启动自编译的可执行文件。一旦有了模拟器,就可以远程登录并拥有一个Linux shell。当然,运行linux程序很简单。但这不适用于没有越狱(又称root访问权限)且无法投放市场的手机。
除非Google带来其他机会,否则除非有人编写定制的编译器以将Language X编译为Dalvik字节码(Dalvik是运行Android程序的VM),否则您将无法编写本机代码。