本文介绍了在hiapk网的一个贴子《今天突然知道了一件事,让我彻彻底底的否定了milestone和android的前途!》,引发精彩的大讨论。

今天突然知道了一件事,让我彻彻底底的否定了milestone和android的前途!

那就是android软件竟然用java开发,这不是自寻死路吗。不知道android开发者是怎么想的,java那个垃圾得,脑残了,竟然不用C++,java写的烂东西怎么能和NOKIA的C++的QT相比呢。唉,就此一点就彻底否定了android,失败是迟早的事。

在众多无知的,自娱自乐的安饭的攻击下,我回去恶补了一下android的知识,结果发现google自己搞了一套什么所谓的Dalvik virtual machine。那个设计垃圾得。绝对不是吹,我拍脑袋都能想出来。唉,就那个架构,还开发3D游戏,还开发桌面级的应用,歇吧,等NOKIA的symbian3, MS的WP7出来了,让你Android看看什么叫应用,倒时候可把你的眼睛睁大了!

java的效率很低啊。而且现在程序高手一般都讨厌java,其实他们看不起java也是有道理的,java真的很垃圾。相信我,希望MOTO早点醒悟吧,不要在android上投入太大,还是多在WP7和SB3上下点功能吧。android的SDK是java开发的,这个没有错啊。我今天刚看了andorid的开发方式,唉,都看不下去了,一看到eclipse,java就伤心啊,google那帮人怎么会想到用java呢。天啊,这不是自掘坟墓吗,多好的linux内核,就被遭塌了。

技术先进的不一定有市场。

想当初比windows系统技术先进的多了,可现在呢。

市场决定一切。

纯语言而言,JAVA的执行效率确实不如C++。 但这只是一方面,现今的硬件资源已经很充裕了, 牺牲一点资源消耗,从而获得架构、安全、扩展、健壮等方面的优势难道不更好么?更何况如果runtime做得好的话,除了资源占用大点,效率方面基本没什么损失……net不就是这样么,加载的时候慢点,运行的时候并不慢。而且android应用运行环境并不是Sun Java。所以楼主说法是没有根据的,如果有请拿出数据来。

另外,再复制一大堆东西给LZ看看,虽然现在NDK不是很完善,但难保以后会怎么样,JAVA和C/C++同时开发三方应用?呵呵。

1、前言

6月26日,Google Android发布了NDK,引起了很多发人员的兴趣。NDK全称:Native Development Kit。下载地址为: http://developer.android.com/sdk/ndk/1.5_r1/index.html。

2、误解

新出生的事物,除了惊喜外,也会给我们带来一定的迷惑、误解。

2.1、误解一:NDK发布之前,Android不支持进行C开发

在Google中搜索“NDK”,很多“Android终于可以使用C++开发”之类的标题,这是一种对Android平台编程方式的误解。其实,Android平台从诞生起,就已经支持C、C++开发。众所周知,Android的SDK基于Java实现,这意味着基于Android SDK进行开发的第三方应用都必须使用Java语言。但这并不等同于“第三方应用只能使用Java”。在Android SDK首次发布时,Google就宣称其虚拟机Dalvik支持JNI编程方式,也就是第三方应用完全可以通过JNI调用自己的C动态库,即在Android平台上,“Java+C”的编程方式是一直都可以实现的。

当然这种误解的产生是有根源的:在Android SDK文档里,找不到任何JNI方面的帮助。即使第三方应用开发者使用JNI完成了自己的C动态链接库(so)开发,但是so如何和应用程序一起打包成apk并发布?这里面也存在技术障碍。我曾经花了不少时间,安装交叉编译器创建so,并通过asset(资源)方式,实现捆绑so发布。但这种方式只能属于取巧的方式,并非官方支持。所以,在NDK出来之前,我们将“Java+C”的开发模式称之为灰色模式,即官方既不声明“支持这种方式”,也不声明“不支持这种方式”。

2.2、误解二:有了NDK,我们可以使用纯C开发Android应用

Android SDK采用Java语言发布,把众多的C开发人员排除在第三方应用开发外(注意:我们所有讨论都是基于“第三方应用开发”,Android系统基于Linux,系统级别的开发肯定是支持C语言的。)。NDK的发布,许多人会误以为,类似于Symbian、WM,在Android平台上终于可以使用纯C、C++开发第三方应用了!其实不然,NDK文档明确说明:it is not a good way。因为NDK并没有提供各种系统事件处理支持,也没有提供应用程序生命周期维护。此外,在本次发布的NDK中,应用程序UI方面的API也没有提供。至少目前来说,使用纯C、C++开发一个完整应用的条件还不完备。

3、NDK是什么

对NDK进行了粗略的研究后,我对“NDK是什么”的理解如下:

1)NDK是一系列工具的集合。

NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk。这些工具对开发者的帮助是巨大的。

NDK集成了交叉编译器,并提供了相应的mk文件隔离CPU、平台、ABI等差异,开发人员只需要简单修改mk文件(指出“哪些文件需要编译”、“编译特性要求”等),就可以创建出so。

NDK可以自动地将so和Java应用一起打包,极大地减轻了开发人员的打包工作。

2)NDK提供了一份稳定、功能有限的API头文件声明。

Google明确声明该API是稳定的,在后续所有版本中都稳定支持当前发布的API。从该版本的NDK中看出,这些API支持的功能非常有限,包含有:C标准库(libc)、标准数学库(libm)、压缩库(libz)、Log库(liblog)。

4、NDK带来什么

1)NDK的发布,使“Java+C”的开发方式终于转正,成为官方支持的开发方式。

使用NDK,我们可以将要求高性能的应用逻辑使用C开发,从而提高应用程序的执行效率。

使用NDK,我们可以将需要保密的应用逻辑使用C开发。毕竟,Java包都是可以反编译的。

NDK促使专业so组件商的出现。(乐观猜想,要视乎Android用户的数量)

2)NDK将是Android平台支持C开发的开端。

NDK提供了的开发工具集合,使开发人员可以便捷地开发、发布C组件。同时,Google承诺在NDK后续版本中提高“可调式”能力,即提供远程的gdb工具,使我们可以便捷地调试C源码。在支持Android平台C开发,我们能感觉到Google花费了很大精力,我们有理由憧憬“C组件支持”只是Google Android平台上C开发的开端。毕竟,C程序员仍然是码农阵营中的绝对主力,将这部分人排除在Android应用开发之外,显然是不利于Android平台繁荣昌盛的。

uiiang

我就是做JAVA开发的,楼主说JAVA的效率比C++低,确实是这样。不过现在的CPU和内存等等各方面机器性能越来越快,这种效率上的差别只是理论上的数据罢了,没有专业的评测软,已经很难看到这种效率上的差别。

另外有一点很重要的就是,手机也好,电脑也好,不论操作系统做的多好,多炫,最重要的是软件的支持。

没有广大软件开发者的支持,没有众多的软件,再好的系统也白搭。

JAVA和C++相比,执行效率上是有些差,但是JAVA的入门门槛比C++低,可以吸引更多的开发者,这一点非常重要。

学习和精通C++的成本实在比JAVA要高太多了。

haniklz (精彩的在这里****************)

现在还停留在哪个语言好这种层次上的话,你确实应该认真学习一下了。

java很差?你问问你老师看看。

为什么android为选择java?就看到执行效率了吗?有没有想过什么叫开发效率。

android短时间内3w应用java可谓功不可没。android如果仅仅是linux那么简单,最终可能也就落得和形形色色的linux移动发行版一个下场。

同样的绚丽的界面,用C语言开发可能耗时几个月,发现菜单还没做好,java语言几个小时搞定。

如果一定要追求效率为什么不直接arm汇编开发好了。

微软的wp7已经确定没有原生c++开发,也是基于。net的托管代码,原因?具有虚拟机层有很多好处,很重要一点就是安全性。开发的发展最初是C+汇编,现在除了在特定领域(比如驱动开发)还有人用汇编吗?

开发难度当然是越低越好,你问问现在业内的开发人员,谁愿意做symbian的程序开发烦不烦?我们公司同样的程序在两个平台同时开发,symbian平台用了半年,android只用了不到3个月就进入测试期,如果不是仗着nokia的推广,明天symbian可能就不存在了。

好吧,告诉楼主一个残酷的消息,qt程序的效率可没有你想的那么高R。

android的虚拟机做过一定改进,是基于寄存器而不是基于栈的虚拟机,每个进程单独有虚拟机,版本路线图中未来也会加入jit,如果楼主还停留在十几年前的java的运行效率的认识上,那就太失败了。多学习下,如果lz是业内人士的话,少点浮躁情绪,对你以后的发展有好处。

另外提句NDK里面一直都有openelgs库。jni调用即可。android为什么会采用java + c开发模式,google的架构师懂的比你多,他们对这些的分析和权衡恐怕不是你一句java是垃圾得来的。

还有现在不是硬件不够,而是硬件过剩了。

c语言和java都用了很多年,说实话最看不起就是你们这些以为某某语言比某某语言高级的人了,每个语言都有它擅长的领域。比如你用c语言给我整几个web应用出来看看,看你会不会吐血。

最后再提醒楼主一句,就算你要比,你也得说是 编译型语言和解释型语言的区别啊,恐怕你就知道个C语言把……你让苹果的object c情何以堪,微软wp7上的c#情何以堪。

另外还有一点,ANDROID是支持C++开发的,google并没有完全封锁掉C++的接口。

语言是表现形式,比如我也可以做个编译器把java编译成机器码,把c编译成字节码 。

运行效率的区别是编译型语言和解释型语言的区别,上面的源代码何种形式并不是对效率的决定因素 。

还有个重要的方面就是架构问题,qt只是图形库而已,其效率并不一定被android的图形库效率高 。

android的设计并不是为单一硬件平台,而是未来可能根本无法想象的各种硬件,如果不是采用了java虚拟机,今天的android恐怕只有htc那几台机器在运行而已,其他厂商更是在忙于调试中吧,再等个三五年才上得了。

可以说不是java的话,android早就挂了,还谈什么未来。

如果还在质疑android现在的开发模式性能不达标,建议去装个雷神3的移植版。

然后你再找一台可以按这个帧数运行的诺基亚程序出来。

milestone在硬件上最接近的机器,就是诺基亚的n900了,两者cpu/ram一样。n900的利于虚拟内存的因素,程序切换非常快。但可以看出雷神3在两者上的运行帧数相差并不大。

看着这个帖子, 曾经有一瞬间我恍惚以为到了CSDN, 又感觉是JAVAEYES

楼主像我们大一刚上课,刚听了第一节C语言课,听老师讲了C语言优点的小娃娃,可笑可笑。

虽然单纯从效率上讲,汇编< C < C++ < C# = java < F#

封装的越好,编程开发就越简单,但是效率会越低。

开发的难易程度与效率本身就是一对不可调和的矛盾。

按楼主那个幼稚逻辑,用汇编来做开发的手机系统,是不是前途无量啊?

除非与底层密切相关,或者是对效率要求苛刻,要不然C的那点优势就没有了。

哥哥…我做java的…目前java的大型系统远远超过C++,而且手机应用java是最好的,java可以几乎完美的跨平台,这样才能在多个厂商的机种中用同一软件 。

微软为什么会推出一个效率低的C#?就是看到自己MFC开发的难度,和java开发的便利。C#里面的托管完全就是java虚拟机的山寨版。

再说了,nokia要黄了才找的Qt,你知道什么?

总结一下,Android的成功就是基于java,7万的应用程序,java功不可没,java把数量庞大的pc的java 程序员拉入到嵌入式手机开发的大阵营。

Android的好玩也在于应用的很多很好玩,htc手机的程序放到TCL电视上都能运行,这就是跨平台的优势。

手机的硬件的多样化是pc完全不能比拟的,牺牲一点效率,换来5倍的开发方便,就是java做的了。

手机的cpu,即使是全部是arm,指令集也从arm7到arm9到 arm11到A8 ,而PC只是x86。

其他的系统也没有抽象出很高层的操作系统借口来给应用程序调用,而这个java虚拟机做了。

另外,android的虚拟机是谷歌自己优化过的虚拟机,不是sun公司的虚拟机,性能在优化中……

更多相关文章

  1. Android系统Surface机制的SurfaceFlinger服务渲染应用程序UI的过
  2. android应用程序基本原理
  3. Android中通过WebView控件实现与JavaScript方法相互调用的地图应
  4. IDEA搭建Android(安卓)wear开发环境,Android(安卓)wear,I'm commin
  5. Android(安卓)vector矢量图应用实例
  6. Android应用程序的快速启动是怎样炼成的?
  7. android如何开发流量监控软件
  8. Android(安卓)签名详解
  9. 开发 Standalone Android(安卓)Java 应用程序

随机推荐

  1. Android(安卓)Manifest之元素中文注释
  2. Android选项卡(TabWidget)应用
  3. Android(安卓)JNI char* 和jstring类型相
  4. Android6.0 Fix launcher3 crash when se
  5. Android一键锁屏开发全过程【源码+附图】
  6. Android中上传图片到服务端C#接收图
  7. Android(安卓)翻牌动画 实现
  8. Android中判断网络是否连接实例详解
  9. Android实现画虚线的控件
  10. Mac无法编译android