首页 文章

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

提问于
浏览
276

我正在尝试开发/移植游戏到Android,但它在C中,Android支持Java,但我确信必须有一种方法可以在那里获得一个C应用程序,任何人都知道有关该主题的好教程?

谢谢!

20 回答

  • 2

    看看google ndk group看起来很有前途,NDK的第一版将于2009年上半年上市 .

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

  • 5

    对于通过Google访问此处的任何人,请注意,从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

  • 2

    自2009年以来,这方面有了一个发展 .
    Necessitas - 适用于Android的Qt(C框架)
    入门video .

  • -7

    谷歌已经推出 Google I/O 2011: Bringing C and C++ Games to Android 会话,可在http://www.youtube.com/watch?v=5yorhsSPFG4获取

    这很好理解使用NDK在c和c中为android编写应用程序 .

    如果你只想交叉编译任何基于控制台的本机游戏并在android上运行它们,那么this Article已经显示了3种相同的方法 .

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

    2:使用Android NDK的工具链进行交叉编译

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

  • 3

    这篇博文可能是一个好的开始:http://benno.id.au/blog/2007/11/13/android-native-apps不幸的是,很多重要的东西都是"left as an exercise to the reader" .

  • 237

    来自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 . 一个 jar 头

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

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

  • 7

    简短的回答:你做不到 .

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

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

  • 2

    我不确定NDK是否提供了官方Java API的完整报道 .

    http://developer.android.com/sdk/ndk/index.html#overview

    请注意,NDK不允许您开发仅限本机的应用程序 . Android的主要运行时仍然是Dalvik虚拟机 .

  • 17

    官方立场似乎是,这不是't something you' . 请参阅Android开发者列表中的this thread . 谷歌设想在各种不同的设备(CPU,显示器等)上运行android . 因此,支持开发的最佳方法是使用针对Dalvik VM的(可移植)托管代码 . 因此,Android SDK不支持C / C.

    但是,看看this page

    Android包含Android系统各个组件使用的一组C / C库 . 这些功能通过Android应用程序框架向开发人员公开 .

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

    所以你需要的只是一个编译器链,它将C / C编译到适当的CPU(在G1的情况下为ARM) . 关于如何执行此操作的一些简要说明是here .

    我不知道的是在哪里可以找到这些库提供的API的描述 . 我猜可能会在SDK中隐藏头文件,但文档可能粗略/缺失 . 但我认为可以做到!

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

    安迪

  • 2

    看着这似乎有可能:

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

  • 3

    也许你在找这个?

    http://www.mosync.com/

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

  • 8
  • 5

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

    有关如何开始本机开发的更多信息,请按this link .

    示例应用程序可以在here找到 .

  • 7

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

  • 6

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

    find / -name gcc

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

    cat> test.c

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

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

    ./test

    你好胳膊!

  • 1

    您可以使用nestedvm将C(或其他GCC语言)转换为Java字节码,并将其用作端口的基础 . 例如,请参阅Android port of Simon Tathams portable puzzle collection .

    我希望这种方法被NDK淘汰,但如果某些网络或某些东西不允许人们升级他们的手机,它可能不会出现 .

  • 12

    通常,你必须:

    • 安装Google Android NDK . 它包含libs,headers,makfile示例和gcc工具链

    • 从ARM的C代码构建可执行文件,如果需要,优化并将其与提供的库链接

    • 使用提供的adb界面连接到手机并测试您的可执行文件

    如果您想要销售应用程序:

    • 从C代码构建库

    • 创建将使用此库的简单Java代码

    • 将此库嵌入到应用程序包文件中

    • 测试您的应用

    • 出售或免费分发

  • 8

    谷歌发布了一个原生开发套件(NDK)(根据http://www.youtube.com/watch?v=Z5whfaLH1-E 00:07:30) .

    希望这些信息将在谷歌群组页面(http://groups.google.com/group/android-ndk)上更新,因为它表示尚未发布 .

    我不确定从哪里获得简单的下载,但我听说你可以从甜甜圈分支下的谷歌Git存储库中获取NDK的副本 .

  • 14

    有一个计划允许下一个SDK版本的Android(Codename Eclair?)中的C / C库到目前为止,通过Android Java SDK无法实现 . 但是,您可以获取巨大的开源项目,滚动自己的库,然后刷新您自己的设备......但是任何想要使用您的库的人都必须刷新您的自定义构建 .

相关问题