uniapp Android 原生插件开发(Module 扩展为例·2022)

2024-06-04 8951阅读

有问题可以在评论区找一下有没有答案;同样,有补充可以在评论区评论一下,方便其他人。

前言

本文只介绍uniapp原生插件开发流程,Android studio(后面称编辑器) 以及 java 环境的安装请自行查找相关文档解决;阅读本文者须具备基本的java、android以及uniapp相关知识及开发能力。

准备

SDK 文件

下载

首先下载uniapp原生插件开发SDK,下载地址见App离线SDK下载

uniapp Android 原生插件开发(Module 扩展为例·2022) 第1张

 解压

解压后相关文件如下图,我们只需要用到里面的示例工程UniPlugin-Hello-AS来进行插件开发就好

uniapp Android 原生插件开发(Module 扩展为例·2022) 第2张

 示例工程导入

  •  打开Android Studio,新建工程导入

    uniapp Android 原生插件开发(Module 扩展为例·2022) 第3张

    • 选择UniPlugin-Hello-AS项目,点击OK完成工程导入

      uniapp Android 原生插件开发(Module 扩展为例·2022) 第4张

      插件开发

      Module 创建

      选择新建 Module

      uniapp Android 原生插件开发(Module 扩展为例·2022) 第5张

       Module 类型选择

      选择Android Library,然后下一步

      uniapp Android 原生插件开发(Module 扩展为例·2022) 第6张

      Module 信息配置 

      配置模块名以及模块最低支持的Android SDK版本等信息,然后点击Finish完成Module创建。

      uniapp Android 原生插件开发(Module 扩展为例·2022) 第7张

      文件配置

      build.gradle文件打开

      将编辑器文件视图切换到Project,选择我们刚创建的Module目录,然后打开其根目录下的build.gradle文件

      uniapp Android 原生插件开发(Module 扩展为例·2022) 第8张

       build.gradle文件配置

      加入以下配置,dependencies里面的初始配置可以删除或注释掉,然后点击同步

      //导入aar需要的配置
      repositories {
          flatDir {
              dirs 'libs'
          }
      }
      dependencies {
          //必须添加的依赖
          compileOnly 'androidx.recyclerview:recyclerview:1.0.0'
          compileOnly 'androidx.legacy:legacy-support-v4:1.0.0'
          compileOnly 'androidx.appcompat:appcompat:1.0.0'
          compileOnly 'com.alibaba:fastjson:1.1.46.android'
          compileOnly fileTree(include: ['uniapp-v8-release.aar'], dir: '../app/libs')
      }
      

      uniapp Android 原生插件开发(Module 扩展为例·2022) 第9张

      配置混淆文件

      打开Module根目录下的proguard-rules.pro文件,在最后一行末尾加入以下代码

      -keep public class * extends io.dcloud.feature.uniapp.common.UniModule{*;}

      uniapp Android 原生插件开发(Module 扩展为例·2022) 第10张

      创建Module类

      新建类文件

      在Module的项目文件夹下创建Module类test

      uniapp Android 原生插件开发(Module 扩展为例·2022) 第11张

      继承UniModule 类 

      uniapp的Module扩展必须继承UniModule类

      uniapp Android 原生插件开发(Module 扩展为例·2022) 第12张

      功能开发

      方法定义

      定义一个sayHi方法,传入姓名时自动返回Hi + 姓名;编写扩展方法必须遵循以下两点原则:

      • 扩展方法必须加上@UniJSMethod (uiThread = false or true) 注解。UniApp 会根据注解来判断当前方法是否要运行在 UI 线程,和当前方法是否是扩展方法。
      • UniApp是根据反射来进行调用 Module 扩展方法,所以Module中的扩展方法必须是 public 类型。

        uniapp Android 原生插件开发(Module 扩展为例·2022) 第13张

         数据返回

        数据使用UniJSCallback结果回调,具体是使用invoke调用JavaScript的回调方法返回数据。更多可以参考官方文档,invoke需要传入一个Object类型的返回数据,:

        uniapp Android 原生插件开发(Module 扩展为例·2022) 第14张

        源码

        至此,一个简单的原生插件就已经开发完成,源码如下:

        package com.ss.test;
        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;
        public class test extends UniModule {
            @UniJSMethod(uiThread = true)
            public void sayHi (String name, UniJSCallback callback) {
                if (callback != null) {
                    JSONObject data = new JSONObject();
                    data.put("re", "Hi " + name);
                    callback.invoke(data);
                }
            }
        }
        

        插件调试

        证书申请

        获取 appid

        打开uniapp项目,在根目录下找到manifest.json文件,在基础配置中获取到appid

        uniapp Android 原生插件开发(Module 扩展为例·2022) 第15张

        证书生成 

        • 在uniapp 开发者后台应用管理找到对应项目点击名称进去

          uniapp Android 原生插件开发(Module 扩展为例·2022) 第16张

          •  选择证书管理,点击创建证书,等待生成成功就好

            uniapp Android 原生插件开发(Module 扩展为例·2022) 第17张

            •  生成成功后,刷新页面,下载证书,放入原生插件项目的app目录下

              uniapp Android 原生插件开发(Module 扩展为例·2022) 第18张

              证书配置

              证书详情

              在后台证书管理页面,点击证书详情获取证书信息以及证书密码

              uniapp Android 原生插件开发(Module 扩展为例·2022) 第19张

               配置

               在插件项目app目录下的build.gradle文件中,将信息依次填入文件中的signingConfigs.config配置项,然后点击右上角同步完成配置,具体如图

              uniapp Android 原生插件开发(Module 扩展为例·2022) 第20张

              插件配置

              注册插件

              在插件项目的app\src\main\assets目录下打开dcloud_uniplugins.json,在nativePlugins配置项中添加一项插件配置,type必须为module,因为我们的插件是module类型;name统一跟随插件名;具体如图所示:

              uniapp Android 原生插件开发(Module 扩展为例·2022) 第21张

              引入插件

              在插件项目app目录下的build.gradle文件中,引入刚刚注册的插件,名字与注册名字相同,然后点击同步

              uniapp Android 原生插件开发(Module 扩展为例·2022) 第22张

              离线打包Key

              sha1值获取

              在证书管理页面,证书详情里面获取证书sha1值,如图

              uniapp Android 原生插件开发(Module 扩展为例·2022) 第23张

               获取Android包名

              在插件项目app目录下的build.gradle文件中,获取Android包名,如图

              uniapp Android 原生插件开发(Module 扩展为例·2022) 第24张

               获取离线打包key

              • 在uniapp应用后台离线打包Key管理页面,将上两步获取的值填入对应输入框,然后点击保存,如图:

                uniapp Android 原生插件开发(Module 扩展为例·2022) 第25张

                •  保存后会生成离线打包Key如下:

                  uniapp Android 原生插件开发(Module 扩展为例·2022) 第26张

                   配置离线打包Key

                  在插件项目app\src\main目录下的AndroidManifest.xml文件中,将上一步生成的离线打包key配置到相应位置,如图

                  uniapp Android 原生插件开发(Module 扩展为例·2022) 第27张

                  插件项目集成uniapp项目调试

                  插件引入

                  使用uni.requireNativePlugin('插件名')方法调用插件,如下:

                  uniapp Android 原生插件开发(Module 扩展为例·2022) 第28张

                   插件方法调用

                  调用插件中的sayHi方法,利用回调函数获取返回值,具体如下:

                  uniapp Android 原生插件开发(Module 扩展为例·2022) 第29张

                  相关代码 

                  相关uniapp页面代码如下:

                  	
                  		插件调试
                  		返回信息:{{ reply }}
                  		原始数据:{{ msg }}
                  	
                  
                  
                  	const plugin = uni.requireNativePlugin('test')
                  	export default {
                  		data() {
                  			return {
                  				reply: "",
                  				msg: "",
                  			}
                  		},
                  		onLoad() {
                  			let that = this
                  			plugin.sayHi("lauwen", function (res) {
                  				that.msg = JSON.stringify(res)
                  				that.reply = res.re
                  			})
                  		},
                  		methods: {
                  		}
                  	}
                  
                  
                  	.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;
                  	}
                  
                  

                  生成本地打包资源

                  完成相关代码编写后,需要生成uniapp本地打包资源,生成之后控制台会显示相关路径,如下:

                  uniapp Android 原生插件开发(Module 扩展为例·2022) 第30张

                   复制打包资源到插件项目

                  将生成的打包资源复制到插件项目的app\src\main\assets\apps目录下

                  uniapp Android 原生插件开发(Module 扩展为例·2022) 第31张

                   配置uniapp的appid

                  在插件项目app\src\main\assets\data目录下的dcloud_control.xml文件中配置uniapp的appid,具体如下:

                  uniapp Android 原生插件开发(Module 扩展为例·2022) 第32张

                  运行调试

                  运行

                  在Android Studio中运行项目,如下

                  uniapp Android 原生插件开发(Module 扩展为例·2022) 第33张

                  运行结果 

                  运行结果如下,成功输出插件预置信息:

                  uniapp Android 原生插件开发(Module 扩展为例·2022) 第34张

                  uniapp项目引入原生插件

                  以上介绍了插件开发过程中,集成uniapp项目进行调试的方法;插件开发完成后,需要将原生插件引入uniapp项目中才可以使用。

                  打包插件

                  SDK版本统一

                  插件包、APP以及uniapp项目的androidSDK版本应该统一一下,避免后续编译打包出错,如图:

                  uniapp Android 原生插件开发(Module 扩展为例·2022) 第35张

                  开始编译 

                  打开Android Studio,在插件项目中,打开右上角Gradle栏目,选择插件开发项目,选择插件打开,依次点开Tasks-other,然后双击assembleRelease即可进行插件编译,如图:

                  uniapp Android 原生插件开发(Module 扩展为例·2022) 第36张

                  获取插件

                  编译成功后,就可以在插件目录的build/outputs/arr目录下找到编译好的插件

                  uniapp Android 原生插件开发(Module 扩展为例·2022) 第37张

                  引入插件

                  创建目录

                  在uniapp项目中创建nativeplugins目录,然后根据插件名创建插件目录,再在其下一级创建插件相应系统目录,然后将插件复制到该目录,如图:

                  uniapp Android 原生插件开发(Module 扩展为例·2022) 第38张

                  创建插件包配置文件

                  在包目录下创建package.json包信息文件,用于配置包信息,具体配置如下:

                  • name 和 id建议与插件名统一
                  • plugins中的配置与插件配置-注册插件步骤中所填一样
                  • dependencies:如果原生插件引入了第三方SDK,需要在此参数中配置,具体可以参考相关官方文档dependencies
                    {
                        "name": "test",
                        "id": "test",
                        "version": "0.0.2",
                        "description": "测试插件流程",
                        "_dp_type":"nativeplugin",
                        "_dp_nativeplugin":{
                            "android": {
                                "plugins": [
                                    {
                                        "type": "module",
                                        "name": "test",
                                        "class": "com.ss.test.test"
                                    }
                                ],
                    			"integrateType": "aar",
                                "parameters": {
                                    
                                },
                                "dependencies": []
                            }
                        }
                    }
                    

                    uniapp Android 原生插件开发(Module 扩展为例·2022) 第39张

                    引入插件

                    在uniapp项目的manifest.json文件中添加配置好的插件,至此引入完成,如图:

                    uniapp Android 原生插件开发(Module 扩展为例·2022) 第40张

                    打包自定义基座

                    新建基座打包

                    如图,依次点击三者进行自定义基座打包配置

                    uniapp Android 原生插件开发(Module 扩展为例·2022) 第41张

                     基座打包配置

                    如图三个输入框,分别填入前面在uniapp后台获取的证书以及相关信息,然后执行打包就好

                    uniapp Android 原生插件开发(Module 扩展为例·2022) 第42张

                    基座运行测试 

                    选择运行基座

                    运行基座类型选择自定义基座

                    uniapp Android 原生插件开发(Module 扩展为例·2022) 第43张

                    运行自定义基座

                     基座打包成功后,运行自定义基座到手机测试

                    uniapp Android 原生插件开发(Module 扩展为例·2022) 第44张

                    运行结果

                    如图,与插件调试过程中一样,输出正常

                    uniapp Android 原生插件开发(Module 扩展为例·2022) 第45张

                    其它

                    jniLibs包引入

                    一般jniLibs结构

                    uniapp Android 原生插件开发(Module 扩展为例·2022) 第46张

                    插件引入jniLibs库

                    把相关包放到插件libs目录下

                    uniapp Android 原生插件开发(Module 扩展为例·2022) 第47张

                    添加jniLibs库

                    右键包中.jar文件,选择Add As Library,,然后选中当前插件包,点击OK添加就好

                    uniapp Android 原生插件开发(Module 扩展为例·2022) 第48张

                    配置插件包build.gradle

                    经过上一步的添加动作,jar文件已经自动引入了,如图中1标所示;然后需要将2标的配置添加进去,点击同步就好,然后就可以正常使用包了

                    uniapp Android 原生插件开发(Module 扩展为例·2022) 第49张

                    参考 

                    • 官方文档:原生开发者支持

    免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

    目录[+]