UniApp原生插件制作

news2024/11/17 9:46:54

参考1:UniApp官网-原生插件开发

参考2:uniapp Android 原生插件开发

一、下载安装Android Studio

本部分不在赘述

二、下载UniApp离线SDK

下载地址:Android 离线SDK - 正式版 | uni小程序SDK

三、解压下载文件,并导入Android Studio

1、解压后如图

 2、使用Android Studio打开项目UniPlugin-Hello-AS

提示

点击Trust Project即可 

3、修改项目配置

打开项目后报错如下:

 点击上面报错图中红框部分

 然后点击“Upgrade Gradle wrapper to 7.2 version and re-import the project”对Gradle进行升级

点击File->Project Structure对项目的Gradle Plugin和Gradle进行版本设置

 

三、创建Module

1、将项目呈现结构调整为Project

 2、选中根项目,然后新建一个Module

 3、打开新建Module中的build.gradle,屏蔽原有dependencies中的内容,并添加如下代码

//必须添加的依赖
	compileOnly 'androidx.recyclerview:recyclerview:1.0.0'
	compileOnly 'androidx.legacy:legacy-support-v4:1.0.0'
	compileOnly 'androidx.appcompat:appcompat:1.0.0'
	compileOnly 'com.alibaba:fastjson:1.2.83'

	compileOnly fileTree(include: ['uniapp-v8-release.aar'], dir: '../app/libs')

 4、添加依赖完成后进行依赖导入

 5、因为是通过反射调用,Module 不能被混淆。在Module下proguard-rules.pro文件中添加如下代码

-keep public class * extends io.dcloud.feature.uniapp.common.UniModule{*;}

5、在Module->src-main->java->包下面创建一个业务类,该类必须继承 UniModule 类

package com.mnyc.uniapp_mnyc_plugin_module;

import static android.content.ContentValues.TAG;

import android.util.Log;

import com.alibaba.fastjson.JSONObject;

import io.dcloud.feature.uniapp.annotation.UniJSMethod;
import io.dcloud.feature.uniapp.bridge.UniJSCallback;
import io.dcloud.feature.uniapp.common.UniModule;
public class UniAppPluginTestModule extends UniModule {
    //run ui thread
    @UniJSMethod(uiThread = true)
    public void testAsyncFunc(JSONObject options, UniJSCallback callback) {
        Log.e(TAG, "testAsyncFunc--" + options);
        if (callback != null) {
            JSONObject data = new JSONObject();
            data.put("code", "success");
            data.put("data", options);
            callback.invoke(data);
        }
    }

    //run JS thread
    @UniJSMethod(uiThread = false)
    public JSONObject testSyncFunc() {
        JSONObject data = new JSONObject();
        data.put("code", "success");
        return data;
    }
}

四、打包生成插件

找到Gradle->Module->Tasks->other->assembleRelese进行打包

 注意:如果新版本的Android Studio中找不到上面的assembleRelese,可以进行如下设置

File->Setting->Experimntal->取消掉下途中中红框部分勾选并重启Android Studio

 

六、在UniApp中使用插件

1、在UniApp中项目根目录下创建nativeplugins文件夹

2、在nativeplugin下创建“插件ID”文件夹

3、在“插件ID”文件夹下创建“android”目录和“package.json”文件

4、将生成的aar(在module->build->outputs->aar下)文件copy到上面创建的android目录下

5、编辑刚才创建的paceage.json文件

注意:package.json中不能包含注释,不管是在行头还是在行尾。下面添加注释只是为了说明每一个的意义

{
	"name": "Mnyc-Plugin", //这个名称可以随意
	"id": "UniApp-Mnyc-Plugin", //这个地方必须和插件Id完全一样
	"version": "0.0.1",
	"description": "测试SDK插件",
	"_dp_type": "nativeplugin",
	"_dp_nativeplugin": {
		"android": {
			"plugins": [{
				"type": "module", //
				"name": "MnycPluginsModule", //取一个有意义的名称,在插件引用的时候使用
				"class": "com.mnyc.uniapp_mnyc_plugin_module.UniAppPluginTestModule" //插件类的完全路径
			}],
			"integrateType": "aar",
			"minSdkVersion": 29
		}
	}
}

6、在manifest.json中添加插件

 7、制作自定义调试基座

8、在需要使用的地方进行引用

//映入插件,插件名称为package.json->_dp_nativeplugin->android->plugins-对应插件的name
var mnycPluginsModule = uni.requireNativePlugin("MnycPluginsModule");

//在具体的方法中进行调用
testAsyncFunc() {
				console.log("异步方法");
				mnycPluginsModule.testAsyncFunc({
						'name': 'unimp',
						'age': 1
					},
					(ret) => {
						console.log("异步方法---->调用成功", ret);
						modal.toast({
							message: ret,
							duration: 1.5
						});
					})
			},

9、使用自定义基座进行调试

调试打印如下日志,说明插件使用成功

 到此插件开发集成完成。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/563718.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

蓝精灵协会:如何将传统 IP 融入 Web3

作者:Cedric Hervet,联合创始人,创意总监 我和许多项目合作过,并且担任了近 30 年的艺术总监和创意总监。我的方法一直是创造同质化的宇宙,把观众带入并使他们产生梦想。但我也曾系统地寻找过那份额外的感动&#xff1…

微服务解码:揭示API的优势挑战与最佳实践

在当今快节奏的软件开发环境中,微服务已成为一种流行的架构模式。但微服务到底是什么?简而言之,微服务是一种将应用程序构建为松耦合、细粒度服务集合的方式,这些服务通过轻量级协议进行通信。这种架构风格使团队能够独立开发和部…

el-upload上传图片成功,详情页回显base64格式的图片

上传图片,并传给后端图片格式是base64。在详情页需要回显图片在el-upload上,我们发现官网里图片回显时,文件数组里要配置好name和url,如下图: 当我们需要回显base64格式的图片时,我们需要将要回显的文件数组处理成id和…

00后竭尽全力面试腾讯软件测试工程师,难道我只值15k....

不废话,直接重点 一般软件测试的面试分为三轮:笔试,HR面试,技术面试。 前两轮,根据不同企业,或有或无,但最后一个技术面试是企业了解你“行不行”的关键环节,每个企业都会有的。 在…

ChatGPT可能马上取代你!ChatGPT能做什么?

文章目录 前言1.客服机器人2.智能助手3.内部沟通4.个性化推荐5.语音交互6.教育培训7.医疗健康8.社交娱乐9.营销推广10.情感分析11.舆情监测12.知识管理13.金融服务14.物联网15.公共服务16.智能家居17.自动化办公18.交通出行19.游戏娱乐20.智慧城市21.决策支持22.人才招聘23.版权…

圣墟传说H5手工端搭建架设教程

圣墟传说H5手工端搭建架设教程 大家好,我是艾西。今天给大家带来的游戏是由小说改编而来的大型玄幻MMORPG仙侠手游,也是比较老的游戏了虽然你可能没有怎么听过,但总会有一批喜欢的玩家热衷于它。 那么让我们直接进入正题开始操作&#xff1…

ChatGPT:你真的了解网络安全吗?浅谈攻击防御进行时之网络安全新总结

ChatGPT:你真的了解网络安全吗?浅谈网络安全攻击防御进行时 网络安全新总结总结 ChatGPT(全名:Chat Generative Pre-trained Transformer),美国OpenAI 研发的聊天机器人程序,是人工智能技术驱动…

Windows 10 X64 内核对象句柄表解析

fweWindows 很多API函数都会创建和使用句柄(传入参数),句柄代表一个内核对象的内存地址,每个进程都有一个句柄表,它保存着进程拥有的句柄,内核也有一个句柄表 PspCidTable,它保存着整个系统的句柄。 ExpLookupHandleTa…

内网外网分离模式下,通过网关转发,来部署前后端分离的系统

前言 最近为某银行系统部署了一套商城系统,网络环境比较特别,思路记录下,其中商场系统使用前后端分离模式部署。 该银行网络环境: 外网服务器:外网可以访问到它,不能访问外网。 网关服务器:跟…

UE5电脑配置要求是什么?2023虚幻5电脑配置推荐

虚幻引擎对于游戏创作者来说已经不再陌生。该软件为程序员构建和设计终极视频游戏,以创建壮观的游戏场景和流畅的动作。此外,它还处理音效、物理碰撞效果和控制。尤其是人工智能对角色的控制。与其他软件一样,Unreal Engine也有最低系统要求才…

Atcoder beginner contest 302

A - Attack AC代码&#xff1a; #include<iostream> #include<algorithm> #include<cstring> #define int long long using namespace std; signed main() {int a, b;cin >> a >> b;if (a % b 0) cout << a / b << endl;else c…

Springboot +spring security,PasswordEncoder详解与应用

一.简介 在前面的文章有提到过PasswordEncoder: 为什么密码使用{noop}开头呢&#xff1f;也做出了相应的解释&#xff0c;这篇文章了解PasswordEncoder。 二.PassworderEncoder 详解 2.1主要方法 String encode(CharSequence rawPassword)&#xff1a;密码加密boolean matc…

【送书福利-第五期】《网络结构数据分析与应用》

大家好&#xff0c;我是洲洲&#xff0c;欢迎关注&#xff0c;一个爱听周杰伦的程序员。关注公众号【程序员洲洲】即可获得10G学习资料、面试笔记、大厂独家学习体系路线等…还可以加入技术交流群欢迎大家在CSDN后台私信我&#xff01; 送书福利-第五期 1、前言2、内容简介3、作…

CodeForces.1786A1.简单发牌.[简单][flg标识][找数学规律]

题目描述&#xff1a; 题目解读&#xff1a; 简单发牌问题&#xff0c;给两个人发牌&#xff0c;每次发牌数量依次递增&#xff0c; 给a发1张&#xff0c;然后给b发2&#xff0c;3张&#xff1b; 给a发4&#xff0c;5张&#xff0c;给b发6&#xff0c;7张&#xff1b; 给a发…

微信小程序【发送给朋友】和【复制链接】功能,灰色不可用

每日鸡汤&#xff1a;悲观者可能正确&#xff0c;但是乐观者往往成功 假设你是一个用户&#xff0c;你随便找一个小程序可以看到这几个功能 转发给朋友分享到朋友圈复制链接 很常见的功能&#xff0c;但是如果你作为开发者&#xff0c;这几个功能就需要自己做喽&#xff0c;并…

day9 - 对花朵图像进行边缘检测

本期主要介绍常用于进行图像边缘检测的滤波器&#xff08;算子&#xff09;&#xff1a;Sobel算子、Scharr算子、Laplacian算子&#xff1b;通过实验比较不同的算子的处理效果以及使用场景。 完成本期内容&#xff0c;你可以&#xff1a; 了解图像梯度的原理和应用 掌握使用S…

QxRibbon 知:搭建 PyQt5 环境

文章目录 安装 Python安装 PyQt5安装 PyCharm构建 QxRibbon参考资料 安装 Python 参考其它教程 安装 PyQt5 PyQt5 版本&#xff1a;5.15.2 运行 windows cmd.exe 命令提示符&#xff0c;通过下列方法进行安装&#xff08;友情提醒&#xff1a;关闭流氓软件 360&#xff09; …

B站w_rid逆向

文章目录 目标网站加密参数定位算法还原很久没有看过B站的项目了,正好有小伙伴问B站的w_rid咋逆向的, w_rid?初一听没啥印象啊,以前的B站应该没有这个东东,去看了一下,原来是更新了。 就看了下B站pc端作品列表,开始有校验w_rid了,本次目标就是逆向这个参数。 目标网…

Live800在线客服系统:客户体验即是业绩来源

“客户就是上帝”&#xff0c;这一论断在商业行为中早已成为不争的事实。 所有企业都知道&#xff0c;满足客户的需求才能让企业稳步发展。在产品同质化严重的今天&#xff0c;客户服务成为核心竞争力&#xff0c;试想一下&#xff0c;在产品、价格相差无几的两个企业中&#…

网络安全——应用层安全协议

作者简介&#xff1a;一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​​ 目录 前言 一.应用层安全协议 1.应用层安全威胁 2.电子邮件安全协议 1.MIME协议 2.电…