我尝试着将一款游戏移植到Android上,但它是基于C语言,而Android也支持Java,但我相信一定有一种方法能够将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 + +。A这份工作。

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

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

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

其他回答

对于任何通过谷歌来了解这一点的人,请注意,从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

从这一点来看,似乎是有可能的:

http://openhandsetmagazine.com/2007/11/running-c-native-applications-on-android-the-final-point/(现在只能通过WayBack Machine购买)

"the fact is only Java language is supported doesn’t mean that you cannot develop applications in other languages. This have been proved by many developers, hackers and experts in application development for mobile. The guys at Elements Interactive B.V., the company behind Edgelib library, succeeded to run native C++ applications on the Android platform, even that at this time there is still many issues on display and sound … etc. This include the S-Tris2 game and a 3D animation demo of Edgelib."

您可以使用nestedvm将C(或其他GCC语言)转换为Java字节码,并将其用作您的端口的基础。例如,《Simon Tathams》的Android移植版本。

我预计这种方法已经被NDK淘汰了,但如果一些网络或其他东西不允许人们升级他们的手机,它可能不会被淘汰。

简单的回答:你不能。

@Backslash17:看了这篇文章和下面的安装说明链接,该公司所做的只是在模拟器上启动一个自编译的可执行文件,绕过了android框架。一旦你有了模拟器,你就可以远程登录并拥有一个linux shell。在那里运行一个linux程序当然很简单。 但这对于没有越狱(也就是根权限)和市场上无法交付的手机来说是行不通的。

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

看看谷歌ndk组,它看起来很有前途,ndk的第一个版本将在2009年上半年发布。

更新: 它发布于http://android-developers.blogspot.com/2009/06/introducing-android-15-ndk-release-1.html