废话
坑是真的多,官方文档简陋到可以忽略不计。
大概流程
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 打包发布,发行->云打包->正式包(略)