android aar适配uniapp

news2024/11/15 9:11:48

       最近有商户需要接入我们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
     */
    @UniJSMethod
    public 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中的activity
            intent.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();
            }

        }
    }



    @UniJSMethod
    public 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);
        }
    }

    @UniJSMethod
    public 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(){
				//debugger
				console.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.coloradmin.cn/o/2067958.html

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

相关文章

计算机毕业设计选题推荐-Cosplay论坛系统-Java/Python项目实战

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

代码随想录训练营day27|455.分发饼干,376.摆动序列,53. 最大子序和

分发饼干 题目 思路&#xff1a;把最大的饼干分给胃口最大的人&#xff0c;所以可以先对两个数组进行排序&#xff0c;然后用双指针从后往前依次比较。如果饼干能成功头尾&#xff0c;就让饼干组的指针往前移 int biscs.size()-1; int ig.size()-1;//小孩组 for(;i>0;i--…

【摆脱被360安全卫士荼毒:使用这2个软件就够了】

保持电脑健康从拒绝使用360安全卫士开始 提示&#xff1a;不使用360安全卫士&#xff0c;电脑更健康 游戏本被360卫士荼毒的差点报废&#xff0c;感觉在使用360安全卫士后&#xff0c;笔记本的散热风扇很暴躁&#xff0c;笔记本经常高温不退&#xff0c;若你也有这样的烦恼&am…

单元格里显示曲线

想要实现的效果如下&#xff1a;表格每一行都有一个曲线 TreeList与GridControl的设置方法类似。 1、先创建控件的数据源&#xff0c;我使用的是DataTable /// <summary>/// 生成一个DataTable/// </summary>/// <returns></returns>public static Da…

【c++】强制类型转化

一、前言 在C语言中新增了四个关键字static_cast、const_cast、reinterpret_cast和dynamic_cast。这四个关键字都是用于强制类型转换的。 新类型的强制转换可以提供更好的控制强制转换过程&#xff0c;允许控制各种不同种类的强制转换。 C中风格是static_cast<type>(c…

进阶SpringBoot之 SpringSecurity(2)用户认证和授权

Spring Security 官网 Spring Security 是针对 Spring 项目的安全框架 也是 Spring Boot 底层安全模块默认的技术选型 它可以实现强大的 Web 安全控制 只需引入 spring-boot-starter-security 模块&#xff0c;进行少量配置&#xff0c;即可实现强大的安全管理 几个重要的…

首款国产“3A”游戏《黑神话:悟空》爆火,背后有哪些AI技术在助力?

近日&#xff0c;沉淀了4年的首款国产“3A”游戏《黑神话悟空》正式在各大游戏交易平台上线。 据市场研究公司VG Insights 周四晚间发布预估数据&#xff0c;《黑神话&#xff1a;悟空》自发售以来&#xff0c;三天内在 Steam 平台的销量已突破 840 万份&#xff0c;好评率超 …

速腾32线激光雷达使用方法

速腾32线激光雷达 12V电源 实体机ubuntu22.04 ROS2-humble 一、软件安装 mkdir robosense_ws cd robosense_wsmkdir src && cd src/ git clone https://github.com/RoboSense-LiDAR/rslidar_msg.git git clone https://github.com/RoboSense-LiDAR/rslidar_sdk.gi…

数学基础(六)

一、分布 正态分布 二项式分布 均匀分布 卡方分布 二、核函数 核函数的目的&#xff1a; 将低维数据转换为高维数据 线性核函数&#xff1a; Linear核函数对数据不做任何变换 当特征已经比较丰富了&#xff0c;样本数据量巨大&#xff0c;需要进行实时得出结果时进行使用…

【GH】【EXCEL】P3: Set Conditional Formatting To Excel Data By Gh

文章目录 conditional formattingdata sourceConditional ScaleConditional Scale Conditional PercentConditional Top Percent Conditional AverageConditional Average Multiple ConditionsConditional BarConditional Bar Conditional UniqueConditional Unique Conditiona…

JUC7-共享模型之工具

线程池 自定义线程池 import lombok.extern.slf4j.Slf4j; import org.springframework.core.log.LogDelegateFactory;import java.util.ArrayDeque; import java.util.Deque; import java.util.HashSet; import java.util.concurrent.TimeUnit; import java.util.concurrent.l…

git常用操作合集

1 撤销 1.1 适用场景 如果在git上提交了commit&#xff0c;但是当前提交的代码有问题&#xff0c;需要回退到上个版本 1.2 操作命令 1、git log 查看历史提交记录及对应的commit id 找到需要回退的commit id 2、执行git reset回退到之前的状态 git reset --hard <commi…

BaseCTF [第一周]Ez Xor

笔记。 64ida打开。 走&#xff01; 逆向逆向&#xff0c;逆向往前看。 因为异或算法&#xff0c;A ^BC >>> C^BA 所以在只需要知道密钥key就可以了。 是不是头大&#xff1f; 没事 这里介绍另一种方法>>> IDA 动态调试去获取key值、密文值 。(灵活使用工…

编写程序调用元神操作系统的API

1. 背景 本文介绍了元神操作系统API的调用&#xff0c;并详细介绍了“调用元神系统API读取磁盘扇区”程序的编写以及测试结果。 2. 方法 &#xff08;1&#xff09;元神操作系统API的调用方法 元神操作系统0.4版beta4开始提供了对OS功能的调用&#xff0c;调用相关的定义如…

整形提升

有任何不懂的问题可以评论区留言&#xff0c;能力范围内都会一一回答 整型提升 (Integral Promotion)是指在计算机编程中&#xff0c;当不同类型的整数类型进行运算时&#xff0c;较小类型的整数会被自动转换为更大类型的整数&#xff0c;以确保运算的正确进行。这种类型转换主…

【生日视频制作】公司前台接待文化形象墙字写字楼办公室AE模板修改文字软件生成器教程特效素材【AE模板】

公司前台形象墙写字楼办公室生日视频制作教程AE模板修改文字素 怎么如何做的【生日视频制作】公司前台接待文化形象墙字写字楼办公室AE模板修改文字软件生成器教程特效素材【AE模板】 生日视频制作步骤&#xff1a; 安装AE软件下载AE模板把AE模板导入AE软件修改图片或文字渲染…

STM32寄存器操作、模板构建

目录 外设寄存器查找 ① 名称② 偏移地址③ 寄存器位表④ 位功能说明寄存器基本操作 C语言的置位和清零 具体方法设置GPIO流程给寄存器赋值带参数宏STM32F1xx 芯片识别存储器映射寄存器映射让GPIOB端口的16个引脚输出高电平&#xff0c;要怎么实现&#xff1f;STM32寄存器映射…

探索大语言模型在DNA 分析到表达预测以及生物信息学应用

概述 论文地址&#xff1a;https://arxiv.org/abs/2401.04155 随着 OpenAI 的 GPT-X 和谷歌的 BERT 等大规模语言模型的出现&#xff0c;自然语言处理领域得到了飞速发展。这些先进的模型将理解和生成人类语言的能力发挥到了极致&#xff0c;彻底改变了日常交流和业务流程。 …

premiere2023暴力压缩视频

目录 1. 需求说明2. 压缩流程 1. 需求说明 要将三段视频拼接起来&#xff0c;时长超过了1h&#xff0c;然后压缩到200M以内的视频。 这是三段视频的信息&#xff1a; 合并三个视频文件意味着总时长增加了。较长的视频文件通常也会更大&#xff0c;即使比特率相同。 当我把三段…

分治算法的介绍与原理解析

文章目录 1.分治算法1.1 如何判断分治问题1.2 为什么通过分治可以提升效率1.2.1 操作数量的优化1.2.2 并行计算优化 1.3 分治常见应用 1.分治算法 分治&#xff08;divide and conquer&#xff09;&#xff0c;全称是分而治之&#xff0c;是一种非常重要且非常常见的算法。分治…