手摸手教你uniapp原生插件开发
行有余力,心无恐惧
这篇技术文章写了得有两三个礼拜,虽然最近各种事情,工作上的生活上的,但是感觉还是有很多时间被浪费.还记得几年前曾经有一段时间7点多起床运动,然后工作学习,看书提升认知.现在我都要佩服那会儿的自己.如果想回到那种状态,我觉得需要有三个重要的条件.
其一: 目标,需要设定一个自己的目标. 那时候我在网上花不少钱买了课程,想提升自己的技术,刚好内容又可以运用到工作中,于是干劲满满,有了目标,并且有反馈,进步就比较大.所以需要设定一个可实现的目标,不论是短期还是长期.
其二. 环境.需要有一个能够保持学习热情的环境.当时住的离公司比较近,通勤时间少,这样就能保存自己的精力,另外回家后没有电脑,这样也减少了电子产品对人的诱惑,没电脑玩就看书,也正是那时候看到房东的那本<囚徒健身>才让我开启锻炼.孟母三迁也是这个道理,所以一个好的环境对人影响很大. 最近情绪有些低落,杂念较多,后面换个住的环境,看看能否改善把.
其三. 心态.说是条件,倒不如说是当时的状态.比较焦虑.未雨绸缪,居安思危是我的习惯,我总是担心10年20年甚至更久远将会发生的一些事情,这样就会让人焦虑,但这也是动力,它会让人去行动.后来通过看书,了解到一个方法,就是把自己的焦虑具体化,把担忧的事情写到纸上,诚恳面对自己的焦虑,面对这些未来可能发生的事情,自己能否承担的住.可以承受那最好,承受不住则去行动,让自己战胜焦虑. 所以需要积极的调整心态,张弛有度,保持平静和坚定.
总结下就是:
定好目标,打造环境,主动休息.
昨天在集思录上看到一段话,也是我希望做到的,那便是: “行有余力,心无恐惧”
文章目录
- 背景:
- 开发步骤:
- uniapp官网部分
- android部分
- uniapp部分
- uniapp引入插件
- 打包资源
- uniapp项目引入原生插件,打包插件
- 首先编译插件
- 打包自定义基座
背景:
目前在利用uniapp开发应用,主要是做打印功能,我们是SDK,需要把打印的功能提供给开发者. 但是目前打印图片的时候遇到一个问题,选择图片后,利用uniapp的api把图片绘制到界面上,如下api
uni.createCanvasContext(canvasId, this)
然后通过
uni.canvasGetImageData(OBJECT,this)
这个方法是返回一个byte数组,用来描述 canvas 区域隐含的像素数据. 在获取图片像素的时候数据不对,导致打印出来的数据很模糊. uniapp的bug 反馈了也没解决.插件市场上也没有适合我们的这的功能. 没办法只能利用原生插件区处理获取图片的byte数据了.
- 流程是 uniapp->调用android原生代码-> 返回uniapp需要的数据
开发步骤:
官方文档 https://nativesupport.dcloud.net.cn/NativePlugin/course/android.html
官方文档我感觉写的比较杂乱,并非按照开发顺序来的. 我自己再梳理一下,以android开发者角度,从零开发的经验去做uniapp原生插件
uniapp官网部分
- 开发者中心创建一个应用:https://dev.dcloud.net.cn/pages/app/list

- 点击应用名称进入应用,选择 离线打包Key管理 ,

输入啥都填上
3. 把key什么的都记住

android部分
https://nativesupport.dcloud.net.cn/AppDocs/download/android.html
注意这里下载的离线sdk需要和HbuilderX的版本对应 要不然会出错
离线sdk内有案例工程. UniPlugin-Hello-AS 导入到android studio 内
- 点击Android Studio菜单选项File—>New—>Import Project。

UniPlugin-Hello-AS 把这个项目打开
示例代码有三种不同类型的组件, 我这种情况时候moudle这种模式. 这种也是使用最频繁的模式

仿照示例代码自己创建一个android的moudle
- 点击Android Studio菜单选项File—>New—>New Moudle 。

注意 你的gradle编译版本可能和uniplugin的编译版本不一致, 所有把示例项目中的gradle 直接拷贝到你新建的library去, manifest同理. 记得把包名改为自己的.
把刚才在官网上申请的appkey填写到 app/src/main/AndroidManifest.xml 中

就是在这里
<meta-dataandroid:name="dcloud_appkey"android:value="开发者需登录https://dev.dcloud.net.cn/申请签名" />
记得把自己的证书放到项目里, 我们是安卓开发程序员就不多赘述了.
新建一个类,里面是自己的业务逻辑,我这里也直接拷贝官方的demo, 不过我把跳转activity的逻辑删除了.少一些操作.

uniapp部分
uniapp引入插件
const PluginName = uni.requireNativePlugin(PluginName); // PluginName 为原生插件名称
然后调用 调用具体可以看官方文档 或者看下底部的其他资料参考
打包资源
选择本地打包资源

复制打包资源到android插件项目

- 大家一定要注意.复制的时候千万注意包名.千万不能直接拷贝到AS里面, 包名路径变化了. 我在这里被耽误了很长时间,经过排查才发现直接拷贝到as内,包名路径不对. 所以要从文件夹内复制才行
修改插件dcloud_uniplugins.json 文件, 指定自己的moudle (这里只做演示)

同理, 这里的ID 也改为你 HBuilderX内Uniapp项目内的ID

然后运行调试即可.
uniapp项目引入原生插件,打包插件
上面是开发过程,接下来就是给uniapp使用插件了. - 省事直接用之前写好的程序BluetoothPrint
首先编译插件
在android studio中

点击你自己的gradle的项目 执行assembleRelease 脚本即可在build -> outputs -> arr 下找到生成的插件
来到HBuildx 需要新建一个文件夹nativieplugins 里面是你自己的moudle名-> android (aar文件) -> lib(里面是android中引入的其他lib)

下面需要新建描述文件 就是package.json

下面进行导入插件, 打开根目录的 manifast.json 文件 进行导入

打包自定义基座

公共证书, 自由证书,云端证书都行 随意 我用的公共证书
打包好后就可以运行自定义基座了

end
大家结合看参考资料
其他参考资料
https://nativesupport.dcloud.net.cn/NativePlugin/course/android.html
https://nativesupport.dcloud.net.cn/NativePlugin/course/package.html
https://blog.csdn.net/Douz_lungfish/article/details/126270135
https://zh.uniapp.dcloud.io/plugin/native-plugin.html
https://blog.csdn.net/haduwi/article/details/124422976
相关文章:
手摸手教你uniapp原生插件开发
行有余力,心无恐惧 这篇技术文章写了得有两三个礼拜,虽然最近各种事情,工作上的生活上的,但是感觉还是有很多时间被浪费.还记得几年前曾经有一段时间7点多起床运动,然后工作学习,看书提升认知.现在我都要佩服那会儿的自己.如果想回到那种状态,我觉得需要有三个重要的条件. 其…...
C++进程间通信 消息队列
C进程间通信 消息队列 消息队列概述消息队列代码示例1. 创建和发送消息的程序(sender.cpp)2. 接收消息的程序(receiver.cpp) 代码解释运行步骤运行结果 消息队列概述 消息队列是一种进程间通信机制,允许一个或多个进程…...
mysql中InnoDB的统计数据
大家好。我们知道,mysql中存在许多的统计数据,比如通过SHOW TABLE STATUS 可以看到关于表的统计数据,通过SHOW INDEX可以看到关于索引的统计数据,那么这些统计数据是怎么来的呢?它们是以什么方式收集的呢?今…...
P459 包装类Wrapper
包装类的分类 1)针对八种基本数据类型相应的引用类型——包装类。 2)有了类的特点,就可以调用类中的方法。 Boolean包装类 Character包装类 其余六种Number类型的包装类 包装类和基本数据类型的相互转换 public class Integer01 {publi…...
Kong网关的负载均衡
安装java环境 查询 java安装包 196 yum list java* 安装java8197 yum install -y java-1.8.0-openjdk.x86_64 检验java8是否安装成功。198 java -version2个tomcat准备 另外一个tomcat区别在于:配置文件。conf/server.xml 启动tomcat [rootlocalhost bin]# ./…...
这是一个逗号
还不太能是句号,随想录这两个月算是给我一个学算法的开头,感慨还是挺多的,但是语文功底很差,就接着写流水账吧。 高考前想报计算机,但是那年是先报志愿后考试,家里人劝我选择更稳一点的985,又说…...
oracle tree
select * from "Test"; INSERT INTO "Test" ("id", "name", "pid") VALUES (01, 中国, 00); INSERT INTO "Test" ("id", "name", "pid") VALUES (01.01, 福建, 01); INSERT INTO…...
react-beautiful-dnd 横纵排序demo
简单导入就可以看到效果 1. 安装依赖 npm i react-beautiful-dnd 2. 纵向排序 import React, { useState } from react; import { DragDropContext, Droppable, Draggable } from react-beautiful-dnd;// 纵向排序 const reorder (list, startIndex, endIndex) > {con…...
web练习
[CISCN 2022 初赛]ezpop ThinkPHP V6.0.12LTS 反序列化漏洞 漏洞分析 ThinkPHP6.0.12LTS反序列漏洞分析 - FreeBuf网络安全行业门户 解题过程 ThinkPHP V6.0.12LTS反序列化的链子可以找到,找到反序列化的入口就行 反序列化的入口在index.php/index/test 链子 …...
模型蒸馏笔记
文章目录 一、什么是模型蒸馏二、如何蒸馏三、常见问题3.1 四、参考文献 一、什么是模型蒸馏 Hinton在NIPS2014提出了知识蒸馏(Knowledge Distillation)的概念,旨在把一个大模型或者多个模型ensemble学到的知识迁移到另一个轻量级单模型上&a…...
HAL库使用FreeRTOS实时操作系统时配置时基源(TimeBase Source)
需要另外的定时器,用systic的时候生成项目会有警告 https://blog.51cto.com/u_16213579/10967728...
如何让你的网站能通过域名访问
背景 当我们租一台云服务器,并在上面运行了一个Web服务,我们可以使用云服务器的公网IP地址进行访问,如下: 本文主要记录如何 实现让自己的网站可以通过域名访问。 买域名 可以登录腾讯云等主流公有云平台的,购买域名…...
Spring Boot + Spring Security + JWT 从零开始
Spring Boot + Spring Security + JWT 从零开始 这篇笔记中,我们将学习如何从头开始设置一个带有Spring Security的Spring Boot应用程序,它连接到一个LDAP身份验证的Spring Security身份验证提供程序,这将是即将出现的,这个连接和工作都是开箱即用的。 实际上,设置这个非…...
【busybox记录】【shell指令】rmdir
目录 内容来源: 【GUN】【rmdir】指令介绍 【busybox】【rmdir】指令介绍 【linux】【rmdir】指令介绍 使用示例: 删除空目录 - 默认 删除dirname下的所有空目录,包括因删除其他目录而变为空的目录 常用组合指令: 指令不…...
[LitCTF 2023]yafu (中级) (素数分解)
题目: from Crypto.Util.number import * from secret import flagm bytes_to_long(flag) n 1 for i in range(15):n *getPrime(32) e 65537 c pow(m,e,n) print(fn {n}) print(fc {c})n 152412082177688498871800101395902107678314310182046454156816957…...
MySQL alter 语句
ALTER TABLE user ADD COLUMN cdkey varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT CD-Key, ADD COLUMN erp_userid varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT ERP用户ID, ADD UNIQUE INDEX un…...
列表推导式(解析式)python
Python中的列表推导式(list comprehension)是一种简洁且强大的语法,用于创建新的列表。它允许你通过对现有列表中的元素进行操作或筛选来快速生成新列表。以下是列表推导式的基本语法和一些示例: 基本语法: new_list…...
YOLO-10更快、更强
YOLO-10简介 主要贡献: 无NMS的一致双分配 YOLOv10提出了一种通过双标签分配而不用非极大值抑制NMS的策略。这种方法结合了一对多和一对一分配策略的优势,提高了效率并保持了性能。 高效的网络设计 轻量化分类头:在不显著影响性能的情况下&a…...
新火种AI|寻求合作伙伴,展开豪赌,推出神秘AI项目...苹果能否突破AI困境?
作者:小岩 编辑:彩云 2024年,伴随着AI技术的多次爆火,不仅各大科技巨头纷纷进入AI赛道展开角力,诸多智能手机厂商也纷纷加紧布局相关技术,推出众多AI手机。作为手机领域的龙头老大,苹果自然是…...
MFC工控项目实例一主菜单制作
1、本项目用在WIN10下安装的vc6.0兼容版实现。创建项目名为SEAL_PRESSURE的MFC对话框。在项目res文件下添加相关256色ico格式图片。 2、项目名称:密封压力试验机 主菜单名称: 系统参数 SYS_DATA 系统测试 SYS_TEST 选择型号 TYP_CHOICE 开始试验 TES_STA…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...
学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...
Reasoning over Uncertain Text by Generative Large Language Models
https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...
RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)
RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发,后来由Pivotal Software Inc.(现为VMware子公司)接管。RabbitMQ 是一个开源的消息代理和队列服务器,用 Erlang 语言编写。广泛应用于各种分布…...
[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.
ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #:…...
深入浅出Diffusion模型:从原理到实践的全方位教程
I. 引言:生成式AI的黎明 – Diffusion模型是什么? 近年来,生成式人工智能(Generative AI)领域取得了爆炸性的进展,模型能够根据简单的文本提示创作出逼真的图像、连贯的文本,乃至更多令人惊叹的…...
用鸿蒙HarmonyOS5实现中国象棋小游戏的过程
下面是一个基于鸿蒙OS (HarmonyOS) 的中国象棋小游戏的实现代码。这个实现使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chinesechess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├──…...
