Android将允许纯C/C++开发应用

Android将允许纯C/C++开发应用

对于Android,长期以来,我一直有两件事搞不懂,

  • 一个是为什么Android要选用Java。对于嵌入式开发,CPU和内存都很宝贵,居然还使用Java。
  • 一个是为什么Android的开发站点要被墙。这只是一个技术网站啊。

最近,在一个Android开发人员的Blog上证实了在NDK r5使用C/C++进行开发。(以前,Android 对C/C++开发的支持仅限于用C/C++开发动态链接库,然后在Java中以JNI的形式来调用)现在,你可以用纯C/C++开发了(参看下面的程序代码)。还有一段完整的代码示例在这里(墙,还有XML的manifest,又见XML)。看来,Google终于明白为什么使用Android的手机(如:Moto, 三星、索爱和HTC)的触摸体验远远不及object C搞出来的iPhone。

void android_main(struct android_app* state) {
    // Make sure glue isn't stripped.
    app_dummy();

    // loop waiting for stuff to do.
    while (1) {
        // Read all pending events.
        int ident;
        int events;
        struct android_poll_source* source;

        // Read events and draw a frame of animation.
        if ((ident = ALooper_pollAll(0, NULL, &events,
                (void**)&source)) >= 0) {
            // Process this event.
            if (source != NULL) {
                source->process(state, source);
            }
        }
        // draw a frame of animation
        bringTheAwesome();
    }
}

我个人估计有两个原因为什么Google回头支持C/C++了,

  1. Google开始觉得自己整的JVM在性能上可以全面超越传统JVM,并接近C/C++,现在发现搞不定了。
  2. Google发现Java的程序员不像C/C++程序员那样注重程序的性能和效率,开发App太耗CPU和内存。

于是只好转回支持C/C++。本来就是用C/C++写出来的Android嘛,居然不能用C/C++而只能用Java,真是太侮辱C/C++了。最后,只希望Google并不是又整了一个C/C++版的Dalvik虚拟机,不然就真是侮辱到极点了。

——— 更新 2011/01/24 ————

谢谢大家对这篇文章的评论,挺有意思的,欢迎讨论,我把我的回复更新在下面。不一定对,仅供大家参考。

Java的学习成本低,开放性好,兼容性也高,我不否认(但请大家也别否认C/C++的效率要比Java要高。而C/C++的程序员在普遍上要比Java程序员更注意性能和效率)。这应该是Andorid的一开始的定位,可见,Google关注的是程序员,而不是用户。现在转回支持C/C++必然有他的原因,如果不是性能上的原因。那么就请大家分析一下别的原因。

Android本来就是用C/C++写的,要跨平台,首先是Android自己跨平台。就像Linux一样,跨平台的首先是Linux,应用开发人员只需要符合Linux的API就OK了。JVM带来的便利只是无需重新编译(就算是无需重新编译,对于开发人员来说也要去那个平台做测试的,因为不同的平台的JVM同样是不一样的)。在Native平台上编译的成本其实并不高,这个编译过程完全可以在部署的时候自动化。

有人说,Java的开发成本比C/C++低,但这和语言没有关系,这其实和封装程度有关系。C/C++同样可以封装得很好。而且,C/C++的程序员比JAVA程序来说,天生就对内存和性能要敏感的多。这更有利于在手机这样资源不足的平台上做开发。

尤其对于像手机这样的时尚终端来说,在用户体验上花的成本要比在开发人员上花成本要大得多的多。我以为,Google 的Android 更多的关注了程序员,而不是用户。而iPhone更多的关注了用户,也让程序员在开发过程上受到了一些牺牲(iPhone的做法是如果程序员的程序要上App Store,先交99美刀的代码审查费,就像申请美国签证一样),但是,iPhone的程序员虽然在开发的方便上有一些牺牲,但是从收入上却得到了保障。最新的消息是苹果已向开发者支付20亿美元 音乐供应商分成达120亿美元。在《偷了世界的程序员》中对此有充分的论述。

最后,请大家思考 几个问题——

  • Android支持C/C++是为什么?如果是为了程序效率,那么这又是为什么?
  • 是开发人员更重要,还是用户更重要?(注意:我说的是“更重要”)
  • 在当今这种诸如iPhone或Andorid的开发模式下,是完全开放好,还是有适当的封闭好?
  • 开发和封闭的背后的商业驱动是什么?如何在开放和封闭中权衡用户、开发者、公司和版权商的利益?

苹果公司给出了一个很不错的商业模式。

(完)

(转载本站文章请注明作者和出处 酷 壳 – CoolShell ,请勿用于任何商业用途)

好烂啊有点差凑合看看还不错很精彩 (38 人打了分,平均分: 4.39 )
Loading...

Android将允许纯C/C++开发应用》的相关评论

  1. 1. java入门快, 容易吸引开发者, 前期策略没有错
    2. 对于执行效率的说法我认为其次,目前android运行的也很好. 关键是oracle对java的态度不端正,可能导致开源界放弃java, google提前多开一条路而已
    总之, 作者不了解java社区的情况 , 只好用c/c++的效率优势来说事

    1. 我个觉得,Google的Andorid的产品团队正是在了解了Java社区在使用Android的情况之后,才做出了支持C/C++的决定。(对于“效率方面的说事”,这不是我说的,你看看原文,里面还有一张图呢)

  2. quote:最后,只希望Google并不是又整了一个C/C++版的Dalvik虚拟机,不然就真是侮辱到极点了。

    呵呵,你说对了,开放的c/c++ api也是在davik虚拟机中代码的hook,他这样作仅仅是为了可以帮助移植现有的native游戏等程序,不过已经可以完全用c/c++写程序了(不能用java的那些没有开放的api)

  3. 一个是为什么Android的开发站点要被墙。这只是一个技术网站啊。

    这是我党的一贯宗旨!哈哈

  4. 最后,只希望Google并不是又整了一个C/C++版的Dalvik虚拟机,不然就真是侮辱到极点了。
    这个应该是绝对的吧

  5. android的app用java,更重要的是可以在不同的芯片上跑(比如arm, mips)。
    假如用C/C++了,之前的NDK只支持arm,虽然在大多数用arm的手机上能跑了,但在其它非arm的device上还是跑不了。

  6. 楼上正解,用Java就是为了所谓的跨平台部署。Android是开放平台,各个厂家硬件差别很大,C/C++开发的应用只能局限于少数机型才能使用。支持C/C++是为了开发游戏之类的对CPU消耗大的应用。

  7. 首先我要说明的一点是不考虑性能的程序员不是好程序员,不管是用什么开发语言。
    我还是觉得5楼的有理,java 执行效率没有想象那么慢(至少 JVM 虚拟机中的优化已经做的相当出色),最重要的原因还是 oracle 公司对 java 的态度不好。

    1. 反过来说,即然如此Java的性能那么好,也自己写JVM,为什么还要回头支持C/C++,一定是有一些难言之隐。我个人试着分析了一下,不一定对,但不妨参考。

  8. JAVA跨平台,C/C++性能利用方面更精细。两者从商业上和技术上有自己的优势,也谈不上什么侮辱谁。谷歌也是商人,也要吃饭,重点是吸引更多的人,占有更多的市场,赚更多的Money。

  9. Android本来就是用C/C++写的,要跨平台,首先是Android自己跨平台。这和是否用JVM没有关系,就像Linux一样,跨平台的是Linux,应用开发人员只需要符合Linux的API就OK了。所以,JVM带来的便利只是无需重新编译。在Native平台上编译的成本其实并不高。尤其对于像手机这样的时尚终端来说,在用户体验上花的成本要比在开发人员上花成本要大得多的多。

    有人说,Java的开发成本比C/C++低,但这和语言没有关系,这其实和封装程度有关系。C/C++同样可以封装得很好。而且,C/C++的程序员比JAVA程序来说,天生就对内存和性能要敏感的多。这更有利于在手机这样资源不足的平台上做开发。

    我以为,Google 的Android 更多的关注了程序员,而不是用户。而iPhone更多的关注了用户,也让程序员的利益因此受到了一些牺牲,但是,iPhone的程序员虽然在开发的方便上有一些牺牲,但是从收入上却得到了保障。最新的消息是苹果已向开发者支付20亿美元 音乐供应商分成达120亿美元。

  10. 你ping一下就知道为什么被封了,android developer网站是运行在appspot上的,而那个android的二级域名,是绑定在ghs上的。

  11. @陈皓
    linux的所谓跨平台是指编译跨平台的 android的手机现在已经覆盖了 x86, arm, mips 这三种架构 你难道每个软件都分 xx_x86, xx_arm, xx_mips?
    他们发布jvm的就是为了确保只有一个软件包而已
    另外他们用java是可以立刻把许多现存的java手机软件 而现在的手机软件从业人员也可以快速加入开发,因为排除了ip开发 在手机上还是主要java的,尽管我个人也不喜欢java
    另外还有一点 arm处理器有java硬加速 所以jvm的效率不见的差到哪里去
    我是支持他用 c/cpp 跑在jvm上的 这样满足了我 可移植和用c的需求

  12. @无限
    谢谢你的回复,这就是我说JVM的真正便利,无需重编译。也不需要在代码里整出些什么#ifdef的东东,不过,完全可以把编译这个过程放在部署中自动化。

    我完全同意Java的进入门槛低,也知道C/CPP上也有程序, 但这应该不是Andorid转头支持C/CPP的原因。换句话说,我并不认为Andorid是为了讨好C/CPP的程序员才支持C/C++的,这后面必然有性能的原因,而驱动Andorid去考虑性能的原因,并不是程序员,而是最终用户。

    请思考——Andorid最终目的是为了程序员,还是为了最终为终端手机用户?对于用户,谁管你什么Java, C、C++还是Andorid或是iOS,什么API还是编译什么的,我做为手机用户,我只关心用户体验好不好,上面的应用爽不爽。

    连Google自己内部的开发人员都不想用Andorid,而用iPhone(中国谷歌员工应该全体人手一台iPhone了)。因为,Andorid的用户体验还是太差,为什么比iPhone差?原因在哪里?硬件的吗?还是OS的?还是App的?我看是后两者的问题。

  13. 我觉得目前使用Java开发挺合适的,Java语言有丰富的类库和友好的IDE可用,开发效率较高;另外,跨平台的特性很重要,要不然以后去Market下载应用还要分清ARM和MIPS等各种不同架构的安装包(ARM不同版本可能都不互相兼容),这些对于一般的用户来说有点太复杂了。开放C/C++应该是为了满足用户的需求吧。

  14. 1.为了规避oracle的诉讼;
    2.为了提高运行效率,不是因为java本身,而是因为专利,davik即便提高了效率,但是touch了专利的话部署成本也会很高;
    3.为了纳入更为广泛的eco system,比如让EA把其他平台C\C++的游戏port过来;

  15. “Google终于明白为什么使用Android的手机(如:Moto, 三星、索爱和HTC)的触摸体验远远不及object C搞出来的iPhone。”

    这个跟语言没关系,iPhone体验好是因为Apple在人际交互上面已经积累了很多年的功夫,别人一时半会赶不上来,Google技术很牛,工业设计很一般。单纯技术和架构上Andoid我觉得还是领先的(OOP, OSGI),这个和是否用Java或者C/C++是也没有很大关系的。webos用javascript一样很cool。

    当然对于手机用户来说速度也是很关键的,不过这个跟PC上发展一样,当CPU速度愈来愈快时,语言已经不是很关键了,特别是现在dalvik也使用了jit。但是看到Java暂时慢就退回c/c++而不考虑改进JVM,我想这个应该是技术上的倒退,不是发展的趋势。

  16. 如果再不提供C/C++支持……估计会有相当一部分的开发者转向Meego阵营。。。
    毕竟开发者会更加愿意在更接近自己熟悉的平台上开发。。。
    至于Android上的Java……性能并没有最开始想象中的那么糟糕……
    开发Android的公司最初可能仅仅是出于安全和开发难度考虑而使用Java作为基础平台……
    现在归属Google之后才决定在系统已经较为稳定的情况下进行性能上的优化……

  17. 稍微看了一下,NDK对Android API的调用仍然要通过Dalvik,因此用NDK开发普通应用,除了增加复杂度,性能并不会比Java的应用好太多。
    NDK的优势在于对OpenGL ES等底层接口的直接访问,因此full ndk的支持对游戏/多媒体开发者是有利的,他们不需要太多的android API,只需要一个Activity然后几乎所有的东西都在上面进行自主绘制。这样他们之前用C++写的应用就可以用尽可能小的改动迁移到android上了。而不需要把逻辑层面的东西用Java重新写一遍。
    对于写普通应用的人,full ndk支持的意义没有那么大。

  18. 为什么你们对这事儿这么敏感?又没说以后就不支持Java,为什么就不能是Google仅仅想给开发者更多选择呢?

  19. 不是很明白,但是触摸体验这回事似乎和使用啥语言应该没关系:

    比如愤怒的小鸟,它有iOS版本,有Android版本,两者的体验并无太大区别;要说体验出问题,也不是程序的问题,而是五花八门的硬件导致的问题,比如屏幕的分辨率和CPU的速度。

    也没有开发人员听到抱怨那种语言更难写,或者某个版本效率更好,似乎这些都是小问题。

    相反,抱怨最多的却集中在Android平台的硬件兼容问题上,以及付费商店上。

    要说对用户更友好,谁也无法否认苹果App Store做了双赢:开发者赚了钱,消费者图了方便;而这个结果,其实和开发语言毫无关系。

    1. 愤怒的小鸟并不能代表所有的Java程序员,以及所有的andorid应用。不过,我很同意你所说的,要兼容于很多不同硬件所产生的代价。我也很同意,这并不是语言的问题,我一直坚持这个观点,如果不是语言的问题,为什么要去支持C/C++?原文说这样可以利用到最好的硬件性能,那么为什么要利用最高的性能?是不是说Java的开发有了一些限制?限制了什么?程序员的开发体验还是用户体验?

  20. 乔布斯说的这段话,才是Android和iOS之间的真正的区别(注意乔布斯一点没提开发语言,因为那根本无关紧要):

    “谷歌喜欢强调Android是“开放的”,而iOS和iPhone是“封闭的”。我们发现这有点不够真诚,而且模糊了我们之间真正的差异。我们多数人 听到“开放”这个词时首先想到的是Windows,这款系统被用于多种设备,而且多数PC都拥有相同的用户界面,并运行相同的应用。但是与 Windows不同,Android非常分化。许多Android OEM厂商,包括宏达电和摩托罗拉这两家最大的企业都安装了专有的用户界面,以便将自己与大众化的Android体验区分开来。而要搞清楚如何使用,都要 由用户自行处理。相比而言,所有的iPhone手机运行方式都一样。

      Twitter客户端(TweetDeck)最近发布了他们的Android应用。他们表示,需要应对244款不同型号的手机采用的100多个不同版 本的Android。不同的硬件和软件版本会给开发者带来巨大的挑战。许多Android应用只能被用于特定的Android手机、特定的 Android版本。而且这种手机从正式出货至今还不到12个月!与之相比,iPhone只有两个版本的软件需要测试:现在正在使用的版本,和最近的上一 个版本。

      除了谷歌的应用市场,亚马逊、Verizon和沃达丰也都宣布将推出自己的Android应用商店。所以至少会有4个Android应用商店,要找到 喜欢的应用,用户要对这四个商店进行搜索,而开发者也需要通过这四个商店分发应用并获取收入。无论是对用户还是开发者而言,都会十分混乱。

      相比而言,苹果则拥有一个统一的应用商店,并为用户提供最简单的使用方式以及全世界最大的应用商店,而且该应用商店已经被预装到每部 iPhone上。苹果应用商店的规模是谷歌Android Market的三倍多,而且为开发者提供了一站式服务,使之更容易进行推广,并快速得到报酬。”

  21. 我支持google继续jvm方向为主,也希望提供更多的C/C++API.
    本人是一名C++工作者.
    硬件上细节太多,arm就有好几版指令集,armv5te,v6,armv7-n的新指令集.
    这样就很难做出性能和兼容兼顾的东西.
    google做的平台抽象掉这些实现细节.让软件稳定的运行在绝大多数CPU上.
    事实上绝大多数的计算都是在系统本身的C/C++代码上跑的.包括图形声音,通信连接等等,都是系统的C++共享库搞定.
    只有很少量的代码是第三方应用的java字节码.
    当然除非你喜欢在手机应用上用很多的for while 迭代递归.或者喜欢java编写复杂的数据结构.
    所以希望google继续优化jvm.提高效率.做好jit.

    未来是属于很多不同类的异构CPU.只要有X86 armv5 armv7等不同版本的 android就行.
    不要出现一大堆不同版本的android应用

  22. Aandroid一开始仅支持Java居然而不支持用C/C++开发应用软件,C/C++支持者们感动了侮辱;后来听到消息即将添加对C/C++的支持了,C/C++们急急的跳起来欢呼了,顺便再把Java踩上一脚,似乎压抑了很久。楼主的博文给我的就是以上印象。(如果我理解有误,或我的说法过分,请予谅解。)

    其实大可不必。本来很平常一个事:Android想多条腿走路,想给自己和开发者一个新的选择;仅仅是扩充,不是取代不是否定。比如我平时吃惯了馒头米饭周末想去吃顿牛排。博主在C/C++领域是知名人物,但对Java/Android领域有诸多不了解和误解。

    我先简单说说Android系统:广义的Android系统 = Linux核心 + Devik(Java虚拟机) + Harmony(Java标准库) + 各种库(java库/非java库) + 各种服务(java的/非java的) + 各种应用程序。广义的Android系统中去除Linux核心剩下的部分,可以称之为狭义的Andorid。Android是一个以Linux核心为基础的全新的操作系统,很显然Android是以Java为核心构建的(Java的运行时、库、框架、应用程序),而C/C++在构建Android过程中发挥了主力作用(各种底层实现,狭义Android与Linux核心的胶合)。可见在Android中Java和C/C++是和谐相处的,都是顶梁柱,都不可或缺,区别只是Java在前台而C/C++在后台。总之,Android是综合运用各种技术和各种现有资源充分发挥其各自优势开发的优秀的开放性平台。(本段为liigo原创。)

    以iphone作为对比说Android手机触摸体验不好,没有说服力,因为没有考虑到iphone的封闭平台、单一硬件体系、单任务、更高的设备售价等因素。iphone界面快速反应的背后其实也有取巧的成分。Android系统也在快速改进发展中。

    1. 我没有踩一脚的一意思,不过,我这里的文章大多数都是以调侃为主的,这是我的风格。

      正如我在博文更新中所说的一样,我欢迎大家一起来思考一下。

      如果Android的Java一切都好,既然C/C++的跨平台那么差,学习成本那么大,为什么还要反而支持C/C++?如果仅仅是实现上的扩充的话,是否有画蛇添足的感觉呢?如果是扩充呢,为什么不支持Python呢?另外,关于哪个是后台,那个是前台,我觉得在手机上还分前后台,这个有点搞复杂了,求官方解释。在Android开者的原文中提到了游戏开发中的性能,并没有提到前后台。

      关于iPhone的解摸体验,如果你有朋友在谷歌工作,你可以向他们咨询一下是什么情况。一个更有说服力的例子是,谷歌的工程师们现在是人手一台iPhone4,而不是Android。

      关于iPhone的封闭,我博文说了,想请从用户的角底上思考一下,而不是从程序员的角度。

  23. Android 一直都支持本地代码的,最早NDK 还没发布的时候就有人用支持ARM芯片的编译器编译出C/C++写的android程序,还有教程:见 pro android games

    Android 绝对还会继续以JVM为主的,如果只考虑速度的为什么不直接用ARM汇编直接写汇编代码?那不是更好,目前看来Android大部分游戏在中档机里面已经能够运行得非常流畅了。

    再说可以用proguard 来优化混淆某些特定的类或函数。

    JNI的调用在android里面本来也不快,不必钻牛角尖的要用太底层的东西来优化,除非有必要,有必要的情况其实根本就不多。

    开发游戏来说,如果画面里面的sprite比较少或者更新更新的很少,Canvas就比OpenGL ES用起来方便,还一样快。

  24. 可能也有规避与Oracle关于java官司的准备。但是我觉得这样的可能性很小。
    Google也不会提倡使用C/C++来开发App,因为兼容性会很差,Google可不想重蹈Symbian的后尘,我只愿意相信,那真的只是想提供给喜欢折腾的人和吸引更多的程序员来关注这个平台。

  25. 陈皓 :如果Android的Java一切都好,既然C/C++的跨平台那么差,学习成本那么大,为什么还要反而支持C/C++?……

    这世界上任何事情都是相对的,谁也没说Java绝对好C/C++绝对一文不值,就算Java足够好为什么就不能绵上添花呢?

    陈皓 :另外,关于哪个是后台,那个是前台,我觉得在手机上还分前后台,这个有点搞复杂了,求官方解释。在Android开者的原文中提到了游戏开发中的性能,并没有提到前后台。

    我个人关于Android系统中“Java前台C/C++后台”角色分工的提法,在我前面的回复里已经表达的很清晰了。就好比电视节目主持人和制作人的角色分工,知名主持人主持的知名电视节目,其内容和风格肯定是围绕主持人设计的,而为了完成这个节目制作人肯定也在背后做了大量工作。这是很通俗的说法,是我个人的说法,应该没有官方解释。

    陈皓 :关于iPhone的解摸体验,如果你有朋友在谷歌工作,你可以向他们咨询一下是什么情况。一个更有说服力的例子是,谷歌的工程师们现在是人手一台iPhone4,而不是Android。

    如果只用自己的产品,而排斥市场上的其他产品,那跟闭门造车有何区别?多接触其他产品,尤其是竞争对手的产品,多去发现别人的优点和自己的欠缺,才能更快的进步。这应该是市场共识了。谷歌在这方面恰恰做的很好。而且你这个例子也不能说明谷歌员工不重视使用自己的产品。

  26. 陈皓 :关于iPhone的封闭,我博文说了,想请从用户的角底上思考一下,而不是从程序员的角度。

    从用户的角度上思考,确实,他们不管什么系统什么硬件什么软件,只要能完成工作并且体验很好就OK。但iPhone只有一个型号,而用户的需求是千变万化的,比如有人喜欢物理键盘,有人喜欢4英寸以上大屏幕,有人想在手机上浏览Flash网页,有人想要真正的多任务在后台完成更多的工作,等等……单一型号产品固然有其优势,但它注定不是全部。关于iPhone的讨论,我就此打住,不再多言。人各有志,无需强求。

    1. 好像我的回复让有点让人不舒服,不好意思,不过我真是想和大家讨论一下。木有别的意思。不管怎么样,非常感谢谢你的评论。

  27. 我是说我就此打住关于iPhone的讨论。我只对Anroid感兴趣。对比对立二者容易引发宗教战,就像此前Java VS C/C++,Java VS C#一样。

    1. 嗯,技术人员容易搞这个。不过,我的确不想讨论语言。我想讨论的是对于手机这么一个特殊的终端,重要的不是语言和操作系统,而是用户体验。而目前的Android+Java因为过多地考虑了程序员的开发体验,返回忽略了用户操作体验。

  28. 不用想得那么复杂,android支持C\C++开发,只是为了游戏开发能压榨出硬件的极限性能,达到IPHONE的游戏水平,毕竟游戏是最大的应用

  29. 个人觉得,ORACLE对java的态度是主要原因,当然我想Google也同时考虑到了效率已经开放的问题。
    Android作为一个基于不同处理器的平台,处理兼容性确实是一个不小的问题。 虽然说产品最终决定于用户,但,产品总是需要程序员来开发的,考虑考虑程序员的态度也是没有错。
    另外说到开放的问题,现在有很多c/cpp的程序员,其中有很多是资深的精英程序员,因为各种各样的原因,他们不使用java。Android不提供c/cpp的sdk,其实也是很可惜的将这些精锐排除在外。

  30. @陈皓
    Google员工大部分用iPhone是由于iPhone体验更好?这个就扯淡了。更真实的情况是,拿到iPhone比拿到最新的Android手机更容易——由于国情最好的Android手机通常都进不了中国市场。作者先弄清楚事实再给出结论比较好一些。

  31. Mine :
    android的app用java,更重要的是可以在不同的芯片上跑(比如arm, mips)。
    假如用C/C++了,之前的NDK只支持arm,虽然在大多数用arm的手机上能跑了,但在其它非arm的device上还是跑不了。

    你不是在开玩笑吧?NDK只支持ARM,你的APP在MIPS上怎么跑?再说了只要不使用汇编,C/C++的可移植性也很强,只需要用相应的交叉编译工具重新编一份就完了。别拿java的跨平台性当宝,多得是不能跨平台跑的java程序

  32. @陈皓
    提到用户体验, 就很明显了, 使用 objc 的 iphone3GS (600MHz) 比使用 java 的 HTC Hero (android 2.2.1 + 600MHz OC to 691MHz) 还要流畅, 单单在 home 的流畅度并没有太大差别, 但是在这之下的 hero 运行 apps 速度都明显低 objc 一个档次, 为啥? hero cpu (OC) 还比 3gs 高一点, 为啥还是不流畅?

    再说一个跨平台 (java 程序员最爱的特性), android 跨平台想跨去哪? win 下跑 handcent? 跑 twitter for android? 扯淡吧…
    android 只要特工一套 api, 只要厂商保留这些 api, c 一样可以跨 android, android 的 apps, 就留在 android 吧

    “原文说这样可以利用到最好的硬件性能,那么为什么要利用最高的性能?”
    只说一点就够了, 游戏, 试问现在哪个大作是 java 写的? 大部分用户买手机的期望是什么? 通信 + 娱乐 (上网, 游戏, 听歌, 看电影), 如果舍弃了娱乐功能, 买 android 作甚? 一部 nokia 几百块钱黑白屏的可以长时间待机

  33. @陈皓
    这帖应该归底不是讨论java和cpp的.应该是抽象字节码PK本地机器码.我认为抽象字节码代表未来.就像微软的.net;苹果的llvm.还有android的jvm-jit技术.
    语法和编译技术的改进终究会抵消性能上的差距.并带来更多的逻辑优化和异构执行能力.

  34. 诶?难道gcc等众编译器不是各种平台都有?要说源码级跨平台,有谁比得上gcc?

    我看google早就想支持c/c++了,因为g公司是著名的喜欢用c++的公司。只不过是精力和规划问题,只能先支持战略意义更重要的Java了。如今来说一个平台如果只支持一种语言一种范式开发,本来就是不好的。iOS再不努力,只支持objc/c/c++,恐怕也要吃亏

  35. Take a close look at NDK again before drawing your conclusion. Application full life cycle can be implemented in c/c++ starting from NDK r5 but apps are still running inside VM. (check out docs/CHANGES.html from NDK).

  36. Actually, one of the most important reasons implementing native code callbacks is to help game developers to port their favorite game/graphic engines over to Android. Performance is just one reason that game developers prefer C/C++ over Java. Most state of the art game/graphic engines are started since late 90’s to early 2000’s, when hardware and Java are just far from mature enough and ready for games. This keeps game developers still considering C/C++ being a better choice.

  37. 要看到android的改变,从1.5版本到现在2.3,android在性能上已经提高很多。google在做着更多的支持和优化。虽然目前从游戏上还不如iphone的体验效果好,我觉得这只是时间问题,和开发人员的培养,毕竟iphone商店的程序审核要求比android严厉的多。

  38. 假如說操作系統只可以用C開發,突然能用彙編開發,你會有什麼感覺么?
    不會有什麼感覺。因為你根本就不會去用彙編作為工作語言。
    那麼一個原本只允許Java的平台,現在允許C/C++了,作為Java程序員,你會有什麼感覺么?沒有。不過哪些力挺C/C++的程序員“得意”了:“看,現在支持C/C++了~“。
    語言上的爭論沒什麼意義,對用戶來說不是什麼重點,你會關心你的機頂盒裡面用的是什麼語言么?
    話說回來,假如你關心的是語言所關聯的平台特性的話,那麼就更加沒有什麼懸念了,開放平台缺乏吸引大量普通用戶的能力的話,嘗試下封閉平台的一些特徵有什麼問題呢?
    對於程序員來說只是增加了一種選擇,或者把更多的程序員拉攏進來,沒必要那麼酸溜溜的。

  39. 苹果的成功是有粉丝,和所谓的平台关系不大,如果让apple弄android,一样可以做的和现在ios的效果一样,理念不同。

    1. 我很喜欢这条回复。我们不妨分析一下他们之间的理念有什么不同?我以为,Apple关注的是用户体验,Apple应该是一个Design Driven的公司。Google关注的是程序员更多一些,其更多的是一个Engineer Driven的公司。

  40. 我觉得是基于开放平台思考的,所以用Java;而为了提高程序效率所以支持C。我不认为这两项冲突。
    请不要因为只考虑前者就认为这是开发者至上的想法,当前Java执行效率已经越来越高了,虽然和C还差不少,但已经可以忽略了。

    外行人看法。

    而且Android一直都支持C的吧好像?

回复 Coco 取消回复

您的电子邮箱地址不会被公开。 必填项已用*标注