废话
坑是真的多,官方文档简陋到可以忽略不计。
大概流程
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();}@Overridepublic 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 插件市场