uniapp uts插件实现AIDL与原生安卓通信

uni-app总结5-UTS插件开发 uni-app开发系统教程之UTS插件开发 阅读详情
AI摘要

作者开发uniapp原生插件遇阻后转向uts插件。介绍了开发uts插件实现AIDL与原生安卓通信的技术前提、参考文章和官方文档。讲述了创建项目、使用aar包、编写绑定服务代码、处理回调等开发过程中的问题及解决方法,虽步步踩雷但最终可实现通信。

前言

上周刚完成uniapp原生插件的开发调试,正兴冲冲地去上架,结果竟告知官方不再接收原生插件了!TNND,我搞了几天,到最后发现做的都是无用功 /(ㄒoㄒ)/~~
在这里插入图片描述
莫得办法,谁让人家是官方呢,研究uts插件吧!不看不知道,一看都是坑,人家是摸着石头过河,我简直是摸着河床过河!这UTS语法简直了!!!

技术前提:
首先你要了解安卓的AIDL,其次要了解Kotlin语言,因为UTS和Kotlin很像,学起来不至于你崩溃😆

参考文章:
uniapp Android 原生插件开发(Module 扩展为例·2022)

uts插件开发-继uniapp原生插件nativeplugins,uts插件开发可直接操作原生安卓sdk等,支持uniappx,支持源码授权价格等等-此片文章写的是基础的uts插件,原生相机拍照和回调

官方文档:
UTS插件介绍
uts for Android

话不多说,来吧,跟随我的脚步,直接开搂!

开始


环境创建项目等简单步骤都不讲了,可以参照上面 参考文章中的两个链接,如果从0开始说,步骤太繁琐了,并且上面两个文章已经尽可能详细了。

根据 这篇文章 uts插件开发 创建完项目后,就可以直接编写uts插件代码了,

一般开发AIDL的时候,都会将AIDL相关的公共代码打包成.aar文件,方便别的项目使用,大致结构如下:

ProjectRoot/
├── app/                                // 主应用模块
│   ├── src/
│   │   ├── main/
│   │   │   ├── AndroidManifest.xml
│   │   │   ├── java/
│   │   │   │   └── com.example.app/   // 主应用的代码
│   │   │   └── res/
│   └── build.gradle                    // 主模块的 Gradle 配置
├── aidlmodule/                         // AIDL 模块 (生成 .aar 文件)
│   ├── src/
│   │   ├── main/
│   │   │   ├── aidl/
│   │   │   │   └── com.example.aidl/
│   │   │   │       └── IRemoteService.aidl   // AIDL 文件
│   │   │   ├── java/
│   │   │   │   └── com.example.aidl/   // AIDL 相关的 Java 文件
│   │   │   ├── AndroidManifest.xml
│   │   │   └── res/                    // 资源文件
│   └── build.gradle                    // AIDL 模块的 Gradle 配置
└── build.gradle                        // 根项目的 Gradle 配置

在uts中也可以将 将jar/aar 添加到 utssdk/app-android/libs 目录下直接使用,可以参考官方 hello uts 项目示例,注意是直接使用,复制进去后不用额外配置。

当然如果使用标准基座进行调试的话,你只能获取到.aar文件中的公开常量,如果要获取相关类的话,就会报错,提示:
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.xxx.xxx.IBaseServiceInterface$Stub" on path: DexPathList[[dex file...

真的很神奇,你能获取到里面的静态变量,却无法获取到类,这个问题让我反复搞了一天,快下班的时候打完了自定义基座,再尝试一下才能成功获取到aar包中的类,打包自定义基座可以参考这篇文章:uniapp Android 原生插件开发(Module 扩展为例·2022) ,真是快崩溃的时候,又给了你希望!😒

既然aar包可以正常使用了,那就开始写绑定服务代码吧,由于第一次接触UTS语言,只能边学边写,参照着原生的实现方式,一行代码一行代码地写,TNND,真是全程边骂边写完的,看完官方文档和没看差不多,写一行代码报错一行,举步维艰,好久才把绑定服务连接接口实现出来,看下面代码是不是很熟悉,很像Kotlin,但你真写起来,感觉像个四不像😆

class BaseServiceConnection implements ServiceConnection {
	onServiceConnected(name : ComponentName, service : IBinder) : void {
		console.log("onResponse---onServiceConnected--" + service.interfaceDescriptor);

		serviceInterface = IBaseServiceInterface.Stub.asInterface(service);
	}

	onServiceDisconnected(name : ComponentName) : void {
		console.log("onResponse---onServiceDisconnected---");
		serviceInterface = null;
	}
}

这里实现接口不用写 override ,但继承类时重写方法需要加上 override

注意: 在HX中写aar包相关类和属性是没有提示的,导包也需要手动导包,不然编译时会报错,例如:

import ServiceConnection from 'android.content.ServiceConnection';
import IBinder from 'android.os.IBinder';
import ComponentName from 'android.content.ComponentName';

这些是系统自带的类,你编写时会有提示,按照提示点回车可以自动导包,但是不是系统自带的就需要一个一个手动操作了,例如:

import AidlRequest from 'com.xxx.xxx.AidlRequest';
import BaseRequest from 'com.xxx.xxx.BaseRequest';
import BaseResponse from 'com.xxx.xxx.BaseResponse';
import IBaseServiceInterface from 'com.xxx.xxxx.IBaseServiceInterface';
import IBaseServiceCallback from 'com.xxx.xxxx.IBaseServiceCallback';

新手体验贼不好,差评!

绑定服务代码如下,参照着原生的来:

	public static bindService() {
		var intent = new Intent("xxxxxxxxxxx")
		intent.setPackage("xxxxxxxxxx")
		var bind = UTSAndroid.getAppContext()?.bindService(intent, new BaseServiceConnection(), Context.BIND_AUTO_CREATE)
		console.log("bindService " + bind)
	}

注意,如果使用到aar包相关类时,别忘记导包哦!运行UTS代码,可以参考上面这篇文章 uts插件开发 ,index.uts(即uts插件)文件写完暴露接口后,在index.vue中导入要使用的插件

import { myApi } from "../../uni_modules/xxx-xxx";

然后就可以直接调用 myApi 方法了,myApi 为官方自动生成的暴露示例方法,index.uts有使用说明,运行即可成功绑定服务。

export const myApi : MyApi = function (options : MyApiOptions) {
	if (options.paramA == true) {
		// 返回数据
		const res : MyApiResult = {
			fieldA: 85,
			fieldB: true,
			fieldC: 'some message'
		};
		options.success?.(res);
		options.complete?.(res);
	} else {
		// 返回错误
		const err = new MyApiFailImpl(9010001);
		options.fail?.(err)
		options.complete?.(err)
	}
}

至于将回调的数据返回到界面,仍可以参考官方的 myApi 示例方法,大致就是先在interface.uts中定义接口,上面代码中 : MyApi 就是定义的接口,定义完需要引入下,你加入新的方法 在{ }中添加即可。

/* 引入 interface.uts 文件中定义的变量 */
import { MyApiOptions, MyApiResult, MyApi, MyApiSync } from '../interface.uts';

放心,有示例你也会出错的,慢慢来,最后都能解决的😁

AIDL回调:

class AidlCallback extends IBaseServiceCallback.Stub() {
	override onResponse(json : String) : void {
		xxx.options?.response?.(json);
		console.log("AidlCallback onResponse :" + json)
	}
}

还有一需要注意,就是uts喜欢在调用方法时加上 ?.,比如 正常情况下 调用一个不为null的方法 写法是options?.response(json) 但是在uts中就编译不过,必须这样写: options?.response?.(json) 。

还有,你传进来一个不为null的对象,在调用时也必须加上 ?,否则不单报错而且报错内容你都看不懂是这个原因,例如:

	public static bindService(callback : BindCallback) {
		callback?.result?.(true);
	}

最后


写完回头一看,其实也不是很麻烦,但是步步踩雷谁能受得了啊🤣,再会!

另外给喜欢记笔记的同学安利一款好用的云笔记软件,对比大部分国内的这个算还不错的,免费好用:wolai

UTS插件实战:打通AIDL与原生安卓的通信壁垒 本文详细介绍了如何使用UTS插件在UniApp中调用AIDL服务,解决原生安卓与跨平台开发的通信难题。通过实战案例,包括环境配置、服务绑定、接口调用及回调处理,帮助开发者高效复用现有aar文件,提升开发效率。特别适合需要集成AIDL服务的UniApp开发者。 阅读详情

相关推荐

uts插件开发-继uniapp原生插件nativeplugins,uts插件开发可直接操作原生安卓sdk等,支持uniappx,支持源码授权价格等等-此片文章写的是基础的uts插件,原生相机拍照和回调

3.在index.uts中编写原生安卓代码,首先定义一个函数方法,在页面中看是否可引用成功。5.修改uts插件takepic函数,原生android唤起手机相机功能。4.运行到手机或模拟器,成功打印111111即可视为调用uts插件成功。2.创建uts插件cf-takepic。6.再次修改uts代码,获取图片路径。index.vue代码。

cf 5621

UTS编写RFID插件

公司最近做一款固定资产盘点的项目,需要使用RFID进行盘点操作。结合硬件,RFID终端使用的是一款DT50U的扫描终端,可以进行RFID扫描识别。这就要求我们去对接相关的硬件SDK。DT50U使用的是Android系统,我们开发则使用uniapp进行了业务功能的书写。uniapp如果想要使用RFID功能则必须得进行原生插件的开发。由于没有接触过原生插件开发的内容,首先参考文档去看了uniapp原生插件开发的内容,按照教程去开发了一遍。

andywangzhen_ai的博客 3174

uniapp uts 插件开发指南

UTS(Uni Type Script)是一种统一、强类型的脚本语言,能够编译为不同平台的编程语言,如JavaScript、Kotlin、Swift和ArkTS。它支持开发独立App(uni-app x)和插件(uts插件)。uts插件通过uts语法操作原生API,封装成uni_modules插件,供前端调用。插件分为api插件和组件插件,分别用于扩展api能力和界面组件。创建uts插件需通过HBuilderX,插件目录结构包括各平台的原生配置和资源文件。开发uts插件需掌握uts语法、应用程序生命周期函数

Rey的技术博客 1348

UTS 在安卓系统上的开发应用

通过上面的章节的阅读。至此我们认为你已经掌握了UTS语法,掌握了基本的Kotlin语法,掌握了UTS对于android资源的支持。但是对于一个熟悉android开发的kotlin语言者来说,有很多常用的习惯发生了改变,我们会在这个章节特别指出,便于开发者加深认识。#

std7879的博客 5195

别再手动改颜色了!用这个Word宏,一键搞定Zotero参考文献超链接的蓝色样式

本文介绍如何利用Word宏一键修改Zotero参考文献的超链接颜色,解决手动调整的繁琐问题。通过详细的VBA代码解析和高级定制方案,帮助科研人员快速实现文献引用的自动化格式优化,提升论文排版效率。特别适合需要批量处理APA等标准格式蓝色超链接的用户。

weixin_30875157的博客 514

CDR学习笔记——02

这篇写一些高级CDR的架构原理。

... 1015

从踩坑到填坑:手把手教你用UTS插件搞定uniapp与安卓AIDL通信(附完整代码)

本文详细介绍了如何使用UTS插件实现Uniapp与安卓AIDL的深度通信,涵盖环境配置、语法陷阱、调试技巧及完整代码示例。通过实战案例,帮助开发者解决跨平台开发中的常见问题,提升开发效率。

weixin_33738555的博客 263

基于PDF文档结构的数字隐写

PDF隐写

xiongshivigor的博客 1426

PDA扫码开发避坑指南:硬件差异、固件配置与uniapp原生桥接

工业PDA扫码不是手机H5扫码的简单迁移,其本质是专用硬件(如Zebra SE4710、霍尼韦尔N4000激光引擎)通过HAL层与Android系统深度耦合的技术过程。理解PDA扫码原理需从硬件触发机制(物理扳机)、通信协议(AIDL/HID)、服务模型(独立扫描服务)切入,技术价值在于毫秒级响应、高鲁棒性及离线可用性,广泛应用于仓储分拣、医疗追溯、产线入库等强实时场景。本文聚焦uniapp+PDA开发落地,详解固件升级、SDK集成、uts插件桥接及东集DT50/SEUIC U8300等主流机型适配要点。

weixin_34221332的博客 308

DeepSeek邮件管理全攻略

DeepSeek邮件助手是一款高效的邮件处理工具,提供智能分类、撰写、回复和任务自动化功能。通过API调用或多智能体系统,它能自动分类邮件意图、生成专业回复并优化邮件内容。核心功能包括智能过滤、会议安排和任务提醒,支持与主流邮箱服务集成。提供精准提示词模板,帮助用户快速生成得体邮件,提升工作效率。适合个人和企业使用,通过简单配置即可实现邮件处理自动化。

Genio_Wang的博客 180

如何免费快速的部署一个自用免VIP的自动追剧工具!NAS新玩法!豆瓣与迅雷结合,轻松实现自动下载电影自动追剧功能(支持Windows,群晖nas,飞牛nas,软路由,服务器等Docker快速部署)

追剧党狂喜!豆瓣追剧神器,自动添加云盘,自动下载,微信通知,一键搞定!

XiaoqiangClub的博客 4582

uts插件开发

UTS插件开发指南:跨端高效原生开发方案 UTS插件是一种基于TypeScript语法的UniApp原生插件开发方案,能够直接编译为Android/iOS原生代码,解决传统跨平台开发存在的性能瓶颈和功能限制问题。该方案具有三大核心优势:原生性能(无JavaScript桥接损耗)、类型安全(完整TS类型系统)和开发效率(一套代码多端运行)。开发环境需配置HBuilderX、Android Studio或Xcode等工具。 UTS语法支持直接调用平台原生API,通过条件编译处理平台差异,并提供Promise异步

weixin_39173725的博客 1072

借助AI高效写出结构严谨、内容专业的课题申报书:10大核心模块拆解(附实用提示词)

在很多老师和科研人员眼中,写一份高质量的课题申报,确实是一件非常困难的事。难就难在不只是要说清楚写了什么研究内容,还要体现申报书的可行性和创新性。七哥除了自己写课题,也经常指导会员同仁使用高级学术版搞定课题的申报工作,摸索出了一套行之有效的借助AI申报课题的技巧,在这篇文章中,我将给大家点明课题申报书的10大核心模块的写作技巧,还会给大家一些提示词模板供大家参考,如果你也正准备申报课题,那么这篇文章一定不要错过!特别说明的是,提示词的使用并不是一蹴而就的,是专业思考的延伸和AI化专业表达,过程中需要多次的调

智能AI让学术科研更容易 441

uniapp使用uts插件调用原生API

uniapp平台使用uts插件来调用原生API

abs625的博客 5628

实战:利用 Agent Harness 自动化 PPT 制作

本文将带你从零开始,用轻量级Agent编排框架,结合主流大模型(GPT-4o、通义千问、文心一言等),搭建一套全自动化的PPT生成工作流:从用户输入自然语言需求,到需求解析、大纲生成、内容填充、数据匹配、排版美化、导出成品,全程不需要手动操作,最快10分钟就能产出符合要求的PPT。我们不会讲晦涩的Agent理论,所有步骤都有可直接运行的代码示例,哪怕你只有基础的Python语法基础,也能跟着一步步做出能用的自动PPT工具。

AI Agent Harness Engineering 569

大模型角色提示词写得再严密,也能被绕过?我用攻击者思维把自己吓了一跳!

很多人以为提示词是“只要写清楚了,模型就能理解”,但实际上——模型并不具备严格的规则意识,它只是在预测下一句话。所以我们必须从“攻防”角度出发,设计更强的防护机制。我这次就是亲身踩坑,用红队思维模拟攻击,才意识到原来提示词注入这么容易中招。你如果也在做 AI 应用、角色系统、提示词驱动的功能,建议你也用类似方式测试一下,不然被绕了都不知道。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1026

<uniapp><插件><UTS>在uniapp中,创建自己的插件并发布到uni插件市场

本专栏是基于uniapp实现手机端各种小功能的程序,并且基于各种通讯协议如http、websocekt等,实现手机端作为客户端(或者是手持机、PDA等),与服务端进行数据通讯的实例开发。本文主要是介绍一下如何在uniapp上,创建自己的插件并发布到uniapp市场,插件可以是免费的,也能付费。本文主要介绍一下,如何创建并发布一个简单的UTS插件。

用沸腾的热血,支付我们的人生吧! 2080

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

uni-app UTS插件嵌入鸿蒙原生组件开发指南

本文详细介绍了在uni-app中通过UTS插件集成鸿蒙原生组件的完整开发流程。主要内容包括:1)创建UTS插件目录结构;2)编写TypeScript语法实现跨平台功能;3)定义并注册鸿蒙原生按钮组件;4)实现组件事件通信与动态属性更新;5)开发调试环境配置与权限声明。文章以自定义按钮组件为例,展示了从插件创建到项目调用的全链路技术方案,帮助开发者充分利用uni-app的跨平台优势,在Vue3项目中无缝集成鸿蒙原生能力,实现"一次编写,多端运行"的开发目标。

一个走在鸿蒙开发路上的小菜鸡 1009

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

uniapp内使用uts插件

1.导入插件2.云打包,制作自定义基座,选择ios的话,真机测试要用开发证书,模拟器可以用发布证书3.用自定义基座运行程序。

Rasky的博客 2208

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

uni-appx开发鸿蒙插件示例

参考:https://doc.dcloud.net.cn/uni-app-x/plugin/uts-plugin.html右键点击目录 -> 新建插件在HBuilder X 中选中你的项目下目录,右键选择新建uni_modules插件, 例如 选择类型 uts插件为了避免和插件市场的其他插件冲突,建议起一个自己的插件前缀名称。uts插件目录结构package.json 为 uni_modules 插件配置清单文件,负责描述插件的基本配置。 上面是一个默认的清单文件示例,关于 package.json 更多描

夏天的博客 1856

uni-app的UTS插件开发,调用鸿蒙原生API

摘要:本文详细介绍了在uni-app中集成鸿蒙原生组件的方法,重点讲解了使用UTS插件实现原生组件注册、事件传递和动态属性更新。开发者可通过defineNativeEmbed注册组件,并通过.ets文件定义组件结构和逻辑。文章还提供了运行调试流程、注意事项和兼容性说明,帮助开发者将uni-app项目适配到鸿蒙系统,同时保持跨平台特性。关键技术包括原生组件同层渲染、事件监听机制和响应式属性更新。

猫哥 的沉淀、积累、总结。天天学习,好好向上...c/c++,嵌入式 linux,Android,HarmonyOS,AIOT) 2928

UTS插件集成步骤

uniapp uts插件集成步骤

ios、Android、j2ee项目实用技能分享 1150

uni-app 通过 UTS 插件实现鸿蒙原生组件嵌入

通过 UTS 插件和鸿蒙原生组件的结合,开发者可以在 uni-app 中高效地扩展鸿蒙平台的能力。本文以按钮组件为例,演示了从组件注册到页面调用的完整流程,帮助开发者快速掌握鸿蒙原生组件的嵌入技巧。

cnzzs的博客 1460

uniappx标准模式组件开发,Android原生SDK封装UTS插件全过程,原生aar包封装成UTS插件,uni-app x 原生SDK开发教程,uni-app x模块开发,创蓝闪验SDK一键登录

本文介绍了uni-appx项目中UTS标准模式插件的开发流程。主要包括:1)创建项目时勾选uni-appx选项;2)新建uni_modules目录并创建UTS插件;3)在插件目录下导入Android/iOS原生SDK包;4)通过interface.uts文件统一规范API接口定义;5)在各端index.uts文件中实现具体业务逻辑,调用原生SDK方法。文章还提到鸿蒙端需单独配置app-harmony目录,以及资源文件的管理方法。

他乡之客的博客 3247

UTS 入门教程:从零开始掌握跨平台开发

/ 基本函数// 箭头函数// 可选参数和默认参数// 调用函数console.log(greet("李四")) // 输出:Hello, 李四!console.log(add(3, 5)) // 输出:8createUser("王五") // age 为 undefined,isActive 为 true在// 定义插件方法参数类型success?fail?// 设备信息类型// 插件主接口。

Rysxt_的博客 1003
上一篇: 浅谈网络基础知识
下一篇: 使用安卓NDK 交叉编译动态库、静态库基础入门
_蓝橙
博客等级 码龄7年 1179粉丝 174原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值