浏览 5695 次
锁定老帖子 主题:android 开发一点体会和未来展望
精华帖 (0) :: 良好帖 (4) :: 新手帖 (0) :: 隐藏帖 (1)
|
|
---|---|
作者 | 正文 |
发表时间:2012-07-12
观察下下载android上面的开发框架,大多基于 opengl + XXXengine 的模式,其中 opengl 展示能力强大,移植性好。但现在很多框架只是在现有 java 这个开发层面上走的更远而已,例如有自己的 texture管理,有自己的box2d 的 native 封装等等。 但java语言本身给应用开发带来的限制却始终存在,例如开发高效程序的时候 java 带来的一点点 gc 手机都会卡一下。 再比如 java 使用opengl的方式也仅仅局限在管道模式,无法使用更nb的shader模式,这就限制了很多nb效果的实现。java 的开发框架主要依赖对底层的封装,虽然可以在java中面向对象的摆弄这些底层的框架,但是交互性没有c++来的有效。例如box2d不能给底层注册listener,在游戏中频繁的加载和卸载图片的时候会产生gc。 我开发来十几款基于java的游戏,总的说来java本身还是易用的,但开发高质量的java程序一个很大的问题就是减少gc的产生,因为它会导致游戏thread的延迟,这时很不好的用户体验。由于java本身并不支持析构函数,完美的释放内存是不可能的,唯一减少gc的方法就是使用pool。如果说开发c++很痛苦,那么我要说把java写的和c++一样更加的痛苦,虽然你不需要考虑有可能发生的指针错误,但你时刻都要考虑各个pool中对象的数目等等,让你的游戏始终平滑的运行在手机上,这本身是件很耗神的事情。 所以我有了转变思路的念头,如果有一种native语言,像c++那样可以操作底层,并且像java那样面向对象,会不会带来开发效率的提升呢?这里我想到的是javascript。 不知道大家注意到没有现在很多跨平台的开发技术都使用了 html5 和js,例如 phonegap,acclerate,appcan。都具有上手容易的特点。其中我比较喜欢phonegap,喜欢它基于浏览器和插件的架构。但是它自身也有不足,依赖webview和浏览器。这里我不是说 phonegap 是开发的神器,我只能说它至少提供来一种思路,一个解决问题的尝试,至少在那些内存很大的,安装了含有google v8 engine 浏览器的手机上它是一个可选的快速开发手机游戏/应用的途径。但基于html5的开发本身还不成熟,可能还需要一段时间来完善。这里我想是不是可以沿着phonegap的思路继续挖掘,实现一个 v8enging + js + openglnative + 其他插件 的开发环境呢? v8engine如同java虚拟机,如果google自己的介绍所言非虚,那么它的js执行性能至少不会比java差。再者js在v8engine的帮助下可以编译成nativecode,而java就没这个本事了。 js 完成所有控制逻辑, opengl 提供展示支持,这里我并不喜欢 acclerate 的基于系统 native view 的实现方式,我觉得这个对系统依赖太强,移植性不好。另一方面,系统view对ui的展示都差强人意,如果做游戏开发,增加点粒子效果或者是复杂动画真不知道是否能够搞定。所以即使 acclerate 高质量的实现了对系统 view 的封装,我也不认为比现有的 view 有任何高明之处。反倒是依赖opengl,未来可能出现nb的粒子/ui/控件等实现插件,把他们当作组件集成进来可能更好。 用js很难搞定的事情可以使用c++或者是java开发的插件来弥补。 最终效果就是使用js来完成逻辑调用,作为胶水层。复杂一点的逻辑依靠插件来实现。架构: 框架包装层(实现网络通讯,本地序列化接口,jsengne) + 资源包(图片/声音/或者虚拟文件系统) + c++(实现复杂运算)/java插件(系统交互?现有代码的移植?) + js控制脚本。 可以快速开发,同时也拥有类似html5那种内容的替换能力。即便程序发布后也可以通过替换组建的方式来更新,而不需要更新整个apk。 大家感觉这个靠谱吗?或者说我描述的东西已经存在了?欢迎拍砖。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2012-07-12
hurry07 写道 所以我有了转变思路的念头,如果有一种native语言,像c++那样可以操作底层,并且像java那样面向对象,会不会带来开发效率的提升呢?这里我想到的是......
我想到的是GO,可惜楼主说的是JavaScript,实在不解,为什么是JavaScript? |
|
返回顶楼 | |
发表时间:2012-07-13
好像有种技术叫Renderscript,可以用来渲染3D(我想游戏也可以用),不过好像不是太流行,我的手机也不支持。
另外,好像WebGL就是用JavaScript控制OpenGL,不知道Android是否支持。 |
|
返回顶楼 | |
发表时间:2012-07-14
我觉得随着手机硬件的发展,JAVA的GC根本不是事。目前的话,也许可以优化下针对手机的GC策略
|
|
返回顶楼 | |
发表时间:2012-07-16
hardPass 写道 hurry07 写道 所以我有了转变思路的念头,如果有一种native语言,像c++那样可以操作底层,并且像java那样面向对象,会不会带来开发效率的提升呢?这里我想到的是......
我想到的是GO,可惜楼主说的是JavaScript,实在不解,为什么是JavaScript? go语言现在还不能运行在 android上,js是一个简单的语言,有广泛的支持,语法灵活狠适合做中间层。 另外我对新语言go有点抵触,我觉得纵使语言理念不同,为什么要在写法上做那么的改变呢?又要学习一套语法。 |
|
返回顶楼 | |
发表时间:2012-07-16
风云无浪 写道 我觉得随着手机硬件的发展,JAVA的GC根本不是事。目前的话,也许可以优化下针对手机的GC策略
可以的呀,可是现在java和native的交互方式远没有c++好。不不反对继续使用java,但这个需要google自己投入更多支持。 |
|
返回顶楼 | |
发表时间:2012-07-18
楼主你这是要干掉Android,另立门户啊
|
|
返回顶楼 | |
发表时间:2012-07-23
为什么不考虑直接用C++开发,Android也支持C++开发啊。话说,如果要做游戏的话,微软的wp8可能以后会是更好的平台,直接可以移植XBOX啊
|
|
返回顶楼 | |