用C或C ++编写Android应用程序?[关闭]


286

我正在尝试将游戏开发/移植到Android,但是它是用C语言编写的,并且Android支持Java,但是我敢肯定,一定有一种方法可以在其中安装C应用程序,任何人都知道实现此目的的方法吗?


仅当您越狱电话AFAIK时。
Cogsy

64
iPhone难道不是越狱吗?
罗伯特·古尔德

1
G1默认情况下不允许root访问,并且在“ Android”环境之外可以执行的操作有很多限制。我不太希望找到一种从Android内部执行本机代码的方法。
Cogsy

2
但是我已经从市场上下载了Android版DOOM。所以它应该可行
罗伯特·古尔德

Answers:


247

对于通过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


5
好了,那么C#和.Net呢?-)
Avi

4
无法看到.NET支持不断发生
vickirk



2
.net / C#代码和android签出xamarin
bbqchickenrobot 2012年

41

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

有关如何开始本机开发的更多信息,请单击此链接

示例应用程序可以在此处找到。



19

通常,您必须:

  1. 安装Google Android NDK。它包含库,标头,makfile示例和gcc工具链
  2. 使用ARM的C代码构建可执行文件,并根据需要将其优化并与提供的库链接
  3. 使用提供的adb界面连接到手机并测试可执行文件

如果您想出售应用程序:

  1. 用您的C代码构建一个库
  2. 创建将使用此库的简单Java代码
  3. 将此库嵌入到应用程序包文件中
  4. 测试您的应用
  5. 出售或免费分发

我是NDK的新手,我想在Android中运行C lan。有任何参考链接吗?
Parag Chauhan 2012年


12

官方立场似乎是,这不是您“想做的”事情。请在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应用程序-只是一些简单的托管应用程序。

安迪


4
投票失败。NDK现在似乎是Android本机代码的官方编译器。使这个答案过时。
unixman83 '04


8

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源代码进行交叉编译


7

也许您在寻找这个?

http://www.mosync.com/

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


2
链接未找到404。如果站点所有者赢得彩票,与妻子离婚并搬到巴哈马,最好将原始帖子中的一些内容放入答案中,以防万一。
Zuzlx

7

看来这似乎是可能的:

“事实上仅支持Java语言,并不意味着您不能用其他语言开发应用程序。许多开发人员,黑客和移动应用程序开发专家已证明了这一点。Edgelib背后的公司Elements Interactive BV的人库,成功地在Android平台上运行了本机C ++应用程序,即使在此时仍存在许多显示和声音问题……等等。其中包括S-Tris2游戏和Edgelib的3D动画演示。”







2

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


2

您可以下载c4droid,然后安装GCC插件并安装到SD。从外壳程序中,我仅遍历GCC二进制文件所在的目录,然后调用它以使板载可执行文件。

查找/ -name gcc

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

猫> test.c

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

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

。/测试

你好,手臂!



2

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可以编译


1

到目前为止,已经有计划允许在Android的下一个SDK版本中使用C / C ++库(代号Eclair?),到目前为止,尚无法通过Android Java SDK来实现。但是,您可以抓住HUGE开源项目,滚动自己的库,然后刷新自己的设备...但是任何想要使用您的库的人也必须刷新您的自定义版本。


-7

简短的回答:不能。

@ Backslash17:仔细阅读本文以及以下带有安装说明的链接,该公司所做的所有工作就是绕过android框架在模拟器上启动自编译的可执行文件。一旦有了模拟器,就可以远程登录并拥有一个Linux shell。当然,运行linux程序很简单。但这不适用于没有越狱(又称root访问权限)且无法投放市场的手机。

除非Google带来其他机会,否则除非有人编写定制的编译器以将Language X编译为Dalvik字节码(Dalvik是运行Android程序的VM),否则您将无法编写本机代码。


是的,这就是为什么我写“似乎……”的原因。看到相信!
backslash17
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.