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

相关推荐
雨白14 小时前
Android 快捷方式实战指南:静态、动态与固定快捷方式详解
android
hqk14 小时前
鸿蒙项目实战:手把手带你实现 WanAndroid 布局与交互
android·前端·harmonyos
LING15 小时前
RN容器启动优化实践
android·react native
恋猫de小郭17 小时前
Flutter 发布官方 Skills ,Flutter 在 AI 领域再添一助力
android·前端·flutter
Kapaseker1 天前
一杯美式搞懂 Any、Unit、Nothing
android·kotlin
黄林晴1 天前
你的 Android App 还没接 AI?Gemini API 接入全攻略
android
恋猫de小郭1 天前
2026 Flutter VS React Native ,同时在 AI 时代 VS Native 开发,你没见过的版本
android·前端·flutter
冬奇Lab1 天前
PowerManagerService(上):电源状态与WakeLock管理
android·源码阅读
BoomHe2 天前
Now in Android 架构模式全面分析
android·android jetpack
codingWhat2 天前
小程序里「嵌」H5:一套完整可落地的 WebView 集成方案
前端·uni-app·webview