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

相关推荐
weixin_4038101313 小时前
AI智能体写安卓自动化脚本教程:Cursor/Trae+CLI 实战,自然语言生成代码
android·人工智能·自动化·跨境电商·安卓自动化脚本·多账户运营
呆呆小孩15 小时前
零基础学 MySQL(上):从建库建表到增删改查,一篇搭好 SQL 基础
android·sql·mysql
catchadmin15 小时前
NativePHP v4 让 Blade 构建原生 iOS 与 Android 界面
android·ios·ai·php
FfHUCisI17 小时前
Golang 数据库连接池深度调优
android·数据库·golang
古法安卓19 小时前
Android-epoll原理详解
android·java·android studio
小满zs19 小时前
关于HBuilderX+ 微信小程序开发工具启动的问题
前端·uni-app
字节暗面21 小时前
四款 APP 加固强度测评:让 AI 拆了四个包,结果有点出乎意料
android·逆向工程·加固
网安蟹佬霸1 天前
蓝队防御实战:SIEM与SOAR构建安全运营中心(万字详解+实战配置)
android·安全·web安全·网络安全·网安
敢敢のwings1 天前
世界模型与FlashWorld:从“在梦中学习“到秒级3D场景生成
android·学习·3d
Dovis(誓平步青云)1 天前
牛奶不能减成负数:冰箱库存的筛选、去重与不可变更新
android·java·开发语言