【彩带- 避坑知识点】:
当时开发中安卓插件打包成功后,uniapp引用插件aar,用云打包 ,总是提示不包含插件。原因是因为module的androidManifest.xml文件没有注册activity。 这一步 很重要,一定要注册。
![](https://img-blog.csdnimg.cn/direct/d2bc16f9c7a24c5785551a8d8a19b8b0.png)
---------------------------------------------------------------------------------------------------------------------------------
流程开始:
准备步骤
下载Android Studio下载app离线SDK
注意:建议都下载最新版本,下载地址与详细请参考官方文档。Android插件开发教程
一、导入uni插件项目(注意:尽量用demo里面的buildgradle插件版本号和gradle版本)
解压下载的app离线SDK
![](https://img-blog.csdnimg.cn/direct/5a8174a027324320b9fd5665ea381192.png)
将UniPlugin-Hello-AS项目导入到Android studio中
![](https://img-blog.csdnimg.cn/direct/62734c7c5fd545e68906d726e9e85d12.png)
等待Android studio编译完成,编译完成后的项目结构如下
![](https://img-blog.csdnimg.cn/direct/0136747090c44ad4803c12b3f4309388.png)
二、新建module
新建module
![](https://img-blog.csdnimg.cn/direct/f2bd464227da4a9e932deab94a33ee5e.png)
选择Android library,记住你的package name
![](https://img-blog.csdnimg.cn/direct/f83d092fd84e4ec9a34167b75364d889.png)
此时可能会有报错
![](https://img-blog.csdnimg.cn/direct/d00f8d3ca13e40168dd9df7a21fe2f03.png)
解决报错,复制build.gradle(uniplugin_module)的内容,替换刚刚生成的build.gradle
![](https://img-blog.csdnimg.cn/direct/c8e49f915fce4e728b81f8a9667d21c4.png)
![](https://img-blog.csdnimg.cn/direct/8c16293c289049d6a3cfd49eab9f1846.png)
![](https://img-blog.csdnimg.cn/direct/5d41ebc1a047467ba08ca50148086f8d.png)
找到报错的文件,复制uniplugin module中的内容,粘贴修改刚刚报错的文件
![](https://img-blog.csdnimg.cn/direct/de2f2787c6db4a05b3b89d1abd9b4ac0.png)
![](https://img-blog.csdnimg.cn/direct/da858e1761a64fa7869b44ec2a6995ae.png)
![](https://img-blog.csdnimg.cn/direct/d2bc16f9c7a24c5785551a8d8a19b8b0.png)
点击try again,此时编译成功,出现以下文件与文件夹
![](https://img-blog.csdnimg.cn/direct/7ee7404969fd409fa406da110cb5cd7d.png)
新建java类,注意:命名与xml文件中设置的命名要一致
![](https://img-blog.csdnimg.cn/direct/96ceae3e456e4150badab86c6454034d.png)
![](https://img-blog.csdnimg.cn/direct/46d960918deb40b7bfc1a4e8be2d6bec.png)
随便写一些测试代码
注意:继承UniModule,并添加@UniJSMethod注解 package com.example.mylibrary;
import com.alibaba.fastjson.JSONObject;
import io.dcloud.feature.uniapp.annotation.UniJSMethod;
import io.dcloud.feature.uniapp.bridge.UniJSCallback;
import io.dcloud.feature.uniapp.common.UniModule;
// 一定要继承UniModule
public class testModule extends UniModule {
// 使用UniJSMethod注解,才能使用js调用
@UniJSMethod(uiThread = true)
public void add (JSONObject json, UniJSCallback callback) {
final int a = json.getInteger("a");
final int b = json.getInteger("b");
callback.invoke(new JSONObject() {{
put("code", 0);
put("result", a + b);
}});
}
}
在build.gradle(app)中添加uniapp-插件,点击sync now ![](https://img-blog.csdnimg.cn/direct/94970f7f3aba4537aef6d9fac4ee37a1.png) 在dcloud_uniplugin.json中新增插件,注意:插件命名会在uniapp中引用新建项目,在项目中引用插件,使用module的方法 ![](https://img-blog.csdnimg.cn/direct/39ec2abd454b4344a23f3a749da9f0c4.png) 三、在uniapp中引用 本文采用vue3+ts编写uniapp部分
测试
const test= ()=>{
// 引入自定义插件
const testModule = uni.requireNativePlugin('my-testmodule')
// 使用module的add方法
testModule.add({
a:1,b:3
},e=>{
uni.showToast({
title:JSON.stringify(e),
icon:'none'
})
})
}
四、在Android studio中调试 uniapp中打包app资源包,并复制打包出来的这个文件夹 ![](https://img-blog.csdnimg.cn/direct/e1517f3f4dd043858c5b05aefa9305fa.png) 粘贴到原生项目中 ![](https://img-blog.csdnimg.cn/direct/8b3d3f59a45e44b4b82429cd7238e79c.png) 修改dcloud_control.xml中的appid,并开启调试模式 ![](https://img-blog.csdnimg.cn/direct/e90ff62c41e34bb2bc353e035d3df0c7.png) 点击运行,我这里使用的是真机运行 ![](https://img-blog.csdnimg.cn/direct/5dea742ee6ad4b24895520fe20264f92.png) 此时会报appkey配置错误解决方案参考:appkey未配置或配置错误解决完后,重新运行一下,调试成功 ![](https://img-blog.csdnimg.cn/direct/3330c0ac7eb24b069eb267b8d9508e27.png)
参考文档:uniapp如何开发原生插件?踩坑指南(一) - 掘金某些App功能只能在原生开发才能实现,比如aidl等。这就需要使用App离线SDK来开发原生插件,以来扩展原生的能力。 https://juejin.cn/post/7194743378830409783
android studio如何打包aar,请见下一篇文章:
uniapp-android原生插件如何打aar包 (闭坑指南二)-CSDN博客
|