java易上手,开发者学习成本低。随着Android的用户越来越多,问题暴露的也越来越多,在没有一个好的成本低的语言来替代它之前,只能先用着。
事实上java正是安卓吊的地方,在安卓诞生的时候(2009年~2010年),做手机app大多用C++和功能弱鸡阉割到不行的J2ME,iOS的OC也不是现在这个样子的,很多后面好用的特性都还没出来(ARC、队列、Block、Xib等等)。
日本某大厂做Symbian手机的部分模块,代码全是Symbian C++的,写起来超级繁琐,而且没有兼容性,每个机种都要重新单元测试,部分不兼容功能要重新开发。而且最要命的是,APP代码是链接系统的,而当时Symbian又没有类似NDK的库,所以每次编译APP都要重新编译一下系统,然后把系统镜像烧到模拟器上再调试。改了一行代码,调试一下,时间不长,也就3个小时吧。
然后HTC的Hero和G1出来了,该大厂看着觉得很不错,也要做一个安卓手机试水,我记得叫Sabaro吧(可能是内部编号),于是拉了个团,集体培训安卓,我当时去学了下,一看不得了,卧槽,这系统的APP开发简直太简单了好不好,我之前用Symbian C++写个计算器要近万行代码,安卓特么几百行代码就完了,用XML配置资源简直是神来之笔,Java语言简直简单得不要不要得,说Java烦得肯定是没写过C和C++的大项目,我特么汇编都不觉得烦,Java这点算个球。
几年后,诺基亚脑残去搞了个Meego,N9我还买了个,当时还挺喜欢的,因为Debian的缘故,然后回家一看到开发APP用Qt,呵呵,我就知道没戏了。(额,有人问Qt的事情,这没贬低Qt的意思,跨平台桌面库肯定还是选Qt,但那会儿开发手机App用Qt很蛋疼)
再说件趣事,我发现C++组里的秃顶率是99%,剩下的1%是我这个弱鸡,甚至一个长得很可爱的妹子都秃了。。。然后再看Java组里的秃顶率是0%,0%好不好!!
于是有机会从Symbian转安卓的时候,为了脑门日渐稀少的毛发着想,我果断把握住了时代的脉搏。
很高兴回复
本身安卓语言底层是java开发,而java底层是c、c++ 所以说白了安卓底层是c也对
这就是历史的选择,当年Android为了拉拢更多的开发者建立生态选择了Java语言,现在全套API和设计以及生态都在这个环境下,即使把Java语言换成Kotlin兼容性这么高的操作,要普及所有App可能还要几年,更别说另起炉灶把现在的开发者全部抛弃掉。
此外,我认为Android出现“卡”的问题,一方面是UI层面对物理模拟的高性能API提供不足,导致很多效果动画需要开发者自己实现。另一方面是开发者不按标准开发程序,都想在后台占用CPU导致的。从绝对性能来看,Android机型的CPU性能也是不如同时期iOS设备的。
而题主认为去掉Java的整套Runtime就能提高性能我认为也是不成立或是弊大于利的。从软件优化角度来讲,这套VM运行环境性能也没有想象的弱,在Server级别,现在普通开发者开发的Java程序不考虑内存占用的话,不一定比水平一般cpp开发者写的程序性能弱,对于GC算法,目前也有低延迟的算法可供提供和推广。目前Android设备普遍内存较大,对VM可能多占用的内存也有很好的补充。
退一万步说,程序中真的存在某一块计算密集型的程序造成的热点且在Java层面不可能优化的话,开发者也可以提供native的高性能模块供Java层调用。事实上,考虑到增加反编译的门槛和难度以及跨平台的复用性,目前很多App的核心模块都是native实现,您可以随便解包一个apk软件,您可以发现大多数App都提供了跨多个CPU的so库,这些库模块就是开发者针对该App的native代码编译后的结果(这些文件类似于Windows上的dll文件)。