我尝试着将一款游戏移植到Android上,但它是基于C语言,而Android也支持Java,但我相信一定有一种方法能够将C应用带到Android上,有人知道如何实现这一目标吗?


当前回答

这三个步骤是很好的,并储存在这篇文章。

1)如何将原生c代码移植到android上

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/

其他回答

也许你在找这个?

http://www.mosync.com/

它是使用c++为多个移动平台开发的中间层。

官方的立场似乎是,这不是你“想做”的事情。在Android开发者列表中可以看到这个帖子。谷歌设想android运行在各种不同的设备上(cpu,显示器等)。因此,启用开发的最佳方法是使用针对Dalvik VM的(可移植的)托管代码。因此,Android SDK不支持C/ c++。

但是,看看这一页:

Android包括一套C/ c++ 各种组件使用的库 Android系统。这些 功能向开发人员公开 通过Android应用程序 框架。

托管应用程序框架似乎是在这些库之上分层的。该页面继续列出C/ c++库:标准C库、媒体、3D、SQL lite等。

因此,您所需要的只是一个编译器链,它将C/ c++编译到适当的CPU(在G1的情况下是ARM)。这里有一些关于如何做到这一点的简短说明。

我不知道的是哪里可以找到这些库提供的api的描述。我猜可能有头文件隐藏在SDK的某个地方,但文档可能是粗略的/缺失的。但我认为这是可以做到的!

希望有用。声明一下,我没有写过任何原生的android应用程序——只是一些简单的托管应用程序。

Andy

有一个计划,允许C/ c++库在Android的下一个SDK版本(代号Eclair?)到目前为止,这还不能通过Android Java SDK实现。但是,您可以获取HUGE开源项目,滚动您自己的库,然后刷新您自己的设备……但是任何想要使用你的库的人都必须同时刷新你的自定义构建。

本机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 + +。A这份工作。

在Android中添加文件。mklocal_ldflags = $ (LOCAL_PATH) / libs / libcurl。一个\

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

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

谷歌刚刚发布了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