2009-06-16 56 views
264

我试图开发/移植一个游戏到Android,但它是在C中,并且Android支持Java,但我确信必须有一种方法来获得一个C应用程序,任何人都知道一个很好的教程主题?用C或C++编写Android应用程序?

谢谢!

+0

只有当你越狱电话AFAIK。 – Cogsy 2009-06-16 15:16:56

+58

是不是对iPhone的制动? – 2009-06-16 15:19:10

+1

G1默认情况下不允许root访问,并且对于可以在“Android”环境之外执行的操作有很多限制。 我不会有太多的希望找到一种方式来执行Android内的本机代码。 – Cogsy 2009-06-16 15:23:46

回答

7

望着这似乎是可能的:

"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."

12

官方位置似乎是因为这不是你想做的事情。请参阅Android开发人员列表中的this thread。 Google设想在各种不同设备(CPU,显示器等)上运行Android。因此,启用开发的最佳方式是使用针对Dalvik VM的(便携式)托管代码。出于这个原因,Android SDK不支持C/C++。

,但看看this page

Android includes a set of C/C++ libraries used by various components of the Android system. These capabilities are exposed to developers through the Android application framework.

托管的应用程序框架出现在顶部,这些库来进行分层。该页面继续列出C/C++库:标准C库,媒体,3D,SQL Lite和其他。

因此,您只需要一个编译器链,将C/C++编译到适当的CPU(在G1中为ARM)。一些关于如何做到这一点的简要说明是here

我不知道从哪里可以找到这些库提供的API的描述。我猜想有可能是头文件埋在SDK的某处,但文档可能粗略/缺失。但我认为这是可以做到的!

希望这是有用的。为了记录,我没有编写任何原生的android应用程序 - 只是一些简单的托管应用程序。

Andy

-7

简答:你不能。

@ Backslash17:通过阅读文章和安装说明的以下链接,所有公司开始工作的是在模拟器上启动一个自编译的可执行文件,绕过了android框架。一旦你有模拟器,你可以telnet进入并拥有一个linux shell。运行一个linux程序当然是微不足道的。 但是,这不适用于没有越狱(又称root访问权限)的手机,并且不能在市场上交付。

除非Google打开其他机会或者有人编写将语言X编译为Dalvik字节码的自定义编译器(Dalvik是运行Android程序的VM),否则您将无法编写本机代码。

1

有一个计划,以便在Android的下一个版本的SDK C/C++库(?代号为Eclair的)到今天为止,它不可能通过Android的Java SDK。然而,你可以抓住巨大的开源项目,推出你自己的库,然后刷你自己的设备......但任何想使用你的库的人都必须刷新你的自定义构建。

39

Android NDK是一个工具集,可以让你实现在本地代码你的应用程序的一部分,使用的语言,如C和C++。对于某些类型的应用程序,这可以帮助您重新使用以这些语言编写的代码库。

有关如何获得与本地发展开始更多信息,请this link

示例应用程序可以找到here

17

通常情况下,你必须:

  1. 安装谷歌Android NDK。它 包含库,头,makfile 实例和gcc工具
  2. 构建从ARM C代码 可执行文件,优化,如果需要
  3. 连接与 提供的库链接到一个手机使用提供 亚行接口和测试你的 可执行

如果您正在寻找销售应用:

  1. 构建溴化锂从你的C代码进制
  2. 创建简单的Java代码,这将 使用这个库
  3. 嵌入此库到应用 包文件
  4. 测试应用
  5. 把它卖掉或分发免费
6

自2009年以来,在这个问题上有一个发展。
Necessitas - 适用于Android的Qt(C++框架)
开始使用video

2

本地C/C++文件Ubuntu中的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++。 A.错了。

因为它使用了一些静态库,所以需要链接完整的libstdC++。 A.可以

http://crystax.net/android/ndk.php这里下载包

来源\ CXX-STL \ GNU-的libstdc + + \ \库目录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可以编译

2

我不知道一个教程,但一个好的开发工具:的Airplay SDK从Ideaworks Labs的。(最近更名为“Marmelade”)使用C/C++,您可以为Windows Mobile,iPhone,Android构建应用程序。我不喜欢的唯一组件是GUI编辑器 - 一个有问题的组件,但您始终可以用记事本替换它。

8

谷歌已经推出了谷歌I/O 2011:把C和C++游戏到Android会议是可在http://www.youtube.com/watch?v=5yorhsSPFG4

这是很好的了解使用NDK的在C和C++编写的应用程序机器人。

如果你只是想交叉编译任何基于控制台本土游戏在Android上运行它们,然后this Article已经显示出相同的3种方法。

1:静态编译使用独立的工具链

2:使用Android NDK的工具链

3交叉编译:交叉编译使用AOSP源代码

3

您可以下载c4droid然后安装GCC插件和安装到您的SD。从shell中我只是遍历GCC二进制文件所在的目录,然后调用它来创建一个可执行文件。

查找/ -name GCC

/mnt/sdcard/Android/data/com.n0n3m4.droidc/files/gcc/bin/arm-linux-androideabi-gcc

猫>测试.C

#include<stdio.h> 
int main(){ 
printf("hello arm!\n"); 
return 0; 
} 

./arm-linux-androideabi-gcc test.c的-o测试

./test

你好!

相关问题