Uniapp 调用aar、jar包

废话

坑是真的多,官方文档简陋到可以忽略不计。

大概流程

1. 新建一个Android模块,需要用这个模块打包成aar

2. 用这个模块引用uniapp-v8-release.aar以及你需要用到的aar、jar,用不到则忽略这步

        坑一:不要直接放到这个模块的libs文件夹,放到别的地方,然后在build.gradle中通过类似“compileOnly fileTree(dir: '../app/libs', include: ['uniapp-v8-release.aar'])”的这种方式引用。

3. 模块中封装、编写调用代码,然后打包成aar

4. 新建一个uniapp项目

5. 新建nativeplugins文件夹,然后将上面模块的aar包添加进来

6. 编写package.json配置文件,并在mainfest.json中勾选本地插件

7. 发行->云打包->打自定义调试基座

8. 真机调试

9. 真机调试没问题了,发行->云打包->打正式包

开搞

1. 搞aar

1.1 新建一个安卓项目(略)

1.2 新建一个安卓模块(略)

1.3 引用uniapp-v8-release.aar和其他aar、jar(我这里没有其他aar、jar略)

1.4 编写调用代码,必须继承UniDestroyableModule,可以理解为是一套用来跟uniapp交互的接口。我这里就写了两个方法,一个带回调,一个带Activity

package com.test.service;

import android.app.Activity;
import android.widget.Toast;

import io.dcloud.feature.uniapp.annotation.UniJSMethod;
import io.dcloud.feature.uniapp.bridge.UniJSCallback;
import io.dcloud.feature.uniapp.common.UniDestroyableModule;

public class TestUtils extends UniDestroyableModule {

    @UniJSMethod(uiThread = true)
    public static void test(String msg, UniJSCallback jsCallback) {
        jsCallback.invoke("收到信息:" + msg);
    }


    @UniJSMethod(uiThread = true)
    public static void toast(Activity activity, String msg) {
        Toast.makeText(activity, msg, Toast.LENGTH_SHORT).show();
    }

    @Override
    public void destroy() {

    }
}

1.5  将模块设置成release版本

1.6 构建一下,生成aar包

2. 搞uniapp

2.1 新建一个uniapp项目(略)

2.2 项目第一级目录下新建nativeplugins文件夹,并且按照对应逻辑新建对应的字文件夹,并将aar拷贝进来,另外生成并编写一个package.json配置文件。

2.3 mainfest.json中勾选你刚刚配置的插件

2.4 其他配置(略)

        注:配置项目名称、logo、权限之类的,特别是权限,配置好了之后必须重新打包基座才生效。

2.5 打包基座,发行->云打包->打自定义基座。

2.6 编写调用代码,这里用了两种不同的调用方式,都可以使用。

<template>
	<view class="content">
		<image class="logo" src="/static/logo.png"></image>
		<view class="text-area">
			<text class="title">{{title}}</text>
		</view>
		<view class="button-container">
			<button class="button" @click="onTest">调试返回</button>
			<button class="button" @click="onToast">调试输出</button>
		</view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				title: 'Hello'
			}
		},
		onLoad() {},
		methods: {
			onTest() {
				const PluginName = uni.requireNativePlugin("test-service");
				PluginName.test('传个值过去',ret => {
					uni.showToast({
						title: ret,
						icon: 'none', 
						duration: 2000 
					});
				});
			},

			onToast() {
				var main = plus.android.runtimeMainActivity();
				plus.android.invoke('com.test.service.TestUtils', 'toast', main,"测试Toast提示");
			}
		}
	}
</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;
	}

	.button {
		margin-top: 15px;
		/* 上边距为15px */
		margin-bottom: 5px;
		/* 下边距为5px */
	}
</style>

2.7 真机调试:运行->运行到手机->运行到Android App基座

2.8 打包发布,发行->云打包->正式包(略)

参考链接:

https://github.com/dcloudio/RichAlert

原生增强提示框插件 - DCloud 插件市场

  • 18
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值