Android ShareSDK桥接技术

简介: ShareSDK本身基于android原生上集成使用的,但是为了能让广大开发者可以在各种引擎上使用ShareSDK,ShareSDK采用了跨语言的桥接技术,使得ShareSDK可以在游戏和网页引擎上使用,本票文章主要介绍下三种桥接技术的核心要点。

ShareSDK本身基于android原生上集成使用的,但是为了能让广大开发者可以在各种引擎上使用ShareSDK,ShareSDK采用了跨语言的桥接技术,使得ShareSDK可以在游戏和网页引擎上使用,本票文章主要介绍下三种桥接技术的核心要点。
我们知道,两种语言交互,相互调用、传参,接收执行结果等等动作,不外乎在于两个api,(1)主动去调用其它语言的某个方法;(2)接收方法执行的结果两种情况;方法执行的结果,主要又分成两种情况:一种是同步回调;一种是异步回调(也就是需要等待结果回来)。同步回调,也就是我们我们常用的return;异步回调,也就是平时所谓的各种监听,比如异步请求回调结果监听,或者常用的各种listener。比如使用A语言去调用B语言,通信结构图如下:
1

OK,看到这个图是不是觉得非常简单,这些引擎,可能有些用户觉得这样是不是很麻烦,其实这些都有现成的api可以调用,现在来每个具体讲解下:
一、Unity For ShareSDK:
ShareSDK脚本开发语言主要是使用C#,直接步入正题,Unity是有一个java的支持包,叫做classes.jar,一般是在Unity安装的目录:
EditorDataPlaybackEnginesAndroidPlayerVariationsmonoDevelopmentClasses 下面,这个就是Unity和Android交互的核心包,也是Unity提供的桥接部分,这部分支持启动时候的逻辑处理和java往C#层传递数据;里面总共没几个类,做过Unity的开发者如果反编译过游戏的apk,就会知道,启动(launch Activity)activity肯定是UnityPlayerActivity,如果需要在启动的时候执行什么初始化操作,可以重新继承UnityPlayerActivity,然后在AndroidManifest.xml下面去注册,这样Unity就会使用你自己写的这个启动类。接下来直接上代码,看下Unity里面是如何调用java的:在C#层,Unity同样提供了一套调用android的api,其中有一个类AndroidJavaObject

2

首先要找到需要调用的类,然后传当前挂载脚本的那个物体(Gameobject),此处可以理解成相当于物体和代码绑定初始化的一个过程,最后一个是回调的方法名字(此处使用的callback),得到的实例后,可以通过Call和CallStatic方法去调用非静态方法和静态方法,如果方法是带返回值的,则可以使用类似Call 、CallStatic去调用;
3

4

上面创建AndroidJavaObject的时候传的callback,java层回调给C#的时候需要把这个Gameobject,Callback方法名字和传参发送回来,C#就会去找对应的方法去执行;
Java回调,

5

C#接收回调的方法:
6

具体详细代码可以参考:
https://github.com/MobClub/New-Unity-For-ShareSDK

二、Cocos For ShareSDK
Cocos引擎和Unity的使用非常相似,同样是有一个Cocos提供的Android依赖库,在Cocos框架的安装目录下,大致目录如下:cocosplatformandroidjava,下面有一个基于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,

7
8

对于jni的字段描述符,网上有很多,可以参考,下面这个表
9

取自:http://fgsink.blog.163.com/blog/static/16716997020124310169911/
如果这个方法存在,正式去调用:通过CallStaticVoidMethod或者CallVoidMethod,
10

 JniMethodInfo对象的引用,函数执行中会把jniEvn、classid、methodid写入到引用中,如果方法是带返回值的,则可以这样调用带数据类型的方法:
11

接下来再看下C++层封装给java的回调方法调用语法
12

JNICALL Java_包名类名路径_方法名,如果包名有分层,每一层的点用下横杠表示”_”;C++层定义的回调方法,在java层需要这样定义
13
通过回调包里面的方法去调用,使之在GLThread执行
14

因为Cocos是基于OpenGL平台,Android下与它交互需要使用一个GLSurefaceView,然而GLSurefaceView有它自己的渲染器,这个渲染器是运行在一个和AndroidUI线程的子线程上,所以需要使用GLThread,这样就可以把数据抛回去给C++层;
详细代码可以参考:
https://github.com/MobClub/New-C2DX-For-ShareSDK
三、JS For ShareSDK
JS和Android交互,大部分的开发者应该都有用过,网上也有很多,所以这边粗略讲一下就好。交互的基础其实是限制于Android原生的WebView上使用。整个核心其实就是用到了JSInterface方法加上@JavascriptInterface注解,优化兼容问题,webview有个JSInterface方法,可以让js直接调用java,先向js层声明这么一个接口,定义一个String,
15

JS调用的时候使用window.JSInterface.方法名,就可以调用到java层的方法

16

同时在回调的时候给回callback参数,可以识别到JS的回调方法,进而去触发它:
17

拼接时注意传递的格式以及参数
18

此时和Unity、Cocos不同的一个地方,JS的return也是通过封装好回调参数后,使用异步的方式抛回去的,
19
20

详细代码可以参考:
https://github.com/MobClub/New-JS-For-ShareSDK

目录
相关文章
|
7月前
|
JavaScript 前端开发 Android开发
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
214 13
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
11月前
|
安全 Android开发 iOS开发
Android vs. iOS:构建生态差异与技术较量的深度剖析###
本文深入探讨了Android与iOS两大移动操作系统在构建生态系统上的差异,揭示了它们各自的技术优势及面临的挑战。通过对比分析两者的开放性、用户体验、安全性及市场策略,本文旨在揭示这些差异如何塑造了当今智能手机市场的竞争格局,为开发者和用户提供决策参考。 ###
|
6月前
|
存储 编解码 开发工具
Android平台毫秒级低延迟HTTP-FLV直播播放器技术探究与实现
本文详细探讨了在Android平台上实现HTTP-FLV播放器的过程。首先介绍了FLV格式的基础,包括文件头和标签结构。接着分析了HTTP-FLV传输原理,通过分块传输实现流畅播放。然后重点讲解了播放器的实现步骤,涵盖网络请求、数据解析、音视频解码与渲染,以及播放控制功能的设计。文章还讨论了性能优化和网络异常处理的方法,并总结了HTTP-FLV播放器的技术价值,尤其是在特定场景下的应用意义。
253 11
|
11月前
|
安全 Android开发 iOS开发
安卓与iOS的较量:技术深度对比
【10月更文挑战第18天】 在智能手机操作系统领域,安卓和iOS无疑是两大巨头。本文将深入探讨这两种系统的技术特点、优势以及它们之间的主要差异,帮助读者更好地理解这两个平台的独特之处。
311 0
|
7月前
|
JavaScript 搜索推荐 Android开发
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
224 8
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
|
7月前
|
数据采集 JavaScript Android开发
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
224 7
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
7月前
|
安全 Android开发 iOS开发
escrcpy:【技术党必看】Android开发,Escrcpy 让你无线投屏新体验!图形界面掌控 Android,30-120fps 超流畅!🔥
escrcpy 是一款基于 Scrcpy 的开源项目,使用 Electron 构建,提供图形化界面来显示和控制 Android 设备。它支持 USB 和 Wi-Fi 连接,帧率可达 30-120fps,延迟低至 35-70ms,启动迅速且画质清晰。escrcpy 拥有丰富的功能,包括自动化任务、多设备管理、反向网络共享、批量操作等,无需注册账号或广告干扰。适用于游戏直播、办公协作和教育演示等多种场景,是一款轻量级、高性能的 Android 控制工具。
520 1
|
10月前
|
安全 搜索推荐 Android开发
揭秘安卓与iOS系统的差异:技术深度对比
【10月更文挑战第27天】 本文深入探讨了安卓(Android)与iOS两大移动操作系统的技术特点和用户体验差异。通过对比两者的系统架构、应用生态、用户界面、安全性等方面,揭示了为何这两种系统能够在市场中各占一席之地,并为用户提供不同的选择。文章旨在为读者提供一个全面的视角,理解两种系统的优势与局限,从而更好地根据自己的需求做出选择。
1069 2
|
10月前
|
安全 搜索推荐 Android开发
揭秘iOS与安卓系统的差异:一场技术与哲学的较量
在智能手机的世界里,iOS和Android无疑是两大巨头,它们不仅定义了操作系统的标准,也深刻影响了全球数亿用户的日常生活。本文旨在探讨这两个平台在设计理念、用户体验、生态系统及安全性等方面的本质区别,揭示它们背后的技术哲学和市场策略。通过对比分析,我们将发现,选择iOS或Android,不仅仅是选择一个操作系统,更是选择了一种生活方式和技术信仰。
|
11月前
|
安全 搜索推荐 Android开发
揭秘iOS与Android系统的差异:一场技术与哲学的较量
在当今数字化时代,智能手机操作系统的选择成为了用户个性化表达和技术偏好的重要标志。iOS和Android,作为市场上两大主流操作系统,它们之间的竞争不仅仅是技术的比拼,更是设计理念、用户体验和生态系统构建的全面较量。本文将深入探讨iOS与Android在系统架构、应用生态、用户界面及安全性等方面的本质区别,揭示这两种系统背后的哲学思想和市场策略,帮助读者更全面地理解两者的优劣,从而做出更适合自己的选择。

热门文章

最新文章