android aar适配uniapp

最近有商户需要接入我们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

java 复制代码
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文件

javascript 复制代码
{
  "nativePlugins": [
    {
      "plugins": [
        {
          "type": "module",
          "name": "test",
          "class": "com.figo.test.uniapp.PayModule"
        }
      ]
    }
  ]
}

第四步:uniapp项目引用aar

把依赖放进nativeplugins文件夹

双击manifest.json添加依赖

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

javascript 复制代码
<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的需要运行到手机或者模拟器

相关推荐
计算机源码社4 小时前
分享一个基于微信小程序的居家养老服务小程序 养老服务预约安卓app uniapp(源码、调试、LW、开题、PPT)
android·微信小程序·uni-app·毕业设计项目·毕业设计源码·计算机课程设计·计算机毕业设计开题
丶白泽4 小时前
重修设计模式-结构型-门面模式
android
晨春计5 小时前
【git】
android·linux·git
标标大人6 小时前
c语言中的局部跳转以及全局跳转
android·c语言·开发语言
Angus-zoe7 小时前
uniapp+vue+微信小程序实现侧边导航
vue.js·微信小程序·uni-app
Pluto & Ethereal7 小时前
uni-app尺寸单位、flex布局于背景图片
uni-app
木鬼与槐7 小时前
MySQL高阶1783-大满贯数量
android·数据库·mysql
iofomo7 小时前
【Abyss】Android 平台应用级系统调用拦截框架
android·开发工具·移动端
AirDroid_cn10 小时前
在家找不到手机?除了语音助手,还可以用远程控制!
android·智能手机·远程控制·手机使用技巧·远程控制手机
天空下sky13 小时前
uniapp+若依 开发租房小程序源码分享
uni-app