手摸手教你uniapp原生插件开发

news2024/9/20 17:36:51

行有余力,心无恐惧

这篇技术文章写了得有两三个礼拜,虽然最近各种事情,工作上的生活上的,但是感觉还是有很多时间被浪费.还记得几年前曾经有一段时间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官网部分

  1. 开发者中心创建一个应用:https://dev.dcloud.net.cn/pages/app/list

  1. 点击应用名称进入应用,选择 离线打包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-data
            android: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 (这里只做演示)

img2

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

image.png

然后运行调试即可.

uniapp项目引入原生插件,打包插件

上面是开发过程,接下来就是给uniapp使用插件了. - 省事直接用之前写好的程序BluetoothPrint

首先编译插件

在android studio中

点击你自己的gradle的项目 执行assembleRelease 脚本即可在build -> outputs -> arr 下找到生成的插件

来到HBuildx 需要新建一个文件夹nativieplugins 里面是你自己的moudle名-> android (aar文件) -> lib(里面是android中引入的其他lib)

ddkk

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

jj

下面进行导入插件, 打开根目录的 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

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

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

相关文章

错误记录:从把项目从Tomcat8.5.37转到Tomcat10.1.7

错误信息&#xff1a;在本地Servlet项目里没有报错&#xff0c;但是浏览器跳转该servlet时报错 型 异常报告 消息 实例化Servlet类[com.wangdao.lx.MyServlet1]异常 描述 服务器遇到一个意外的情况&#xff0c;阻止它完成请求。 例外情况 jakarta.servlet.ServletExceptio…

剪映网页版

https://www.capcut.cn/web 免费&#xff0c;免安装&#xff0c;跨平台&#xff0c;视频云合成&#xff0c;简直太好用了&#xff01;

在Windows 10中,如何利用命令提示符删除应用程序

如果你使用的是Windows 10&#xff0c;并且需要释放一些磁盘空间&#xff0c;你可以直接从命令提示符卸载不再使用的应用程序。以下是操作方法。 首先&#xff0c;你必须以管理员身份运行命令提示符才能卸载程序。在“Windows搜索”框中&#xff0c;键入“cmd”或“命令提示符…

比较kube-proxy模式:iptables还是IPVS?

kube-proxy是任何 Kubernetes 部署中的关键组件。它的作用是将流向服务&#xff08;通过集群 IP 和节点端口&#xff09;的流量负载均衡到正确的后端pod。kube-proxy可以运行在三种模式之一&#xff0c;每种模式都使用不同的数据平面技术来实现&#xff1a;userspace、iptables…

非线性优化:高斯-牛顿法的原理与实现

非线性优化&#xff1a;高斯-牛顿法的原理与实现 引言 在实际应用中&#xff0c;很多问题都是非线性的。非线性优化问题广泛应用于机器学习、数据拟合、工程设计等领域。高斯-牛顿法是一种常用于解决非线性最小二乘问题的迭代算法。本文将详细介绍高斯-牛顿法的原理、推导过程…

LORA微调,让大模型更平易近人

技术背景 最近和大模型一起爆火的&#xff0c;还有大模型的微调方法。 这类方法只用很少的数据&#xff0c;就能让大模型在原本表现没那么好的下游任务中“脱颖而出”&#xff0c;成为这个任务的专家。 而其中最火的大模型微调方法&#xff0c;又要属LoRA。 增加数据量和模…

力扣:104. 二叉树的最大深度

104. 二叉树的最大深度 给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;3示例 2&#xff1a; 输入&#xff1a…

【STL】C++ stack(栈) 基本使用

目录 一 stack常见构造 1 空容器构造函数&#xff08;默认构造函数&#xff09; 2. 使用指定容器构造 3 拷贝构造函数 二 其他操作 1 empty 2 size 3 top 4 push && pop 5 emplace 6 swap 三 总结 一 stack常见构造 1 空容器构造函数&#xff08;默认构造…

Vue 前端加框 给div加红色框框 js实现

实现方式&#xff1a;用getElementsByClassName、createElement、appendChild实现在原有div上添加一个新的div&#xff0c;从而达到框选效果 <template><div><el-button click"addIten">添加</el-button><el-button click"deleteIt…

ARM-V9 RME(Realm Management Extension)系统架构之系统能力的内存隔离和保护

安全之安全(security)博客目录导读 目录 一、内存隔离和保护 1、颗粒PAS过滤Granular PAS filtering 2、Cache的一致性维护 2.1 物理别名点 Point of Physical Aliasing (PoPA) 2.2 加密点 3、内存(DRAM)保护 3.1 内存加密和完整性 3.2 DRAM scrubbing 本博客探讨 RME…

PHP:IntelliJ IDEA 配置 PHP 开发环境及导入PHP项目

在创建PHP项目之前我们需要安装PHP插件&#xff0c;安装步骤如下&#xff1a;Windows&#xff1a;IntelliJ IDEA Ultimate 安装 PHP 插件-CSDN博客 1、导入已有PHP项目&#xff0c;导入之后选择&#xff0c;File > Setting 选择对应 CLL Interpreter&#xff0c;如果没有操…

基于GO 写的一款 GUI 工具,M3u8视频下载播放器-飞鸟视频助手

M3u8视频下载播放器-飞鸟视频助手 M3u8视频飞鸟视频助手使用m3u8下载m3u8 本地播放 软件下载地址m3u8嗅探 M3u8视频 M3u8视频格式是为网络视频播放设计&#xff0c;视频网站多数采用 m3u8格式。如腾讯&#xff0c;爱奇艺等网站。 m3u8和 mp4的区别&#xff1a; 一个 mp4是一个…

软件游戏缺失d3dcompiler_47.dll如何解决,简单有效的五种解决方法分享

在现代游戏中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“缺少d3dcompiler47.dll文件”。这个问题通常会导致游戏无法正常运行或出现崩溃的情况。为了解决这个问题&#xff0c;我总结出了以下五种解决方法。希望这些方法能够帮助到遇到相同问题的玩家。 …

LangChain入门开发教程(一):Model I/O

官方文档&#xff1a;https://python.langchain.com/docs/get_started/introduction/ LangChain是一个能够利用大语言模型&#xff08;LLM&#xff0c;Large Language Model&#xff09;能力进行快速应用开发的框架&#xff1a; 高度抽象的组件&#xff0c;可以像搭积木一样&a…

AI大模型日报#0529:杨红霞创业入局“端侧模型”、Ilya左膀右臂被Claude团队挖走

导读&#xff1a;AI大模型日报&#xff0c;爬虫LLM自动生成&#xff0c;一文览尽每日AI大模型要点资讯&#xff01;目前采用“文心一言”&#xff08;ERNIE 4.0&#xff09;、“零一万物”&#xff08;Yi-34B&#xff09;生成了今日要点以及每条资讯的摘要。欢迎阅读&#xff0…

原神抽卡点名程序教程(直接下载用)

今天我要给大家分享一个在抖音上特别火的视频——原神抽卡点名程序教程。 &#xff08;要源码的私信扣31&#xff09; 废话不多说&#xff0c;直接上效果图 &#xff1a; 步骤1&#xff1a; 步骤2&#xff1a;&#xff08;写名单&#xff0c;前面加数字代表星级&#xff0c;用…

【OrangePi AIpro】开箱初体验以及OAK深度相机测试

1. 简介 Orangepi AIPRO 是一款采用昇腾AI技术路线&#xff0c;集成4核64位处理器AI处理器的单板计算机&#xff0c;集成图形处理器&#xff0c;支持8TOPS AI算力&#xff0c;拥有8GB/16GB LPDDR4X&#xff0c;可以外接eMMC模块&#xff0c;支持双4K高清输出。 Orange Pi AIpr…

网上打印资料A4纸一般多少钱一张

我们知道&#xff0c;在打印需求上A4纸&#xff08;210mmx297mm&#xff09;是较为常见的打印用纸&#xff0c;同时因为纸张的不同在价格上也存在一定的差异。当然&#xff0c;因在网上打印平台打印资料&#xff0c;能够降低一定的租金个人工成本。 因此&#xff0c;在网上打印…

有限元之抛物型方程初边值问题解法

目录 一、原方程的变分形式 二、有限元法进行空间半离散 三、差分法进行时间全离散 四、相关量的数值计算 五、编程时的说明 六、算例实现 6.1 C代码 6.2 计算结果 本节我们将采用有限元法联合差分法来数值求解抛物型方程的初边值问题&#xff1a; 其中常数。 一、原方…

cf练习5.29

A ac代码 #include<bits/stdc.h> #define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);using namespace std;int main() {IOSint t;cin>>t;while(t--){int ans0;int a,b;cin>>a>>b;if(b0){if(a%150) ansa/15;else ansa/151;}else if(b!0…