uniapp—android原生插件开发(4uniapp引用aar插件)

本篇文章从实战角度出发,将UniApp集成新大陆PDA设备RFID的全过程分为四部曲,涵盖环境搭建、插件开发、AAR打包、项目引入和功能调试。通过这份教程,轻松应对安卓原生插件开发与打包需求!

一、将android程序打包成aar插件包

  • 直接使用Terminal命令窗口打包
  1. chmod +x ./gradlew                             授权目录
  2. ./gradlew clean                                    清理构建文件
  3. ./gradlew assembleRelease                打包成正式包

  • 查看打包文件

二、uniapp引用aar原生插件包(暴露的模块名为RfidModule)

  • 在uniapp中新增相关目录结构,按照规范引用相关文件和依赖,并配置相关配置(要与android项目的中的dcloud_uniplugins.json配置一致)

  • uniapp>manifest.json添加App原生插件配置

三、测试页面调用方法

  • 使用方式:

        const rfidModule = uni.requireNativePlugin('RfidModule');

<template>
	<view class="content">
		<image class="logo" src="/static/logo.png"></image>
		<view class="text-area">
			<button @click="add">测试添加方法</button>
			<button @click="connect">初始化并连接设备</button>
			<button @click="startInventory">启动盘点</button>
			<button @click="readTagData">读取标签数据</button>
			<button @click="writeTagDataToEPC">写入标签数据</button>
			<button @click="stopInventory">停止盘点</button>
			<button @click="disconnect">断开连接</button>
		</view>
	</view>
</template>

<script>
	const rfidModule = uni.requireNativePlugin('RfidModule');
	console.log(rfidModule);
	export default {
		data() {
			return {
				title: 'Hello'
			}
		},
		onLoad() {

		},
		methods: {
			// 测试添加方法
			add() {
				rfidModule.add({
					a: 1, b: 3
				}, e => {
					uni.showToast({
						title: "add测试方法=====" + JSON.stringify(e),
						icon: 'none'
					})
				})
				// let rtn = rfidModule.add({
				// 	a: 1,
				// 	b: 3
				// });
				// console.log(rtn);
				// uni.showToast({
				// 	title: "add测试方法=====" + JSON.stringify(rtn),
				// 	icon: 'none'
				// })
			},

			// 初始化并连接设备
			connect() {
				rfidModule.initialize();
				let rtn = rfidModule.connect();
				uni.showToast({
					title: "初始化并连接设备=====" + JSON.stringify(rtn),
					icon: 'none'
				})
			},

			// 启动盘点
			startInventory() {
				let rtn = rfidModule.startInventory()
				uni.showToast({
					title: "启动盘点=====" + JSON.stringify(rtn),
					icon: 'none'
				})
			},

			// 读取标签数据
			readTagData() {
				let rtn = rfidModule.readTagData(2, 0, 2, "00000001");
				uni.showToast({
					title: "读取标签数据=====" + JSON.stringify(rtn),
					icon: 'none'
				})
			},

			// 写入标签数据
			writeTagDataToEPC() {
				let rtn = rfidModule.writeTagDataToEPC("dataToWrite", "00000001");
				uni.showToast({
					title: "写入标签数据=====" + JSON.stringify(rtn),
					icon: 'none'
				})
			},

			// 停止盘点
			stopInventory() {
				let rtn = rfidModule.stopInventory();
				uni.showToast({
					title: "停止盘点=====" + JSON.stringify(rtn),
					icon: 'none'
				})
			},

			// 断开连接
			disconnect() {
				let rtn = rfidModule.disconnect()
				uni.showToast({
					title: "断开连接=====" + JSON.stringify(rtn),
					icon: 'none'
				})
			}
		}

	}
</script>

四、制作自定义调试基座

五、uniapp真机调试自定义原生插件

  • 使用自定义基座运行到真机上(非真机上无法调试自定义插件

  • 运行效果

此时,流程跑通了,后续根据自己的业务开发即可。

踩坑不容易,如果对你有帮助,麻烦点个赞或收藏一下,谢谢!!!

快速通道

uniapp—android原生插件开发(1环境准备)

uniapp—android原生插件开发(2原生插件开发)

uniapp—android原生插件开发(3Android真机调试)

uniapp—android原生插件开发(4uniapp引用aar插件)

### 调用 UniApp 原生插件的方法教程 在 UniApp调用原生插件,通常需要按照以下方式实现。以下是详细说明以及示例代码。 #### 1. 插件的引入 在 UniApp 的 Vue 或 NVue 页面中,使用 `uni.requireNativePlugin` 方法来引入原生插件[^1]。例如,如果有一个名为 `TestModule` 的插件,可以通过以下代码引入并调用其方法: ```javascript const testModule = uni.requireNativePlugin('TestModule'); testModule.getBatteryLevel(function (res) { console.log('设备电量:', res); }); ``` #### 2. 插件的配置 在开发原生插件时,需要在插件项目的 `app/src/main/assets/dcloud_uniplugins.json` 文件中进行配置。确保 `nativePlugins` 配置项中添加了插件的相关信息,例如类型(`type`)、名称(`name`)等[^2]。以下是一个配置示例: ```json { "nativePlugins": [ { "type": "module", "name": "TestModule" } ] } ``` #### 3. 插件开发与方法实现 对于 Android 平台,插件开发涉及 Java 或 Kotlin 代码的编写。以下是一个简单的 Android 原生插件示例,展示了如何通过回调返回图片路径[^3]: ```java import com.taobao.weex.annotation.JSMethod; import com.taobao.weex.common.WXModule; public class TestModule extends WXModule { private JSCallback jsCallback; private String path = ""; @JSMethod(uiThread = true) public void setImage(JSCallback jsCallback) { this.jsCallback = jsCallback; if (mWXSDKInstance != null && mWXSDKInstance.getContext() instanceof Activity) { Intent intent = new Intent(); intent.setAction(Intent.ACTION_PICK); intent.setType("image/*"); ((Activity) mWXSDKInstance.getContext()).startActivityForResult(intent, 0); } } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == 0) { Uri uri = data.getData(); path = RealPathFromUriUtils.getRealPathFromUri(mWXSDKInstance.getContext(), uri); if (jsCallback != null) { jsCallback.invoke(path); } } super.onActivityResult(requestCode, resultCode, data); } } ``` #### 4. 注意事项 - 确保插件的类型为 `module`,以便通过 `uni.requireNativePlugin` 正确加载。 -插件开发中,若需要与前端交互,可以使用 `JSCallback` 回调机制传递数据。 - 插件的命名需保持一致,避免因命名不匹配导致调用失败。 ### 示例总结 通过上述步骤,可以在 UniApp 中成功调用原生插件。首先在插件配置文件中定义插件信息,然后在插件代码中实现具体功能,并通过 `uni.requireNativePlugin` 引入和调用插件
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

断墨先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值