登录 立即注册
安币:
楼主: 皮皮酱
打印 上一主题 下一主题

重庆时时彩倍投方案| Android ShareSDK桥接技术

[复制链接]

70

主题

70

帖子

671

安币

代码手工艺人

Rank: 4

跳转到指定楼层
楼主
发表于 2018-6-12 15:30:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本文来源:http://www.oneupabq.com/a/www.itaiwannews.cn/

重庆时时彩独胆倍投 www.oneupabq.com,新版“阿尔法围棋”,以Master这个账号,在网站上横扫中韩等国顶级棋手。  人工智能无疑正试图模仿并超越人类智慧,这是它自始至终的设计核心,但并不是它的“人生目标”。

如果对本篇文章感兴趣,请前往,原文地址:/a/blog-944804-77988.html

ShareSDK本身基于android原生上集成使用的,但是为了能让广大开发者可以在各种引擎上使用ShareSDK,ShareSDK采用了跨语言的桥接技术,使得ShareSDK可以在游戏和网页引擎上使用,本票文章主要介绍下三种桥接技术的核心要点。我们知道,两种语言交互,相互调用、传参,接收执行结果等等动作,不外乎在于两个api,(1)主动去调用其它语言的某个方法;(2)接收方法执行的结果两种情况;方法执行的结果,主要又分成两种情况:一种是同步回调;一种是异步回调(也就是需要等待结果回来)。同步回调,也就是我们我们常用的return;异步回调,也就是平时所谓的各种监听,比如异步请求回调结果监听,或者常用的各种listener。比如使用A语言去调用B语言,通信结构图如下:![图片描述](/data/attachment/album/201806/12/152053nhp7p7q7iqokomop.png)OK,看到这个图是不是觉得非常简单,这些引擎,可能有些用户觉得这样是不是很麻烦,其实这些都有现成的api可以调用,现在来每个具体讲解下:一、Unity For ShareSDK:ShareSDK脚本开发语言主要是使用C#,直接步入正题,Unity是有一个java的支持包,叫做classes.jar,一般是在Unity安装的目录:Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Development\Classes 下面,这个就是Unity和Android交互的核心包,也是Unity提供的桥接部分,这部分支持启动时候的逻辑处理和java往C#层传递数据;里面总共没几个类,做过Unity的开发者如果反编译过游戏的apk,就会知道,启动(launch Activity)activity肯定是UnityPlayerActivity,如果需要在启动的时候执行什么初始化操作,可以重新继承UnityPlayerActivity,然后在AndroidManifest.xml下面去注册,这样Unity就会使用你自己写的这个启动类。接下来直接上代码,看下Unity里面是如何调用java的:在C#层,Unity同样提供了一套调用android的api,其中有一个类AndroidJavaObject![图片描述](/data/attachment/album/201806/12/152109f2c92ihxx8viu8ka.png)首先要找到需要调用的类,然后传当前挂载脚本的那个物体(Gameobject),此处可以理解成相当于物体和代码绑定初始化的一个过程,最后一个是回调的方法名字(此处使用的callback),得到的实例后,可以通过Call和CallStatic方法去调用非静态方法和静态方法,如果方法是带返回值的,则可以使用类似Call 、CallStatic去调用;![图片描述](/data/attachment/album/201806/12/152131q996ovl0okz2weqw.png)![图片描述](/data/attachment/album/201806/12/152135v05c0x14kxk15p5v.png)上面创建AndroidJavaObject的时候传的callback,java层回调给C#的时候需要把这个Gameobject,Callback方法名字和传参发送回来,C#就会去找对应的方法去执行;Java回调,![图片描述](/data/attachment/album/201806/12/152149ensssu5ml7dvp7zj.png)C#接收回调的方法:![图片描述](/data/attachment/album/201806/12/152208f5hizfzlyu4x5u3q.png)具体详细代码可以参考:https://github.com/MobClub/New-Unity-For-ShareSDK二、Cocos For ShareSDKCocos引擎和Unity的使用非常相似,同样是有一个Cocos提供的Android依赖库,在Cocos框架的安装目录下,大致目录如下:\cocos\platform\android\java\,下面有一个基于ant项目结构的Android Library,现在普遍使用Android Studio,所以开发者可以自己新建一个AS Module,把src下面的源码复制到src>main>java下面就好。然后cocos项目依赖它。同样,它也有一个启动Activity,Cocos2dxActivity,Cocos-Android项目的启动activity需要继承于它,在里面做一些初始化操作。Cocos和java交互,其实就是用到了native层的jni语法,先通过JniHelper::getStaticMethodInfo传递类路径 名字,方法名字和传的参数,判断这个静态方法是否存在,返回一个bool类型,同样,非静态方法则使用getMethodInfo,![图片描述](/data/attachment/album/201806/12/152227a6da1lgrv1v9g080.png)![图片描述](/data/attachment/album/201806/12/152232u55wwlr0lyr9x9y9.png)对于jni的字段描述符,网上有很多,可以参考,下面这个表![图片描述](/data/attachment/album/201806/12/152254l8caffdt8eg22fto.png)取自:http://fgsink.blog.163.com/blog/static/16716997020124310169911/如果这个方法存在,正式去调用:通过CallStaticVoidMethod或者CallVoidMethod,![图片描述](/data/attachment/album/201806/12/152311fmbtk3u3znbw3ccm.png)JniMethodInfo对象的引用,函数执行中会把jniEvn、classid、methodid写入到引用中,如果方法是带返回值的,则可以这样调用带数据类型的方法:![图片描述](/data/attachment/album/201806/12/152328sd14x89f0id78666.png)接下来再看下C  层封装给java的回调方法调用语法![图片描述](/data/attachment/album/201806/12/152336q32rmr3mmvzrmzwv.png)JNICALL Java_包名类名路径_方法名,如果包名有分层,每一层的点用下横杠表示”_”;C  层定义的回调方法,在java层需要这样定义![图片描述](/data/attachment/album/201806/12/152352psljsr2q0xs2l6s0.png)通过回调包里面的方法去调用,使之在GLThread执行![图片描述](/data/attachment/album/201806/12/152405fjiq5i5i43zfk34h.png)因为Cocos是基于OpenGL平台,Android下与它交互需要使用一个GLSurefaceView,然而GLSurefaceView有它自己的渲染器,这个渲染器是运行在一个和AndroidUI线程的子线程上,所以需要使用GLThread,这样就可以把数据抛回去给C  层;详细代码可以参考:https://github.com/MobClub/New-C2DX-For-ShareSDK三、JS For ShareSDKJS和Android交互,大部分的开发者应该都有用过,网上也有很多,所以这边粗略讲一下就好。交互的基础其实是限制于Android原生的WebView上使用。整个核心其实就是用到了JSInterface方法加上@JavascriptInterface注解,优化兼容问题,webview有个JSInterface方法,可以让js直接调用java,先向js层声明这么一个接口,定义一个String,![图片描述](/data/attachment/album/201806/12/152422jwbowwsdkbzaru6z.png)JS调用的时候使用window.JSInterface.方法名,就可以调用到java层的方法![图片描述](/data/attachment/album/201806/12/152438qbcnz0ewezuezznb.png)同时在回调的时候给回callback参数,可以识别到JS的回调方法,进而去触发它:![图片描述](/data/attachment/album/201806/12/152455axb6epgfbkb51h1y.png)拼接时注意传递的格式以及参数![图片描述](/data/attachment/album/201806/12/152512xdt2u6kj4lhujb8u.png)此时和Unity、Cocos不同的一个地方,JS的return也是通过封装好回调参数后,使用异步的方式抛回去的,![图片描述](/data/attachment/album/201806/12/152542g9fi7wth8w777ahz.png)![图片描述](/data/attachment/album/201806/12/152548ped93zqbqllr7037.png)详细代码可以参考:https://github.com/MobClub/New-JS-For-ShareSDK  继续阅读全文



想在安卓巴士找到更多优质博文,可移步博客区

如果对本篇文章感兴趣,请前往,
原文地址:
/a/blog-944804-77988.html
分享到:  QQ好友和群 QQ空间 微信
收藏收藏 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站长推荐

通过邮件订阅最新安卓weekly信息
上一条 /4 下一条

下载安卓巴士客户端

全国最大的安卓开发者社区

重庆时时彩独胆倍投广告投放| 下载客户端|申请友链|手机版|站点统计|重庆时时彩独胆倍投 ( 粤ICP备15117877号 )

快速回复 返回顶部 返回列表
小说 小说 小说 小说 小说 小说
小说 小说 小说 小说 小说 小说
小说 小说 小说 小说 小说 小说
湖北11选5前三走势图 甘肃11选5开奖一定牛 北京赛车庄家如何做假 七星彩玩法 快赢481
江西多乐彩11选五最新走势图 云南时时彩玩法 安徽新十一选五 北京赛车pk10 pk10北京赛车论坛