手摸手教你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…...

代码随想录-Day22
235. 二叉搜索树的最近公共祖先 方法一:两次遍历 class Solution {public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {List<TreeNode> path_p getPath(root, p);List<TreeNode> path_q getPath(root, q);TreeNode anc…...

uniapp项目 使用vue-plugin-hiprint静默打印功能
插件地址:https://toscode.mulanos.cn/gyy155/vue-plugin-hiprint h5项目使用插件的静默打印功能 1.下载vue-plugin-hiprint和jquery npm install vue-plugin-hiprint npm install jquery --save2.在mian.js引入插件和jqerry //引入vue-plugin-hiprint import { h…...

视频汇聚EasyCVR视频监控平台GA/T 1400协议特点及应用领域解析
GA/T 1400协议,也被称为视图库标准,全称为《公安视频图像信息应用系统》。这一标准在公安系统中具有举足轻重的地位,它详细规定了公安视频图像信息应用系统的设计原则、系统结构、视频图像信息对象、统一标识编码、系统功能、系统性能、接口协…...

基于似然场的快速避障算法
系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录 系列文章目录前言相同思想的采样概率评估快速避障算法前言 认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长! 本文先对基于似然场的快速…...

Flutter 中的 IndexedStack 小部件:全面指南
Flutter 中的 IndexedStack 小部件:全面指南 Flutter 是一个功能强大的 UI 框架,它提供了多种方式来构建动态和响应式的用户界面。IndexedStack 是 Flutter 中的一个有趣的小部件,它允许开发者根据索引值来显示一组子元素中的一个。这使得 I…...

基于51单片机的交通灯设计
一.硬件方案 本设计能模拟基本的交通控制系统,用红绿黄灯表示禁行,通行和等待的信号发生,还能进行倒计时显示。按键可以控制禁行、深夜模式、复位、东西通行、南北通行、时间加、时间减、切换等功能。共四个二位阴极数码管,东南西…...

ECMAScript 详解
ECMAScript 详解 ECMAScript(ES)是JavaScript的标准化脚本语言,由ECMA国际通过ECMA-262标准进行规范。ECMAScript定义了语法、类型、对象模型和内置对象等基本特性,是JavaScript、JScript和ActionScript等语言的核心部分。 以下…...

使用Java Swing制作一个飞翔的小鸟游戏
文章目录 一、需求分析二、技术介绍2.1相关技术2.2开发环境 三、功能实现1、开始2、运动3、死亡 四、部分代码实现获取源码 文章最下方获取源码!!! 文章最下方获取源码!!! 文章最下方获取源码!&…...

leetcode 684.冗余连接
思路:并查集 这里的图比较像一种特殊的数据结构,其实也是图论的一种东西,就是基环树,但是这里并不是有向图,而是无向图,所以并不能用那种剪枝操作然后找基环。 看到连通量,我们应该能想到两种…...

RestTemplet 自定义消息转换器总结
在RestTemplet 请求中,请求发送一个 HTTP 请求时,RestTemplet 会根据请求中的内容类型(Content-Type)选择合适的 HttpMessageConverter 来处理请求体的数据。同样地,当服务器返回一个 HTTP 响应时,RestTemp…...