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

相关推荐
千里马学框架9 小时前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
美狐美颜SDK开放平台9 小时前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
AFinalStone9 小时前
Android7 SystemUI源码解析(七)Keyguard锁屏模块深度解析
android·systemui
致远ccc10 小时前
Google Play 上架前如何测试 App?多国家 Android 环境测试
android·app测试·googleplay·多国家应用测试
ttyyttemo11 小时前
Kotlin 协程中的 Job 结构化并发与取消
android
sun00770012 小时前
tbox 4g/5g切换,导致wan ip 改变,导致车机旧网络不可用。需要重启车机才行
android
其实防守也摸鱼13 小时前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
码兄科技13 小时前
24小时自助健身房系统软件开发实战指南:功能设计与部署方案
java·spring boot·uni-app
AFinalStone14 小时前
Android7 SystemUI 源码解析(四)NavigationBar 导航栏与 SystemBars
android·systemui
JMchen14 小时前
属性动画原理与高级动画实现
android·kotlin·canvas