uni-app与原生插件混合开发调试3-安卓原生插件开发调试和打包

news/2024/7/3 5:33:21 标签: uni-app, android

 安卓原生插件开发调试和打包

上面已经介绍了怎么安装开发和调试环境,接下来就是安卓原生插件的具体开发和调试步骤:

将uniapp前端项目的index.vue文件新增代码。代码如图所示:

<template>
    <view>
        <view>
            <text>{{title}}</text>
        </view>
        
        <button @click="test">测试</button>
    </view>
</template>

<script>
    const ceshiMethodPlugin = uni.requireNativePlugin('ceshi-method');
    export default {
    data() {
            return {
        title: 'Hello'
            }
    },
    onLoad() {
            console.log('ceshiMethodPlugin', ceshiMethodPlugin);
    },
    methods: {
            /**
             * 测试原生插件
            */
            test() {
                ceshiMethodPlugin.ceshiStart('搞起来', (res) => {
                    console.log('res', res);
                    this.title = res.msg;
        })
            }
    }
    }
</script>

重新打包,重新放到Android studio项目app/src/main/assps/目录下。重新启动run,项目启动成功。

第二步 创建自己的插件项目

这步主要参考# uniapp开发安卓原生插件,不能说一模一样,只能说一毛一样,谢谢大佬文章@fly_dream。

操作:File =》 New =》 New Module =》 Android Library

新建完毕后,开始移花接木,把官方示例uniplugin_module的配置复制过去。在当前ceshi目录下,打开proguard-rules.pro文件,加入以下代码

scala复制代码-keep public class * extends io.dcloud.feature.uniapp.common.UniModule{*;}

先将java文件进行转换为 Sources Root(如果已经是了,就不用转了),操作如下图

创建Module类

填写插件代码

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

scala复制代码package com.example.ceshi; 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 CeshiMethod extends UniModule { @UniJSMethod(uiThread = true) public void ceshiStart (String name, UniJSCallback callback) { if (callback != null) { JSONObject data = new JSONObject(); data.put("msg", name + ":你小子,真棒"); callback.invoke(data); } } }

在AndroidManifest.xml填写包入口,package="uni.dcloud.io.ceshi"

测试插件代码完毕。

第三步 将插件导入到项目中

在APP目录的burild.gradle中引入插件包。跟着官方示例照葫芦画瓢。

java复制代码implementation project(':插件包名')

在src/main/assets/dcloud_uniplugins.json文件中声明类名称。也是跟着官方示例照葫芦画瓢。

配置完成,Sync now 同步完后重新启动。插件流程自此结束。

备注:插件的开发与调试建议在Android studio中进行,若前端项目代码需要改动重新本地打包一下,再进入到Android studio即可。这个过程是很快的。而若是将插件进行打包,放到uniapp上进行调试,当插件需要更改,需要重新制作自定义调试基座,这个是需要云打包的,是非常慢的。总代来说,就是在Android studio中调试,uniapp前端项目可以本地打包,而在uniapp中调试,需要云打包,速度是很慢的,贼耽误时间。

第四步 打包插件,在uniapp中启动

打包插件

备注:有些 Android Studio 中右侧的 gradle 只有dependens,没有tasks任务栏。 此时点击左上角 File =》 Settings,再同步一下配置即可,按下图操作即可

此步骤引用至# uniapp开发安卓原生插件,再次感谢@fly_dream。此文中表示打包可能出会出版本问题,由于个人并非出现,并不了解,有此问题的小伙伴可参考大佬的文章。

将插件包配置到前端项目

在uniapp项目中新建unipluginDemo文件夹=》新建插件包ceshi文件夹=》新建android文件夹与package.js配置文件。将插件压缩包放到android文件夹中。uniapp会加载android文件夹中的插件,你只需在package.js中配置好文件参数即可。

注意别把package.js放到android文件夹中。

配置package.js文件,更多配置可参考uniapp官网插件参数配置进行配置。

{ "name": "ceshi",
  "id": "ceShi",
  "version": "1.0.0",
  "description": "测试用",
  "_dp_type": "nativeplugin",
  "_dp_nativeplugin": {
    "android": {
      "plugins": [
        {
          "type": "module",
          "name": "ceshi-method",
          "class": "com.example.ceshi.CeshiMethod"
        }
      ],
      "integrateType": "aar",
      "parameters": {},
      "dependencies": [
            "io.mx51:spi-client-java:2.9.5"
      ]
    }
  }
}

前端项目调用API的时候,调用的是就是配置里的name

在uniapp项目中添加插件

制定自定义基座

android证书就用本地生产的那个,与android Studio保持一致。测试的话,可以直接使用公共测试证书,更简单一些。

启动项目

错误排查

console 插件对象,若是undefined,则证明无此插件,检查name名称是否对应得上。若是空数组,证明插件已经引入,可能是类名填写错误


http://www.niftyadmin.cn/n/5534609.html

相关文章

【问题记录】Ubuntu提示: “E: 软件包 gcc 没有可安装候选“

Ubuntu提示: "E: 软件包 gcc 没有可安装候选" 一&#xff0c;问题现象二&#xff0c;问题原因&解决方法 一&#xff0c;问题现象 在虚拟机Ubuntu中进行安装gcc命令时报错&#xff1a;“E: 软件包 gcc 没有可安装候选”: 二&#xff0c;问题原因&解决方法 …

计算机组成原理笔记-第4章 存储器

第4章 存储器 笔记PDF版本已上传至Github个人仓库&#xff1a;CourseNotes&#xff0c;欢迎fork和star&#xff0c;拥抱开源&#xff0c;一起完善。 该笔记是最初是没打算发网上的&#xff0c;所以很多地方都为了自我阅读方便&#xff0c;我理解了的地方就少有解释&#xff1b…

React+TS前台项目实战(十七)-- 全局常用组件Dropdown封装

文章目录 前言Dropdown组件1. 功能分析2. 代码详细注释3. 使用方式4. 效果展示 总结 前言 今天这篇主要讲全局Dropdown组件封装&#xff0c;可根据UI设计师要求自定义修改。 Dropdown组件 1. 功能分析 &#xff08;1&#xff09;通过position属性,可以控制下拉选项的位置 &am…

Python中文自然语言处理(NLP)中文分词工具库之pkuseg使用详解

概要 在中文自然语言处理(NLP)中,分词是一个基础且关键的任务。pkuseg 是由北京大学开发的一个中文分词工具,专为处理现代汉语而设计。它采用了先进的深度学习技术,能够准确地进行中文分词,同时支持自定义词典和多领域分词。本文将详细介绍 pkuseg 库,包括其安装方法、…

Spring Boot 快速入门2 ——SpringBoot运行原理分析

一、SpringBoot运行原理 父依赖 我们再查看 Spring Boot 项目中 pom.xml 可以看出&#xff0c;所有的 Spring Boot 项目 直接或间接的 依赖于一个 父项目 spring-boot-starter-parent &#xff0c;主要是管理项目的资源及其插件。 <parent><groupId>org.sprin…

【Android WebView】WebView基础

一、简介 WebView是一个基于webkit引擎、展现web页面的控件。Android的Webview在低版本和高版本采用了不同的webkit版本内核&#xff0c;4.4后直接使用了Chrome。 二、重要类 以WebView类为基础&#xff0c;WebSettings、WebViewClient、WebChromeClient为辅助共同完成安卓段加…

Java五子棋之坐标校正

上篇针对了Java项目中的解构思维&#xff0c;在这篇内容中我们不妨从整体项目中拆解拿出一个非常重要的五子棋逻辑实现&#xff1a;坐标校正&#xff0c;我们如何使漫无目的鼠标点击变得有序化和可控化呢&#xff1f; 目录 一、从鼠标监听到获取坐标 1.MouseListener和Mouse…

FPGA PCIe加载提速方案

目录 1.bit流压缩 2.flash加载速度 3.Tandem模式 1.bit流压缩 set_property BITSTREAM.GENERAL.COMPRESS TRUE [current_design] 2.flash加载速度 打开bitstream setting&#xff0c;设置SPI的线宽和速率&#xff08;线宽按原理图设置&#xff0c;速率尽可能高&#xff09…