我尝试着将一款游戏移植到Android上,但它是基于C语言,而Android也支持Java,但我相信一定有一种方法能够将C应用带到Android上,有人知道如何实现这一目标吗?
从这一点来看,似乎是有可能的:
“只支持Java语言这一事实并不意味着你不能用其他语言开发应用程序。这一点已经被许多开发人员、黑客和移动应用程序开发专家所证实。Edgelib库的开发公司Elements Interactive b.v.成功地在Android平台上运行原生c++应用程序,但在显示和声音等方面仍存在许多问题。这包括《S-Tris2》游戏和《Edgelib》的3D动画演示。”
这篇博客文章可能是一个好的开始:http://benno.id.au/blog/2007/11/13/android-native-apps 不幸的是,很多重要的东西都“留给读者作为练习”
官方的立场似乎是,这不是你曾经“想做”的事情。请参阅Android开发者列表中的这个线程。谷歌设想android运行在各种不同的设备上(cpu,显示器等)。因此,启用开发的最佳方法是使用针对Dalvik VM的(可移植的)托管代码。因此,Android SDK不支持C/ c++。
但是,看一下这个页面:
Android包含一套C/ c++ 各种组件使用的库 Android系统。这些 功能向开发人员公开 通过Android应用程序 框架。< / p >
托管应用程序框架似乎是在这些库之上分层的。该页面继续列出C/ c++库:标准C库、媒体、3D、SQL lite等。
因此,您所需要的只是一个编译器链,它将C/ c++编译到适当的CPU(在G1的情况下是ARM)。一些关于如何做到这一点的简短说明是在这里。
我不知道的是哪里可以找到这些库提供的api的描述。我猜可能有头文件隐藏在SDK的某个地方,但文档可能是粗略的/缺失的。但我认为这是可以做到的!
希望有用。声明一下,我没有写过任何原生的android应用程序——只是一些简单的托管应用程序。
安迪
简单的回答:你不能。
@Backslash17:看了这篇文章和下面的安装说明链接,公司得到的所有工作就是在模拟器上启动一个自编译的可执行文件,绕过android框架。一旦你有了模拟器,你就可以远程登录并拥有一个linux shell。在那里运行一个linux程序当然很简单。 但这对于没有越狱(也就是根权限)的手机来说是行不通的,而且市场上也没有交付
除非谷歌打开了其他机会,或者有人编写了一个自定义编译器,将Language X编译成Dalvik字节码(Dalvik是运行Android程序的虚拟机),否则您将无法编写本机代码。
看看谷歌NDK组,它看起来很有前途,NDK的第一个版本将在2009年上半年发布。
有一个计划,允许C/ c++库在Android的下一个SDK版本(代号Eclair?)到目前为止,这还不能通过Android Java SDK实现。但是,您可以获取HUGE开源项目,滚动您自己的库,然后刷新您自己的设备……但是任何想要使用你的库的人都必须同时刷新你的自定义构建。
谷歌发布了一个本地开发工具包(NDK)(根据http://www.youtube.com/watch?v=Z5whfaLH1-E at 00:07:30)。
希望信息将更新在谷歌组页面(http://groups.google.com/group/android-ndk),因为它说它还没有发布。
我不确定从哪里可以得到一个简单的下载,但我听说你可以从谷歌的Git存储库在甜甜圈分支下获得一个NDK的副本。
Android NDK是一个工具集,它允许您使用C和c++等语言在本地代码中实现应用程序的部分内容。对于某些类型的应用程序,这可以帮助您重用用这些语言编写的代码库。
有关如何开始本地开发的更多信息,请关注这个链接。
示例应用程序可以在在这里中找到。
谷歌刚刚发布了NDK。
http://feedproxy.google.com/~r/blogspot/hsDu/~3/2foWz7hwFtE/introducing-android-15-ndk-release-1.html
可以在这里找到: http://developer.android.com/sdk/ndk/1.5_r1/index.html < / p >
对于任何通过谷歌来了解这一点的人,请注意,从SDK 1.6开始,Android现在有一个官方的原生SDK。
您可以使用nestedvm将C(或其他GCC语言)转换为Java字节码,并将其用作您的端口的基础。例如,请参阅Android移植的Simon Tathams便携式谜题收集. xml
我预计这种方法已经被NDK淘汰了,但如果一些网络或其他东西不允许人们升级他们的手机,它可能不会被淘汰。
我不确定NDK是否提供了官方Java API的全部覆盖。
来自http://developer.android.com/sdk/ndk/index.html#overview:
请注意NDK没有 允许您只开发本机 应用程序。Android的主 运行时仍然是Dalvik虚拟的 机器。< / p >
也许你在找这个?
< a href = " http://www.mosync.com/ " rel = " noreferrer > http://www.mosync.com/ < / >
它是使用c++为多个移动平台开发的中间层。
通常情况下,你必须:
如果你想要销售一款应用:
自2009年以来,这件事有了进展 Necessitas - Qt(c++框架)的Android 视频.
本机C/c++文件libstdc++。*从你的Ubuntu是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中添加文件。可LOCAL_LDFLAGS = $ (LOCAL_PATH) / libs / libcurl.a \
LOCAL_LDFLAGS = $ (LOCAL_PATH) / libs / libcurl.a \
$ (LOCAL_PATH) / libs / liblua.a \ `$ (LOCAL_PATH) / libs / libstdc + +. A`
并且LOCAL_CPPFLAGS + =-lstdc + +-fexceptions可以被编译
LOCAL_CPPFLAGS + =-lstdc + +-fexceptions
我不知道教程,但一个很好的开发工具:Ideaworks Labs的Airplay SDK。(最近更名为“Marmelade”)使用C/ c++可以为Windows Mobile, iphone, Android构建应用程序。我唯一不喜欢的组件是GUI编写器——一个bug,但你总是可以用记事本代替它。
谷歌已经启动了谷歌I/O 2011:将C和c++游戏引入Android会话,该会话在http://www.youtube.com/watch?v=5yorhsSPFG4可用
这有助于理解NDK在c和c++中编写应用程序的使用。
如果你只是想交叉编译任何基于主机的原生游戏,并在android上运行它们,那么这篇文章已经显示了3种方法。
1:使用独立工具链的静态编译
2:使用Android NDK的工具链进行交叉编译
3:交叉编译使用AOSP源代码
您可以下载c4droid,然后安装GCC插件并安装到SD上。从shell,我只是遍历到GCC二进制文件所在的目录,然后调用它,使其成为板上可执行文件。
/ mnt / sdcard / Android /数据/ com.n0n3m4.droidc /文件/ gcc / bin / arm-linux-androideabi-gcc
#include<stdio.h> int main(){ printf("hello arm!\n"); return 0; }
你好手臂!
这三个步骤是很好的,并储存在这篇文章。
1) 如何在android上移植本地c代码
2) http://www.integratingstuff.com/2010/12/12/calling-native-c-code-through-jni-in-android-applications/
3) http://mindtherobot.com/blog/452/android-beginners-ndk-setup-step-by-step/