android aar适配uniapp

server/2024/9/20 2:06:48/ 标签: android, uni-app, aar兼容uni-app

       最近有商户需要接入我们sdk,但是我们都是android或者ios原生的,直接用又不能用,需要做适配,本文就教你一步步实现android aar适配uniapp。

       官方参考教程:开发者须知 | uni小程序SDK

       但是官方写的比较繁琐,好像也没有写哪里去获取他们的扩展类的包,就是需要继承

io.dcloud.feature.uniapp.common.UniModule

这个类,你才能暴露出js的方法给uniapp使用。

第一步:获取需要继承的扩展类aar包

在这里

https://mvnrepository.com/artifact/io.dcloud.unimp/uni-app-v8/4.17.2024051110

如果不是这个地址了,你在https://mvnrepository.com搜索io.dcloud.unimp

在你的android项目里面添加如下依赖:

implementation group: 'io.dcloud.unimp', name: 'uni-app-v8', version: '4.17.2024051110'
 

或者下载后放在本地libs文件夹引入。

api(name: 'uni-app-v8-4.17.2024051110', ext: 'aar')

第二步:编写你需要开放给uniapp调用的方法

类必须继承自UniModule

UniJSMethod表示暴露出js方法

UniJSCallback表示回调函数,把结果回调给uniapp

package com.figo.test.uniapp;import android.app.Application;
import android.content.Intent;
import android.util.Log;import com.figo.test.activity.MainActivity;import org.json.JSONObject;import io.dcloud.feature.uniapp.annotation.UniJSMethod;
import io.dcloud.feature.uniapp.bridge.UniJSCallback;
import io.dcloud.feature.uniapp.common.UniModule;
public class PayModule extends UniModule{String tag="PayModule";public static UniJSCallback callback;/**** @param env* @param orderInfo* @param callback*/@UniJSMethodpublic void testPay(String env,String orderInfo, UniJSCallback callback) {this.callback=callback;JSONObject jsonObject=new JSONObject();Log.i(tag, "unionPay orderInfo=" + orderInfo + ",mode=" + mode);//切记,必须通过这种方式获取context上下文,从uniapp传过来的,目前测试下来无法使用Application context=(Application) mUniSDKInstance.getContext().getApplicationContext();try {if (orderInfo == null || orderInfo == "") {callback.invoke("orderInfo 不能为null或者为空");return;}Log.i(tag, "startActivity");final Intent intent = new Intent(context, MainActivity.class);//必须加这个不然也调不起来aar中的activityintent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);intent.putExtra("orderInfo", orderInfo);intent.putExtra("env", mode);context.startActivity(intent);}catch(Exception ex){ex.printStackTrace();Log.e(tag, ex.getMessage());try {jsonObject.put("respCode","9999");jsonObject.put("respMsg",ex.getMessage());jsonObject.put("orderInfo",orderInfo);callback.invoke(jsonObject.toString());} catch (Exception e) {e.printStackTrace();}}}@UniJSMethodpublic void add(int num1,int num2, UniJSCallback callback) {Log.i(tag,"num1="+num1+",num2="+num2);int sum=num1+num2;if (callback != null) {callback.invoke(sum);}}@UniJSMethodpublic void multiply(int num1,int num2, UniJSCallback callback) {Log.i(tag,"num1="+num1+",num2="+num2);int result=num1*num2;if (callback != null) {callback.invoke(result);}}
}

第三步:在assets文件夹新建dcloud_uniplugins.json文件

{"nativePlugins": [{"plugins": [{"type": "module","name": “test”,"class": "com.figo.test.uniapp.PayModule"}]}]
}

第四步:uniapp项目引用aar

把依赖放进nativeplugins文件夹

双击manifest.json添加依赖

第五步:uniapp调用android aar中的方法

<template><view class="content"><image class="logo" src="/static/logo.png"></image><view class="text-area"><text class="title">{{title}}</text></view><button type="button" @click="click">按钮</button></view>
</template><script>const test = uni.requireNativePlugin('test');export default {data() {return {title: 'Hello'}},onLoad() {},methods: {click(){//debuggerconsole.log(mobilepayment);mobilepayment.add(100,118,res => {console.log("add返回值="+res);})mobilepayment.multiply(2,9,res => {console.log("multipy返回值="+res);})if (uni.getSystemInfoSync().platform === 'android') {console.log("android调试开始");var orderInfo={"Version": "20240823","MerId": "1234567890","MerOrderNo": "2024082312345678","TranDate": "20240823","TranTime": "163026","OrderAmt": "1","Signature": "test123123123"
}const orderInfoString = JSON.stringify(orderInfo);test.testPay("00",orderInfoString,res => {console.log(res);})} else {console.log('此API只能在Android平台使用');}}}}
</script><style>.content {display: flex;flex-direction: column;align-items: center;justify-content: center;}.logo {height: 200rpx;width: 200rpx;margin-top: 200rpx;margin-left: auto;margin-right: auto;margin-bottom: 50rpx;}.text-area {display: flex;justify-content: center;}.title {font-size: 36rpx;color: #8f8f94;}
</style>

第六步:打包运行

android的需要运行到手机或者模拟器


http://www.ppmy.cn/server/106558.html

相关文章

Windows安装nexus 私服仓库(6)

1.私服 安装 配置nexus 下载你需要的环境 Windows 第一个文件夹是运行程序 第二个文件夹是工作空间 去运行exe 这个端口是可以改 点击进去 修改完重启就可以了 2.私服资源获取 然后登录nexus 账号是admin 密码在这个文件里 然后登录后提醒你修改密码 只能修改密码 名称不…

协议汇总 TCP、UDP、Http、Socket、Web Scoket、Web Service、WCF、API

TCP&#xff1a;   &#xff08;1&#xff09;位于OSI传输层&#xff0c;基于soap&#xff08;信封&#xff09;协议&#xff1b; &#xff08;2&#xff09;数据格式是xml、Json&#xff1b; &#xff08;3&#xff09;是面向连接的&#xff0c;需要先建立连接&#xff1b…

CRUD的最佳实践,联动前后端,包含微信小程序,API,HTML等(二)

CRUD老生常谈&#xff0c;但是我搜索了一圈&#xff0c;发觉几乎是着重在后端&#xff0c;也就是API部分&#xff01; 无外乎2个思路 1.归总的接口&#xff0c;比如一个接口&#xff0c;实现不同表的CRUD 2.基于各自的表&#xff0c;使用代码生成器实现CRUD 个人来说是推荐2&am…

Linux下单网卡配置多个路由ip方法

Linux下配置网卡ip别名何谓ip别名 用windows的话说&#xff0c;就是为一个网卡配置多个ip。 什么场合增加ip别名能派上用场&#xff1f; 布网需要、多ip访问测试、特定软件对多ip的需要 下面通过几个例子简单介绍一下如何使用ifconfig命令给网卡配置ip别名。 一、首先为服务器…

C#实现数据采集系统-数据反写(2)消息内容处理和写入通信类队列

C#实现数据采集系统-数据反写 实现步骤 MQTT订阅&#xff0c;接收消息 链接-MQTT订阅接收消息反写内容写入通信类&#xff0c;添加到写入队列中实现Modbustcp通信写入 具体实现 2. 消息内容写入通信类&#xff0c;添加到写入队列中 在服务类DAqService中添加通信集合_modb…

MyBatis框架学习

系列文章目录 第一章 基础知识、数据类型学习 第二章 万年历项目 第三章 代码逻辑训练习题 第四章 方法、数组学习 第五章 图书管理系统项目 第六章 面向对象编程&#xff1a;封装、继承、多态学习 第七章 封装继承多态习题 第八章 常用类、包装类、异常处理机制学习 第九章 集…

NRC-SIM:基于Node-RED的多级多核缓存模拟器

整理自&#xff1a; 《NRC-SIM: A NODE-RED Based Multi-Level, Many-Core Cache Simulator》&#xff0c;由 Ezequiel Trevio 撰写&#xff0c;作为他在德克萨斯大学里奥格兰德河谷分校攻读电气工程硕士学位的部分成果。以下是论文的详细主要内容&#xff1a; 摘要(Abstract…

day41.动态规划

一.动态规划 121.买卖股票的最佳时机I 思路:dp[i][1] 表示第i天不持有股票所得最多现金 dp[i][0] 表示第i天持有股票所得最多现金 class Solution { public:int maxProfit(vector<int>& prices) {int len prices.size();if (len 0) return 0;vector<vector&…

强化学习第九章:策略梯度方法

强化学习第九章&#xff1a;策略梯度方法 思路优化函数优化函数的梯度求解 Monte Carlo policy gradient (REINFORCE)总结参考资料 思路 与上一章的思路类似&#xff0c; 状态-动作 对下标索引获取概率π(s, a)的方式转换为状态-动作对 或者状态输入到神经网络中&#xff0c;两…

DevOps实现CI/CD实战(三)- 集成Sonar Qube

七、集成Sonar Qube 1. SonarQube介绍 Sonar Qube是一个开源的代码分析平台&#xff0c;支持Java、Python、PHP、JavaScript、CSS等25种以上的语言&#xff0c;可以检测出重复代码、代码漏洞、代码规范和安全性漏洞的问题。 Sonar Qube可以与多种软件整合进行代码扫描&#…

TCP keepalive和HTTP keepalive区别

TCP 的 Keepalive 在传输层 是内核态实现的&#xff0c;是TCP的保活机制 当两端的TCP连接一直没有数据交互&#xff0c;就达到了触发TCP保活机制的条件&#xff0c;那么内核里的TCP协议栈就会发送探测报文。 如果对端程序是正常工作的&#xff0c;当TCP保活的探测报文发送到对…

wp-autopost-pro 3.7.8最新完美版

插件简介&#xff1a; 插件是wp-autopost-pro 3.7.8最新版本。 采集插件适用对象 1、刚建的wordpress站点内容比较少&#xff0c;希望尽快有比较丰富的内容&#xff1b; 2、热点内容自动采集并自动发布&#xff1b; 3、定时采集&#xff0c;手动采集发布或保存到草稿&#xff…

mysql数据表管理

数据表管理 如果将数据库管理系统与之前的文件管理系统做类比的话&#xff1a; 数据库管理系统文件管理系统数据库文件夹数据表文件夹下的文件 数据表的常见操作指令 进入数据库use 数据库&#xff0c;查看当前所有表:show tables 创建表结构 idnameemailage创建表的基础语…

Leetcode面试经典150题-13.罗马数字转整数

解法都在代码里&#xff0c;不懂就留言或者私信&#xff0c;这个是相对简单点的&#xff0c;感觉会在低职级面试的时候考 class Solution {/**罗马数字转整数还是比较简单的&#xff0c;基本思路&#xff1a;把罗马数字字符串转成字符数组同时创建一个int型数组&#xff0c;遍…

「C#」EF Core的“迁移”(Migration)

1、“迁移”是什么 “迁移”&#xff08;Migration&#xff09;我觉得可以理解为将实体类的变化 转换为对数据库修改的方案&#xff0c;应用迁移就是将这个修改方案应用到数据库。其次&#xff0c;迁移也记录了数据库的版本历史等信息。 2、添加迁移 2.1、dotnet cli tool …

设计模式之简单工厂模式

一 、定义 简单工厂模式是一种创建型设计模式&#xff0c;它提供一个统一的接口来创建对象&#xff0c;而不需要客户端直接实例化对象。简单工厂模式通过封装创建对象的逻辑&#xff0c;简化了对象的创建过程&#xff0c;同时也提高了代码的可维护性和扩展性。缺点是&#xff…

浅谈【数据结构】图-图的存储

目录 1、图的存储 2、邻接表 3、十字链表 谢谢帅气美丽且优秀的你看完我的文章还要点赞、收藏加关注 没错&#xff0c;说的就是你&#xff0c;不用再怀疑&#xff01;&#xff01;&#xff01; 希望我的文章内容能对你有帮助&#xff0c;一起努力吧&#xff01;&#xff01;…

计算机毕业设计pyspark+django+scrapy租房推荐系统 租房大屏可视化 租房爬虫 hadoop 58同城租房爬虫 房源推荐系统

用到的技术: 1. python 2. django后端框架 3. django-simpleui&#xff0c;Django后台 4. vue前端 5. element-plus&#xff0c;vue的前端组件库 6. echarts前端可视化库 7. scrapy爬虫框架 基于大数据的租房信息推荐系统包括以下功能&#xff1a…

选择排序【详解】

本期介绍&#x1f356; 主要介绍&#xff1a;排序中的选择排序。 文章目录 1. 前言2. 选择排序3. 优化选择排序 1. 前言 相信只要接触过C语言的同学都或多或少了解排序问题&#xff0c;其中最基本&#xff0c;且最为人所熟知的排序是&#xff1a;选择排序。下面我会带着大家重新…

JAVA后端程序拉取私人仓库的npm包并将该程序打包成jar包

当前有一个系统用于导出项目&#xff0c;而每次导出的项目并不可以直接使用&#xff0c;需要手动从npm私人仓库中获取一个npm包然后将他们整合到一起它才是一个完整的项目&#xff0c;所以目前我的任务就是编写一个java程序可以自动地从npm私人仓库中拉取下来那个模板代码到指定…