uniApp实战三:自定义插件的实现

devtools/2025/3/14 11:43:59/

文章目录

  • 1.最终效果预览
  • 2.页面布局
  • 3.插件开发
  • 4.编译uni页面
  • 5.平台申请离线key
  • 6.根据证书文件查看SHA1及SHA256值
  • 7.将模块编译为aar包并生成插件
  • 8.勾选本地插件并打自定义基座包

1.最终效果预览

2.页面布局

定义一个按钮触发点击事件

		<view @click="testClick"><text >调试</text></view>

点击方法如下

testClick(){const dcRichAlert = uni.requireNativePlugin('yichen-test');dcRichAlert.testAsyncFunc({title: "提示信息",name: '张三'}, result => {console.log('result: ', JSON.stringify(result));});}

3.插件开发

在AS中我们引入uni官方提供的示例UniPlugin-Hello-AS右键新建Module并定义类继承UniModule如下,添加一个testAsyncFunc方法,即上一步方法中调用的方法

public class MyTest extends UniModule {String TAG = "MyTest";public static int REQUEST_CODE = 1000;//run ui thread@UniJSMethod(uiThread = true)public void testAsyncFunc(JSONObject options, UniJSCallback callback) {if(callback != null) {JSONObject data = new JSONObject();data.put("code", "success");data.put("age", 123);data.put("title", options.getString("title"));data.put("name", options.getString("name"));Log.e(TAG, "testAsyncFunc--"+data.toString());callback.invoke(data);}}//run JS thread@UniJSMethod (uiThread = false)public JSONObject testSyncFunc(){JSONObject data = new JSONObject();data.put("code", "success");return data;}@Overridepublic void onActivityResult(int requestCode, int resultCode, Intent data) {if(requestCode == REQUEST_CODE && data.hasExtra("respond")) {Log.e("TestModule", "原生页面返回----"+data.getStringExtra("respond"));} else {super.onActivityResult(requestCode, resultCode, data);}}}

在app目录中的assets目录下找到dcloud_uniplugins.json,把我们刚才新建的插件定义上

{"plugins": [{"type": "module","name": "yichen-test","class": "com.example.uniplugin_mytest.MyTest"}]},

type对应的值固定为module,name中的值自己定义,当在uni中使用插件会用到,class中的值为我们插件写的类所在的包名+类名

4.编译uni页面

如下图所示生成本地打包资源

image

打包资源生成后将\unpackage\resources目录下的文件拷贝到AS工程\UniPlugin-Hello-AS\app\src\main\assets\apps目录下并将assets\data目录下的dcloud_control.xml中appid对应的值改为uniApp项目的包名

5.平台申请离线key

在https://dev.dcloud.net.cn/pages/app/list 平台中找到我们新建的应用,点击应用名称然后选择各平台信息,填写应用的包名、SHA1值、SHA256,这几个值根据自己打包的证书文件查看即可,填写完会生成离线key,将key值拷贝,找到AndroidManifest.xml文件并找到如下代码,替换其中的xxxx即可

 <meta-dataandroid:name="dcloud_appkey"android:value="xxxxx" />

6.根据证书文件查看SHA1及SHA256值

将安装的jdk的bin添加到系统变量中以便我们能访问keytool工具,打开cmd命令窗口输入如下命令查看证书文件的值

keytool -list -v -keystore D:\xxx.keystore

输入密码回车即可查到sha1及sha256的值,xxx.keystore如果没有可以用as新建一个,点几下就行。

7.将模块编译为aar包并生成插件

在AS工程右侧找到自己的插件模块 然后点击如下图所示生成aar包

image

在HbuilderX中新建如下图所示目录集成

image

注意package.json和android文件夹同级,这里官网应该写错了放到android文件夹里面去了,这样会导致本地找不到这个插件建好后可以将下列内容拷贝到package.json文件中,或者在插件跟目录下执行npm init一样会生成但是也是需要修改里面信息的

{"name": "uniPluginsTest","id": "yichen-test","version": "1.0.0","description": "uniPluginsTest","_dp_type":"nativeplugin","_dp_nativeplugin":{"android": {"plugins": [{"type": "module","name": "yichen-test","class": "com.example.uniplugin_mytest.MyTest"}],"integrateType": "aar"}}
}

_dp_type对应的值是固定的 plugins中的值直接和第三步插件开发dcloud_uniplugins.json中的值一样就行,integrateType得值固定为aar

8.勾选本地插件并打自定义基座包

在HbuilderX中找到manifest.json然后如下图勾选插件,然后再选云打包,打自定义基座包即可。

image


http://www.ppmy.cn/devtools/166714.html

相关文章

【每日八股】Golang篇(五):垃圾回收

目录 golang 的垃圾回收&#xff1f;写屏障&#xff1f;垃圾回收的触发条件&#xff1f; golang 的垃圾回收&#xff1f; golang GC 算法使用的是无分代&#xff08;对象没有代际之分&#xff09;、不整理&#xff08;回收过程中不对对象进行移动和整理&#xff09;、并发&…

AI+API引爆数据分析:BI已成过去?

目录 1 BI的瓶颈与新时代的需求 2 AI与API如何重塑数据分析&#xff1f; 3 QuickAPI&#xff1a;AI与API的桥梁 4 数据分析的未来&#xff1a;智能、互联、即时 5 结语 在过去十年中&#xff0c;商业智能&#xff08;BI&#xff09;一直是企业数据分析的基石。仪表盘、报表…

新型神经网络KAN:准确性高且易于解释

人工神经网络&#xff08;ANN&#xff09;是现代人工智能的核心技术&#xff0c;广泛应用于聊天机器人、图像生成器等领域。然而&#xff0c;传统的神经网络由于其复杂的结构和大量的神经元连接&#xff0c;往往被视为“黑匣子”&#xff0c;难以解释其内部工作原理。近年来&am…

Uniapp实现多种文件类型上传

一、前言 在移动端开发中&#xff0c;文件上传是常见的功能需求。本文将通过Uniapp框架&#xff0c;详细讲解如何实现支持多类型文件&#xff08;图片、视频、文档等&#xff09;的上传功能&#xff0c;并解决跨平台兼容性问题&#x1f604;&#x1f604;&#x1f604;。 二、…

中国软件供应链安全技术指南|DevSecOps敏捷安全技术金字塔V3.0正式发布

2022年12月28日&#xff0c;由悬镜安全主办&#xff0c;3S-Lab软件供应链安全实验室、Linux基金会OpenChain社区、ISC、OpenSCA社区联合协办的第二届全球DevSecOps敏捷安全大会&#xff08;DSO 2022&#xff09;已通过全球直播的形式圆满举行。本届大会以“共生敏捷进化”为主题…

在线商城服务器

1、项目背景 本项目是一个基于 C语言 开发的轻量级 HTTP 服务器&#xff0c;旨在实现基本的静态文件服务和简单的动态请求处理。 核心目标&#xff1a; 支持 HTTP/1.1 协议的 GET/POST 请求解析与响应。 提供静态资源&#xff08;HTML、图片等&#xff09;的快速分发。 作为学…

eclipse运行问题

你在 D:\Personal_Finance_System\eclipse\eclipse\configuration 目录下没有发现 .log 文件&#xff1a; 方法 &#xff1a;强制 Eclipse 生成日志 如果 .log 文件不存在&#xff0c;可以尝试让 Eclipse 以 -consoleLog 模式运行&#xff0c;查看错误信息&#xff1a; 打开…

一个差劲的软件设计

项目概况&#xff1a; 之前自己设计并开发了一个用C#开发的上位机软件&#xff0c;整个软件只有一个Form&#xff0c;一个TabControl&#xff0c;3个TabControlPanel&#xff0c;总共100多个lable、textbox、ListBox等控件都放在这3个TabControlPanel里。 问题&#xff1a; 1.…