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

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

### 如何在 UniApp 中集成和使用 Android AAR 插件 #### 集成准备 为了成功集成 Android AAR 插件到 UniApp 项目中,开发者需要完成一系列准备工作。这包括但不限于安装必要的开发工具以及熟悉相关文档资料。具体来说,开发者需确保已准备好 Java 环境、Android Studio 和 HBuilderX 工具,并下载离线 SDK 及查阅官方文档[^1]。 #### 创建并打包 AAR 文件 AAR 是一种用于封装 Android 原生功能的库文件格式,在 UniApp 的原生插件开发过程中扮演重要角色。以下是创建 AAR 文件的主要流程: 1. **下载并解压 uni-app 提供的离线 SDK** 下载完成后将其解压缩至指定路径以便后续操作[^2]。 2. **初始化项目** 打开 `UniPlugin-Hello-AS` 示例工程作为基础模板,或者自行新建一个 Android Native Project 并复制所需依赖包与资源文件[^3]。 3. **新增模块 (Module)** 在现有项目基础上添加一个新的 Module 类型设置为 “Android Library”,此步骤会生成对应的 build 脚本框架结构。 4. **调整构建脚本 (`build.gradle`)** 修改项目的 Gradle 构建配置以支持目标平台特性及版本兼容性需求。例如: ```gradle android { compileSdkVersion 30 defaultConfig { minSdkVersion 19 targetSdkVersion 30 } } ``` 5. **更新清单文件 (`AndroidManifest.xml`)** 定义权限声明和服务组件注册等内容来满足实际业务逻辑的要求。 6. **实现核心功能代码** 编写具体的 Java 或 Kotlin 实现类处理来自前端页面的数据交互请求。 7. **导出最终产物 (.aar)** 使用命令行工具或 IDE 内置选项执行打包动作得到完整的 .aar 库文件。 #### 将 AAR 插入到 UniApp 项目 一旦获得了上述制作好的 AAR 文件之后,则可按照如下方法将其嵌入到基于 Vue.js 技术栈搭建起来的应用程序当中去: 1. **修改应用目录布局** 将刚才生成出来的 aar 放置于特定位置比如 src/main/libs/ 下面方便管理引用关系。 2. **编辑 manifest.json 添加本地化插件描述信息** 明确指出所引入外部库的具体名称及其属性参数列表等细节部分。 3. **重新编译定制版运行时容器** 利用云端服务或者手动方式生成适配当前环境条件下的专属 APK 包形式交付给终端设备加载执行。 4. **验证效果正常与否** 启动模拟器或者真机调试模式下观察预期行为表现是否一致无误即可确认整个过程顺利完成。 5. **通过 JavaScript API 进行动态调用** 最终可以在 js 文件里书写类似这样的语句发起跨语言通信指令传递数据对象实例等等。 ```javascript plus.android.importClass("com.example.MyNativeClass"); var instance = new MyNativeClass(); console.log(instance.sayHello()); ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值