uniapp uts API插件集成第三方安卓sdk开发

📅 2026/8/22 12:39:54
uniapp uts API插件集成第三方安卓sdk开发
uniapp官方的文档写的很笼统, 关键问题都不写清楚, 靠人猜, 走了很多坑最后才走通, 这里把一些坑点和集成其他第三方sdk的流程给大家说清楚本文章适用场景:比如我开发uniapp的时候, 需要集成别的厂家的安卓sdk , 厂家提供了安卓的集成sdk的安卓代码, 和 arr格式的sdk文件, 我这里需要通过uniapp vue代码调用arr格式的代码获取安卓sdk的一些api总体流程:1.在uniapp中uni_modules下创建uts api插件2.将sdk复制到项目lib目录下, 官方文档说明是可以放入lib下, 和直接在config中配置, 这里需要强调一下, sdk复制到lib目录下,不需要其他的配置, 打自定义基座的时候, 会自动集成lib目录的sdk3.插件啥也不要写代码了,创建自定义插件的时候, 编辑器已经往里面写了很多示例代码, 先别删了1. 在uts插件中引入第三方sdk的代码, 尽量写简单的引入 比如import RCSDKManager from com.skydroid.rcsdk.RCSDKManager;2. 然后到pages中在第一个进入页面, 引入uts这个插件(就引入官方默认写的代码,这样可以防止出错)3. 开始打自定义基座, 为什么要马上打自定义基座? 因为你自己往里面写的代码很有可能会有杂七杂八的bug , 这样打自定义基座极大可能会失败, 打自定义基座一次等个十几二十分钟, 非常耗时间, 先不写复杂代码, 打自定义基座再说, 这样基座中就包含了 arr的sdk代码了, 这样后面本地调试,哪怕代码写错了, 编译的时候可以直接知道错误,调试方便些4. 这时开始写代码, 按照官方文档那样一步步的写, 这里也有很多坑, 比如arr sdk的接口怎么暴漏给vue调用, interface.uts 和 app-android/index.uts 之间的关系, 下面都会给出注意项下面给出原来安卓sdk的demo代码, 这个做uts插件,必须要知道安卓是怎么调用sdk代码的, 如下图,这个安卓demo 调用, 需要先初始化sdk, 安卓代码 RCSDKManager.initSDK 这个需要传入两个参数, 一个是 this (这个是安卓上下文context), 另一个是 SDKManagerCallBack 这个是一个interface接口, 这个代码需要在安卓编辑器中点击查看源码我们需要把sdk初始化的方法暴漏出去, 让外面的vue代码调用, 调用还得传入回调, 这部分怎么做呢?如下图, SDKManagerCallBack我们无法直接暴漏给外部vue(至少我不知道怎么暴漏), 那么我们就自己定一个对外暴漏的SdkCallBack 暴漏出入, 尽量传参啥的都给 any | null (表示任意类型或不传值), InitSdk 这个对外暴漏调用方法, 前面说了RCSDKManager.initSDK 是有两个参数, 第一个参数我们外面vue不传, 直接在uts插件中自己提供, 请注意 这里的名称首字母都是大写的接下来查看安卓具体的实现方式请看下方的导入, 我怎么知道这些导入的包? 就是要去看sdk, 在Android studio , 比如下面, 查看onRcConnectFail 中传入的SkyException的包地址注意这里的方法名是小写的// 导入RCSDK的类 import RCSDKManager from com.skydroid.rcsdk.RCSDKManager; import SDKManagerCallBack from com.skydroid.rcsdk.SDKManagerCallBack; import SkyException from com.skydroid.rcsdk.common.error.SkyException; import KeyManager from com.skydroid.rcsdk.KeyManager; import RemoteControllerKey from com.skydroid.rcsdk.key.RemoteControllerKey; import AirLinkKey from com.skydroid.rcsdk.key.AirLinkKey; import KeyInfo from com.skydroid.rcsdk.key.info.KeyInfo; import ControlMode from com.skydroid.rcsdk.common.remotecontroller.ControlMode; import CompletionCallbackWith from com.skydroid.rcsdk.common.callback.CompletionCallbackWith; import IntArray from kotlin.IntArray; /* 引入 interface.uts 文件中定义的类型 */ import { InitSdk, SdkCallBack, UnInitSdk, ConnectToRC, DisconnectRC, SetDebug, KeyGetChannels, KeyGetChannelsCallBack } from ../interface.uts; /** * SDKManagerCallBack 接口实现类 * 因为sdk中的SDKManagerCallBack 是一个接口, 所以如果需要调用, 需要给出实现类, 同时vue调用是通过SdkCallBack对外暴漏的, 所以这个实现类中传入SdkCallBack, 相当于SDKManagerCallBackImpl 是个中介, 这样的话, sdk的回调会先通过SDKManagerCallBackImpl 的实现方法, 然后通过SDKManagerCallBackImpl 的实现方法调用vue传入的SdkCallBack */ class SDKManagerCallBackImpl implements SDKManagerCallBack { userCallback: SdkCallBack; constructor(callback: SdkCallBack) { this.userCallback callback; } override onRcConnectFail(res: SkyException | null): void { this.userCallback.onRcConnectFail(res); } override onRcConnected(): void { this.userCallback.onRcConnected(); } override onRcDisconnect(): void { this.userCallback.onRcDisconnect(); } } // 初始化SDK // SdkCallBack 是vue部分传入的回调方法, 注意这里的方法名是小写的!!!! export const initSdk: InitSdk function (callback: SdkCallBack): boolean { const context UTSAndroid.getUniActivity(); // 上下文,也就是安卓中的示例代码的this if (context null) { console.error(SDK初始化失败无法获取Activity上下文); return false; } // 创建实现类, 传入SdkCallBack, 通过SDKManagerCallBackImpl实现的方法 // 间接调用外部的vue传入的方法, 类似中介的作用 const callbackImpl new SDKManagerCallBackImpl(callback); RCSDKManager.initSDK(context, callbackImpl); return true; }下面再看vue是怎么调用的, 注意, 这里导出的名称是小写的