uniapp集成Android原生sdk

news2024/10/7 4:26:31

最近公司有个项目,需要调用客户提供的sdk扫描rfid,项目又是用uni开发的,客户提供的sdk只有Java版本,我发现uni是提供集成原生sdk的,所以研究了一下怎么使用,并记录下来过程。

准备

SDK 文件

下载

首先下载uniapp原生插件开发SDK,下载地址见App离线SDK下载

 

 解压

解压后相关文件如下图,我们只需要用到里面的示例工程HBuilder-HelloUniApp来进行插件开发就好

示例工程导入

  •  打开Android Studio,导入上边标出的工程

插件开发

Module 创建

选择新建 Module

 

 选择Android Library,然后下一步

文件配置

build.gradle文件打开

将编辑器文件视图切换到Project,选择我们刚创建的Module目录,然后打开其根目录下的build.gradle文件

 注意,后边会显示是哪个的,这里选我们刚才新建的rfid的build.gradle

 build.gradle文件配置

加入以下配置,dependencies里面的初始配置可以删除或注释掉,然后点击同步


android {
    sourceSets {
        main(){
            jniLibs.srcDirs = ["libs"]
        }
    }
}

//导入aar需要的配置
repositories {
    flatDir {
        dirs 'libs'
    }
}
 
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.1.46.android'
 
    compileOnly fileTree(include: ['uniapp-v8-release.aar'], dir: '../app/libs')
}

配置混淆文件

打开Module根目录下的proguard-rules.pro文件,在最后一行末尾加入以下代码

 

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

 

 

创建Module类

新建类文件

在Module的项目文件夹下创建我们需要的类 这里我新建了RFIDTool,必须继承UniModule

扩展方法必须加上@UniJSMethod (uiThread = false or true) 注解。UniApp 会根据注解来判断当前方法是否要运行在 UI 线程,和当前方法是否是扩展方法。
UniApp是根据反射来进行调用 Module 扩展方法,所以Module中的扩展方法必须是 public 类型。
 

import io.dcloud.feature.uniapp.annotation.UniJSMethod;
import io.dcloud.feature.uniapp.bridge.UniJSCallback;
import io.dcloud.feature.uniapp.common.UniModule;

public class RFIDTool extends UniModule {


    @UniJSMethod(uiThread = true)
    public void doTest(UniJSCallback callback){
        try {
            String result = "doTest success" ;
            callback.invoke(result);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

 数据返回

数据使用UniJSCallback结果回调,具体是使用invoke调用JavaScript的回调方法返回数据。更多可以参考官方文档,invoke需要传入一个Object类型的返回数据,:

插件调试

证书申请

获取 appid

打开uniapp项目,在根目录下找到manifest.json文件,在基础配置中获取到appid

证书生成 

  • 在uniapp 开发者后台应用管理找到对应项目点击名称进去
  •  选择证书管理,点击创建证书,等待生成成功就好
  •  

 生成成功后,刷新页面,下载证书,放入原生插件项目的app目录下

 

证书配置

证书详情

在后台证书管理页面,点击证书详情获取证书信息以及证书密码

 配置

 在插件项目app目录下的build.gradle文件中,将信息依次填入文件中的signingConfigs.config配置项,然后点击右上角同步完成配置,具体如图

 

 插件配置
注册插件
在插件项目的app\src\main\assets目录下打开dcloud_uniplugins.json,在nativePlugins配置项中添加一项插件配置,type必须为module,因为我们的插件是module类型;name统一跟随插件名;具体如下所示:

{
  "nativePlugins": [
    {
      "hooksClass": "",
      "plugins": [
        {
          "type": "module",
          "name": "rfid",
          "class": "cn.com.vs.rfid.tools.RFIDTool"
        }
      ]
    }
  ]
}

引入插件

在插件项目app目录下的build.gradle文件中,引入刚刚注册的module

离线打包Key

sha1值获取

在证书管理页面,证书详情里面获取证书sha1值

从Android项目中获取包名

 获取离线打包key

  • 在uniapp应用后台各平台信息页面,将上两步获取的值填入对应输入框,然后点击保存,如图:

 

  •  保存后会生成离线打包Key如下:

 

 

 配置离线打包Key

在插件项目app\src\main目录下的AndroidManifest.xml文件中,将上一步生成的离线打包key配置到相应位置,如图

 然后打包插件

插件包、APP以及uniapp项目的androidSDK版本应该统一一下,避免后续编译打包出错,如图:

 

开始编译 

打开Android Studio,在插件项目中,打开右上角Gradle栏目,选择插件开发项目,选择插件打开,依次点开Tasks-other,然后双击assembleRelease即可进行插件编译,如图:

 

获取插件

编译成功后,就可以在插件目录的build/outputs/arr目录下找到编译好的插件

引入插件

创建目录

在uniapp项目中创建nativeplugins目录,然后根据插件名创建插件目录,再在其下一级创建插件相应系统目录,然后将插件复制到该目录,如图:

 这里需要注意一点,如果自己开发的原生sdk中引用了jar包,可以直接打到arr中,如果sdk中引用了arr,需要放在和sdk相同的目录中,并且记得在build中配置

 

创建插件包配置文件
在包目录下创建package.json包信息文件,用于配置包信息,具体配置如下:

name 和 id建议与插件名统一
plugins中的配置与插件配置-注册插件步骤中所填一样
dependencies:如果原生插件引入了第三方SDK,需要在此参数中配置,具体可以参考相关官方文档dependencies
package.json:

{
    "name": "rfid",
    "id": "rfid-module",
    "version": "1.1",
    "description": "插件描述信息",
    "_dp_type":"nativeplugin",
    "_dp_nativeplugin":{
        "android": {
            "plugins": [
                {
                    "type": "module",
                    "name": "rfid-module",
                    "class": "cn.com.vs.rfid.tools.RFIDTool"
                }
            ],
			
            "integrateType": "aar",
            "compileOptions": {  
                "sourceCompatibility": "1.8",
                "targetCompatibility": "1.8"
            },
            "minSdkVersion": "23",
            "useAndroidX": false,   
            "permissions": [
                "android.permission.BLUETOOTH",
				"android.permission.MANAGE_EXTERNAL_STORAGE",
				"android.permission.WRITE_EXTERNAL_STORAGE"
            ],
            "parameters": {
                
            }
        }
    }
}

引入插件

在uniapp项目的manifest.json文件中添加配置好的插件,至此引入完成,如图:

 

打包自定义基座

新建基座打包

如图,依次点击三者进行自定义基座打包配置

 

 基座打包配置

如图三个输入框,分别填入前面在uniapp后台获取的证书以及相关信息,然后执行打包就好

 

基座运行测试 

选择运行基座

运行基座类型选择自定义基座

 

运行自定义基座

 基座打包成功后,运行自定义基座到手机测试

 到这里,基本上就简单的完成了原生sdk的开发与配置

本文借鉴了uniapp Android 原生插件开发(Module 扩展为例·2022)

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

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

相关文章

VUE搭建后台管理界面

后台管理一、前言二、依赖配置三、koa框架四、数据库五、路由六、前端界面6.1 登录界面6.2 注册界面6.3 展示界面七、阿里云部署7.1 前端项目7.2 后端node7.3 mysql安装7.4 测试八、总结一、前言 本篇文章从头到尾过一遍vue3搭建项目的过程,实现一个用户登录、注册…

Linux上使用telnet连接本机IP地址端口

场景 Linux开启了iptables!!! 开启本机TCP80端口服务。Linux本机IP地址是192.168.204.129。本机telnet连接本机的TCP80端口。 目的 telnet 192.168.204.129 80,能够连接通。 输入规则 1)需要配置一个让本机TCP80端…

日置IM3570阻抗分析仪产品介绍分享

日置IM3570阻抗分析仪 日本日置IM3570阻抗分析仪1台仪器实现不同测量条件下的高速检查,1台仪器实现LCR测量、DCR测量、扫描测量等的连续测量和高速检查,日本日置IM3570阻抗分析仪LCR模式下*快1.5ms(1kHz),0.5ms(100kHz&#xff0…

基于keras构建lstm模型自动生成音乐系统

目录 LSTM 机器学习生成音乐 1 数据集介绍 1 将 mid 转成 note 数组 4 将 note 数组转成 mid 文件 5 获取数据集并将其保存 6 将 note 进行编号 7 构建数据集 8 截取数据 8 进行 one-hot 编码 10 构建模型 11 训练 13 生成音乐 13 加载数据 16 加载模型 16 构建 id 与 note 的映…

我服了!SpringBoot升级后这服务我一个星期都没跑起来!(下)

14. DiscoveryEnabledServer Not Found 主要问题还是 eureka 中没有了 ribbon 相关的依赖。 Caused by: java.lang.NoClassDefFoundError: com/netflix/niws/loadbalancer/DiscoveryEnabledServerat java.lang.Class.getDeclaredMethods0(Native Method) ~[?:?]at java.lan…

论文笔记(二十二):GRiD: GPU-Accelerated Rigid Body Dynamics with Analytical Gradients

GRiD: GPU-Accelerated Rigid Body Dynamics with Analytical Gradients文章概括摘要1. 介绍2. 相关工作3. 背景A. *计算硬件:CPU vs. GPU*B. 刚体动力学4. GRiD库A. 设计B. 当前特征C. 代码优化方法5. 性能基准A. 方法B. 多重计算延时C. 单一计算延时扩展6. 结论和…

母线电容及其计算方法

母线电容及其计算方法 1.母线电容是什么? 2.母线电容有什么作用? 3.母线电容的参数。 4.母线电容参数计算。 1.母线电容是什么? 工程定义: (1)在电机控制器中,电池包的直流电作为输入电源&am…

关于 SAP ABAP SYSTEM_SHM_OPEN_CHANGE_LOCK 运行时错误的问题

有朋友在技术讨论群里提问: 遇到 SYSTEM_SHM_OPEN_CHANGE_LOCK 的运行时错误:Open change lock on transactional area in COMMIT: 上图显示,错误在 SAP ABAP 标准程序 SAPMHTTP 里抛出,这说明是 ABAP 服务器进行 HTTP 请求处理或…

SpringBoot SpringBoot 开发实用篇 5 整合第三方技术 5.23 SpringBoot 整合 RabbitMQ(direct 模式)

SpringBoot 【黑马程序员SpringBoot2全套视频教程,springboot零基础到项目实战(spring boot2完整版)】 SpringBoot 开发实用篇 文章目录SpringBootSpringBoot 开发实用篇5 整合第三方技术5.23 SpringBoot 整合 RabbitMQ(direct 模式)5.23.1…

web前端期末大作业——基于html+css+javascript+jquery+bootstrap响应式户外旅游网站

👨‍🎓学生HTML静态网页基础水平制作👩‍🎓,页面排版干净简洁。使用HTMLCSS页面布局设计,web大学生网页设计作业源码,这是一个不错的旅游网页制作,画面精明,排版整洁,内容…

分析高数值孔径物镜的聚焦

摘要 高数值孔径物镜广泛用于光学光刻、显微镜等。因此,在聚焦模拟中考虑光的矢量性质是非常重要的。 VirtualLab非常容易支持这种镜头的光线和光场追迹分析。 通过光场追迹,可以清楚地展示不对称焦斑,这源于矢量效应。 照相机探测器和电磁场…

解决台式机麦克风不可用问题,只有音频输出,无音频输入

解决台式机麦克风不可用问题 戴尔灵越3880 最近因为需要开线上会议,发现戴尔台式机音频只有输出没有输入,也就是只能听见声音,无法输入声音。 先后尝试了各种驱动安装更新之类的调试,无果。 之后通过戴尔支持解决~ 这里多说一…

京东主图视频上传,如何关联商品投放?

京东主图视频怎么做,如何上传主图视频?大家都知道商品可以展示五张主图,主图可以帮助买家更好地了解产品卖点。而主图视频可以更全面的展示产品,对此京麦还设置了不同类型的视频模板,但是很多新手商家往往在上传视频的…

适配器模式(Gateway中GatewayFilter和GlobalFilter整合实现)

文章目录GlobalFilter(代表全局过滤器)GatewayFilter(代表路由过滤器)GlobalFilterAdapter(适配器关键)测试类执行结果在SpringCloud Gateway中有两个不同的过滤器接口,分别是GatewayFilter和GlobalFilter。 GlobalFilter:全局过滤器。不需要再配置文件…

在外公网调阅公司内网资料文件【内网穿透】

优盘体积小巧重量轻,是不少人移动存储数据的首选。但优盘虽然方便携带,但也正是因为小巧和轻便,导致一不留神就会丢失,并且存储的数据也会有损坏的风险,因此在云存储概念兴起后,就快速成为数据存储的新风尚…

网络安全之反序列化漏洞复现

0x01 Apereo cas简介 Apereo CAS 单点登陆系统是Java服务器环境下使用较为广泛的单点登陆系统。 CAS 全程Central Authentication Service(中心认证服务),是一个单点登录协议,Apereo CAS是实现该协议的软件包。 单点登录定义 …

【面试】Android 大厂必问的8大模块,你掌握了几个?

自15年毕业进入社会从事 Android 开发行业,,已经将近有八年的时光了; 在这将近八年的时间内, 我从 小厂打杂到进入到核心团队,再跳槽到大厂; 在华为呆过一段时间,18年四月份进了阿里一直到现在&…

体态识别算法在 Android 端部署实例

背景介绍 随着软硬件技术的发展,智能穿戴式设备逐渐从概念走向商用化。在过去几年内,Google、Apple以及Sony等科技公司在体积、功耗控制以及成本等方面做得越来越好,推出了一大批可穿戴产品,具有代表性的成果有:1. 智能…

Cy5 Alkyne,1223357-57-0,花青素Cyanine5炔基用于点击化学标记反应

CAS号:1223357-57-0 | 英文名: Cyanine5 alkyne,Cy5 Alkyne | 中文名:花青素CY5炔基 CASNumber:1223357-57-0 Molecular formula:C35H42ClN3O Molecular weight:556.19 Purity:9…

【CNN】ResNet——开启的深度学习从1到无限可能的新时代

前言 深度残差网络(Deep residual network, ResNet)的提出是CNN图像史上的一件里程碑事件,ResNet在2015年发表当年取得了图像分类,检测等等5项大赛第一,并又一次刷新了CNN模型在ImageNet上的历史记录。直到今天&#…