梁大路
梁大路
  • 发布:2017-07-19 17:39
  • 更新:2017-07-19 17:39
  • 阅读:3231

关于nativejs和5+SDK的区别

分类:5+ SDK

时隔一年多,我对这个框架还是有点迷迷糊糊,希望记录一些对自己也对大家有帮助的东西

native.js,这玩意就是对android原生一些接口方法的封装,可以理解为讲原生的java类和js的类对应起来,这样就可以在js里面调用java的代码了。这么说还是有点模糊,换个说法,官方把android的类封装好了,然后创建了一个js库,只要创建js对应的android类就可以调用原生的android类和方法,注意!!!只能是android原生存在的,他实际应该算是映射的

而5+ sdk,则是需要离线打包,相当于(从根本上就是)自己写一个类,然后用js去调用,和上面的区别在于这里类是可以自己实现,并不是android内部原生的类

native :js<---->映射<---->android原生类
5+sdk :js<--->桥<--->自己实现的类

有关效率
http://ask.dcloud.net.cn/question/4142
楼中有位哥们儿给出了答案,5+sdk效率更高些,js仅作信息传递用,java部分运行java的
之前native实现表达确实不清楚,这里的映射本质应该也是桥,不过为了做区分就不改了

2 关注 分享
Trust GraceLeeau

要回复文章请先登录注册

梁大路

梁大路 (作者)

回复 DCloud_heavensoft :
其他原生API – Native.js

原生API在iOS和Android上各自有40多万,有些API并不常用,而且不具有跨平台特性,比如ios的game center api。太多的API封装到HTML5plus里,会过多增加runtime的体积,但若有需求要使用这些api又很麻烦。
我们有一项突破性的技术来解决上述烦恼—Native.js,一种把40w原生API映射为JS API的技术。


http://ask.dcloud.net.cn/docs/

你们官方文档,nativejs仅用于原生API映射为JS API,是原生,并不是自己实现的!
2017-07-20 09:39
梁大路

梁大路 (作者)

回复 DCloud_heavensoft :
你说的开启个腿推送
var pushManager = plus.android.importClass("com.igexin.sdk.PushManager");
var context = plus.android.runtimeMainActivity();
这里的类内部并不是自己实现的,而仅仅是调用,和我说的“并没有native自己实现类部分,都是调用android内部”并没有错,native并不能自己取实现一个类的内部方法
2017-07-20 09:35
梁大路

梁大路 (作者)

回复 赵梦欢 :
同感,http://ask.dcloud.net.cn/question/4142,不过我想要的答案找到了,5+sdk的效率更高
2017-07-20 09:28
梁大路

梁大路 (作者)

回复 DCloud_heavensoft :
我没弄错啊……我一直都在说5+sdk啊,是你以为我在说html5+……你仔细看我文章……不仅原文,我在和你讨论中的表达也说了sdk几个字……你一直没注意……
你说的开启个腿推送
var pushManager = plus.android.importClass("com.igexin.sdk.PushManager");
var context = plus.android.runtimeMainActivity();
我没看出这段和我说的nativejs是做桥或者说对原生类进行封装后调用有什么差别
2017-07-20 09:26
DCloud_heavensoft

DCloud_heavensoft

回复 梁大路 :
在http://ask.dcloud.net.cn/article/114搜“开启个推推送功能”。
你理解错一个概念,HTML5+和5+sdk是2个东西。HTML5+规范是指:http://html5plus.org/doc/h5p.html 这里的规范。这个规范是跨平台的。5+sdk是用于原生应用内嵌的sdk,这个当然是分平台的。
2017-07-20 07:05
赵梦欢

赵梦欢

native.js 本质上还是利用了JsBridge作为桥,然后利用反射机制,通过类名就可以加载类,即实现了通过js 去调用原生方法,当然也应该还利用了反射之外的技术,参考:http://ask.dcloud.net.cn/question/4142。5+ sdk 则是在原生层执行关键代码,js 层只是一个发信和回调收信的过程,主要依赖于各种插件实现不同的功能,相对于native.js 灵活性更好,执行效率也更高。
近期在segmnetfault上有一场讲座:[html5+ App开发之 Android 平台离线集成 5+ SDK](https://segmentfault.com/l/1500000010042078?r=bPqXdU),欢迎前来围观。
2017-07-19 22:57
梁大路

梁大路 (作者)

回复 DCloud_heavensoft :
http://ask.dcloud.net.cn/docs/#//ask.dcloud.net.cn/article/104
开发HTML5+ 功能扩展

开发者可以使用原生语言调用HTML5+ SDK,扩展HTML5+ runtime的功能,并打包成手机应用进行发布。
开发者还可以将开发完成的新功能编译成静态库或者jar包分享给其他开发者,让HTML5+获得更丰富的能力。

开发方法和步骤请参考文档:

IOS平台第三方插件开发指导
Android平台第三方插件开发指导


这是你们原文,如果要写拓展,根本做不到一次两平台,你们官方都给了不同的打包方法和插件开发方式
2017-07-19 20:54
梁大路

梁大路 (作者)

回复 DCloud_heavensoft :
http://ask.dcloud.net.cn/article/114
这篇文章我看了,并没有native自己实现类部分,都是调用android,或者说映射android原生类你的说法并不准确,
2017-07-19 20:44
梁大路

梁大路 (作者)

回复 DCloud_heavensoft :
5+sdk怎么可能写一次两个平台运行?你们官方的例子都不敢那么说啊
自己的原生类?你这个表达有问题吧,原生类是android的,不是自己的,nativejs根据你们的文档,并不能自己写,而且官方封装了映射,如果这个表达没错的话,我原文的说法并没有错啊
2017-07-19 20:42
DCloud_heavensoft

DCloud_heavensoft

HTML5+是跨平台的封装,写一次,2个平台均可运行。而Native.js是映射原生类,需要为不同平台写代码。自己的原生类也可以通过Native.js调用,离线打包在一起就可以。比如http://ask.dcloud.net.cn/article/114这里有对个推的操作示例。
2017-07-19 18:29