uniapp 原生安卓开发插件(module),以及android环境本地调试(一)

2023-11-14

uniapp 原生安卓开发插件(module),以及android环境本地调试

1、开发前景

由于uniapp 框架的局限先,有很多功能不能如原生android开发使用顺畅,因此,需要使用插件进行辅助,再由uniapp引入插件,使得功能完善。废话不多说,直接上教程!觉得有用的麻烦点个赞吧!

2、准备工作

  • uniapp 项目(也就是你自己的项目)
  • 下载 安装JDK (java的JDK)jdk1.8
  • 下载 安装 android studio (csdn下载),官网下载 android studio(官网下载需要翻墙、安装的时候也是需要翻墙的,公司的网络最好能够访问外网,不然会下载不了sdk(博主也是弄了很久))
  • 下载解压 uniapp 离线SDKApp 离线SDK
    在这里插入图片描述
    到此准备工作结束

3、android 导入 app离线SDK(第二点4下载的压缩包)

  • 解压 app离线SDK
    在这里插入图片描述
    在这里插入图片描述

  • 将UniPlugin-Hello-AS项目导入到Android studio中
    在这里插入图片描述

  • 等待导入编译完成,切换到 project模式。编译完成后的项目结构如下
    在这里插入图片描述

4、新建module(实现我们功能的模块)

  • 新建module
    在这里插入图片描述

  • 选择Android library,填上你的package name (记住不能跟uniapp 打包时候的包名相同(这是个坑,uniapp不兼容)),点击Finish
    在这里插入图片描述

  • 导入导入uniapp-release.aar插件,它是扩展module主要依赖库
    在 App离线SDK 中 —> SDK 文件夹 ----> libs -----> 找到 uniapp-release.aar
    在这里插入图片描述
    把它移动到 之前 android 导入的项目中,切换到 project 目录

在这里插入图片描述

  • 给新建的module (uniplugin_sunmi 是我自己新建模块)添加 依赖
repositories {
    flatDir {
        dirs 'libs'
    }
}

dependencies {
    compileOnly fileTree(dir: 'libs', include: ['*.jar'])

    compileOnly fileTree(dir: '../app/libs', include: ['uniapp-v8-release.aar'])

    implementation 'androidx.recyclerview:recyclerview:1.0.0'
    implementation 'androidx.legacy:legacy-support-v4:1.0.0'
    implementation 'androidx.appcompat:appcompat:1.0.0'
    implementation 'com.alibaba:fastjson:1.1.46.android'
    implementation 'com.facebook.fresco:fresco:1.13.0'
    testImplementation 'junit:junit:4.12'

}

在这里插入图片描述

如果同步失败,请检查是否出现 下图错误 No signature ofm.android0 is applicable for arg
Try Again Open ‘Build’ View
Show Log in Explorer

在这里插入图片描述
请删除 namespace,再在找到androidManifest.xml 添加包名,再点击 file —> sync project whit Gradle Files 进行同步即可
在这里插入图片描述

  • 新建 java类 (用于实现我们功能的类)
    在这里插入图片描述
    在这里插入图片描述
    去到 AndroidManifest.xml 文件中配置(必须项)
 <application>
        <activity android:name="com.example.uniplugin_sunmi.ScanCode"
            android:theme="@android:style/Theme.DeviceDefault.Light.NoActionBar"></activity>
    </application>

在这里插入图片描述
编写模块类(也就是我们新建的类名),编写测试代码
注意:继承UniModule,并添加@UniJSMethod注解(哪个功能方法需要抛出给uniapp使用就加上这个注解

package com.example.uniplugin_sunmi;

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 ScanCode 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
    在这里插入图片描述
  • 在dcloud_uniplugin.json中新增插件,注意:插件命名会在uniapp中引用
    在这里插入图片描述
  • 给模块打包成插件aar文件
    在这里插入图片描述
    如果没有找到assmbleRelese按钮,可以进行设置
    在这里插入图片描述
    在这里插入图片描述
    打完包即可在build中查看到aar文件
    在这里插入图片描述

5、在uniapp中使用

  • 创建插件目录,配置刚打好的插件
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    package.json 配置
{
	"name": "sunmi-scan",
	"id": "sunmi-scan",
	"version": "1.0.0",
	"description": "订单的",
	"_dp_type": "nativeplugin",
	"_dp_nativeplugin": {
		"android": {
			"integrateType": "aar",
			"plugins": [{
				"type": "module",
				"name": "sunmi-scan",
				"class": "com.example.uniplugin_sunmi.ScanCode"
			}],
			 "minSdkVersion": "19"
		}
	}
}

在这里插入图片描述

  • 使用插件
    在这里插入图片描述
    在这里插入图片描述

添加本地插件

  • 使用插件
    在页面中引入
<template>
  <view class="content">
    <image class="logo" src="/static/logo.png"></image>
    <view class="text-area">
      <button @click="test">测试</button>
    </view>
  </view>
</template>

<script setup lang="ts">
  const test= ()=>{
    // 引入自定义插件
    const testModule = uni.requireNativePlugin('sunmi-scan')
    // 使用module的add方法
    testModule.add({
      a:1,b:3
    },e=>{
      uni.showToast({
        title:JSON.stringify(e),
        icon:'none'
      })
    })
  }
</script>

最后:打包成为基座进行测试(最主要的)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

uniapp 原生安卓开发插件(module),以及android环境本地调试(一) 的相关文章

  • Android webview 滚动不起作用

    我正在尝试在网络视图中向下滚动到页面底部 我正在使用谷歌在其教程中提供的网络视图示例 我正在使用这行代码来尝试滚动 但它不起作用 mWebView pageDown true 关于如何使其以编程方式滚动有什么建议吗 谢谢 public cl
  • 在android中通过BLE传输图像

    我使用以下代码传输 1 MB 的图像 如果在每个数据包之间实现线程延迟 则图像将成功传输 如果未设置线程延迟 则所有数据包均从BluetoothGattServer 发送 但BluetoothGattCallback 不会接收所有数据包 任
  • 通过 WhatsApp 发送消息

    由于我发现了一些较旧的帖子 表明 Whatsapp 不支持此功能 我想知道是否发生了变化 以及是否有办法打开与我通过意图发送的号码进行 Whatsapp 聊天 UPDATE请参阅https faq whatsapp com en andro
  • 自定义选择器活动:SecurityException UID n 无权 content:// uri

    我正在构建一个选择器应用程序来替换本机 Android 共享对话框 它工作正常 除非我尝试通过长按图像 gt 共享图像从 Chrome 共享图像 我发现 Google 没有捕获异常 它崩溃了 所以我可以通过 Logcat 查看它 在 Goo
  • 如何使用Android opencv使图像的白色部分透明

    我无法链接超过 2 个网址 因此我将我的照片发布到此博客 请在这里查看我的问题 http blog naver com mail1001 220650041897 http blog naver com mail1001 220650041
  • 带有一、二和三个按钮的 Android 警报对话框

    我不经常发出警报 但每次发出警报时 我都会花一些时间来阅读文档 https developer android com guide topics ui dialogs html并弄清楚如何去做 由于我现在不得不这样做几次 所以我将在下面写一
  • 播放 SoundCloud 曲目

    我可以在 Android 应用程序中播放 SoundCloud 中的曲目吗 我正在尝试这段代码 但它不起作用 String res https api soundcloud com tracks 84973999 stream client
  • Android在排序列表时忽略大小写

    我有一个名为路径的列表 我目前正在使用以下代码对字符串进行排序 java util Collections sort path 这工作正常 它对我的 列表进行排序 但是它以不同的方式处理第一个字母的情况 即它用大写字母对列表进行排序 然后用
  • Android 自定义布局 - onDraw() 永远不会被调用

    public class MainActivity extends Activity Override public void onCreate Bundle savedInstanceState super onCreate savedI
  • 出现错误错误:res/menu/mainMenu.xml:文件名无效:必须仅包含[a-z0-9_。]

    我是安卓新手 刚刚开始使用 我在 res 文件夹中创建了一个文件 menu mainMenu xml 但我得到了错误 Error res menu mainMenu xml invalid file name must contain on
  • AudioTrack、SoundPool 或 MediaPlayer,我应该使用哪个?

    如果我需要能够 播放多个音频文件 具有不同的持续时间 例如 5 到 30 秒 独立设置右 左声道的音量 应用声音效果 如混响 失真 那么 我应该使用哪个 API 另外 我在 AudioTrack API 上找不到太多文档 有谁知道在哪里可以
  • 如何在手机缓存中保存用户名和密码

    我有一个用户登录应用程序 它需要用户的电子邮件和密码 我想将电子邮件和密码保存在手机缓存中 以便用户不必再次输入 有什么办法可以将数据保存在Android缓存中吗 我认为你需要使用SharedPreference用于在设备中使用应用程序时保
  • Android 应用程序中的 Eszett (ß)

    我的 res layout activity 文件中的德语 字符在我的应用程序中自动转换为 ss 即使我将语言和键盘设置为德语 它仍然不会显示 Android 中可以显示 吗 edit
  • Android Studio:未找到 Gradle DSL 方法:“classpath()”

    首先 我已阅读所有其他解决方案帖子以及有关迁移到 1 0 的官方文档 到目前为止 还没有任何效果 Error Error 23 0 Gradle DSL method not found classpath Possible causes
  • Android FragmentTransaction 自定义动画(未知动画师名称:Translate)

    我正在尝试让自定义动画与我的片段一起使用 我已按照在线教程进行操作 但出现以下错误 java lang RuntimeException 未知的动画师名称 翻译 动画的 XML 如下
  • HERE 地图:更改路线已行驶部分的颜色

    导航时可以改变路线的颜色吗 具体来说 我希望路线中已行驶的部分的颜色与即将行驶的部分的颜色不同 现在都是同一个颜色 将 MapRoute 对象的 TravelColor 变量设置为透明对我来说很有效 mapRoute color Resou
  • 按钮 - 单击时更改背景颜色

    我的活动中有 8 个按钮 我正在寻找的是 按钮具有默认背景 单击按钮时 背景颜色应更改为其他颜色 这部分非常简单 但是 当我单击任何其他按钮时 第一个按钮的背景颜色应该变回默认颜色 我知道这将使用 选择器状态 来完成 但我不太确定如何实现它
  • 错误:无法创建新会话,因为找不到需要 HttpClient、InputStream 和 long 的“createSession”

    我正在尝试自动化 Android 混合应用程序 但出现以下错误 1 线程 main org openqa selenium WebDriverException中出现异常 无法创建新会话 因为未找到需要 HttpClient InputSt
  • Android:AsyncTask ProgressDialog 将不会在 ActivityGroup 中打开

    我试图在轮询我的服务器时打开一个进度对话框 该类是一个 ActivityGroup 因为它嵌套在选项卡栏中 为了将视图保持在框架内 需要 ActivityGroup 这是我的 ActivityGroup 类的声明 public class
  • 如何在片段中实现 onBackPressed() 和意图?

    我知道 onBackPressed 是活动中的一种方法 但是 我想在片段中使用该功能 以便当按下后退按钮时 它会通过 Intent 重定向到另一个活动 有什么办法解决这个问题吗 public class News Events fragme

随机推荐

  • 东北大学acm暑期夏令营结构体

    NEUQ ACM CAMP B011 结构体 枚举 NEUQ ACM CAMP B011 结构体 枚举 开始时间 2022 08 18 08 07 00 结束时间 2022 08 31 23 59 00 答题时长 19672分钟 答卷类型
  • 解决Windows server 2003不认U盘

    解决Windows server 2003不认U盘或移动硬盘 2009 05 18 23 08 47 标签 电脑 usb接口 移动硬盘 盘符 it 分类 电脑网络 答案一 快速解决办法 一 U盘以及移动硬盘自动装载也是一样的 WINDOWS
  • Exception in thread “main“ java.lang.ArrayIndexOutOfBoundsException: 6问题

    今天在java中出现了一个这样的问题 Exception in thread main java lang ArrayIndexOutOfBoundsException 6 at com wyt demo3 Role attack Role
  • valgrind android编译、安装

    valgrind android编译 安装 参见valgrind 3 12 0 tar bz2中的README android文件 以下步骤 遵循README android说明 注意VALGRIND LIB是程序内部环境变量 export
  • static在C和C++中的区别

    以下内容参考博客 https www cnblogs com Manual Linux p 8870038 html static在C语言中的区别 1 static修饰变量的时候 静态局部变量只被执行一次 延长了整个局部变量的生命周期 直到
  • linux下RDP客户端及服务器

    tsclient redsktop remmina gt 对ubuntu支持的非常不错 XRdp 集合vnc作为rdp服务器端使用
  • Java注释及分隔符 基础知识

    一 用于单行注释 用于多行注释 文档注释 文档注释属于多行注释的一种 二 空白符 空格 制表符 t 走页换页 f 回车 r 换行 n
  • 使用python指定个数随机生成一组混合字符集

    今天做测试想生成混合的id或者密码 思考了有很多方式 比如可以加入datetime库 然后截取一部分 或者随机生成一部分 进行替换 添加 这里采取一种简单易懂的方式 一 运行结果示范 就是这种效果 生成多少位数 18 ry3Gu aVr8V
  • STM32 基础系列教程 30 - 文件系统

    前言 学习stm32中FATFS 文件系统的基础使用 学会文件的打开及读写删除等基本操作 理解文件系统基本概念 示例详解 基于硬件平台 STM32F10C8T6最小系统板 MCU 的型号是 STM32F103c8t6 使用stm32cube
  • 学习HC-SR04超声波测距模块,代码附带卡尔曼滤波

    硬件引脚 VCC 供5V的电压 一定要是5v GND 接地 Trig HC SR04超声波测距模块上的触发引脚 用于向模块发送一个10微秒的高电平触发信号 触发模块开始进行距离测量 Echo 用于接收超声波回波信号的引脚 工作原理 使用HC
  • js根据本地文件路径上传文件(流上传)

    最近使用vue做了个项目 把本地指定url下的png图片上传 废话不多说 直接上代码 var fs require fs 需要引入nodejs中的文件操作部分 var http require http 需要引入nodejs中http请求部
  • 软件自动化测试工具/平台的挑战

    今天在微信读书偶然读到 高效自动化测试平台 设计与开发实战 作者徐德晨和茹炳晟 该书1 2章节详细讲述了软件自动化测试工具 平台的七个挑战 下面结合一站式开源持续测试平台项目MeterSphere详解这七个挑战 GitHub metersp
  • linux系统编程-1、基础知识

    前言 Linux系统编程的基础系列文章 随着不断学习会将一些知识点进行更新 前期主要是简单了解和学习 文章目录 shell bash 命令和路经补齐 历史记录 目录和文件 类Unix系统目录结构 用户目录 ls cd which pwd m
  • 请用美丽欢呼-------Day38

    周末 双休 疯了两天 敲了寥寥的代码 却没少看了相关的文章 这电子书大行于世的年代 对工具的漠然简直就是对生命的亵渎 颠簸的公交车上算是告别了YY的惬意 这生活 感觉傻了点 可真够味 原本只是想写篇 html的发展历程 的 可XHTML 2
  • Java并发编程:并发容器之CopyOnWriteArrayList(转载)

    http www cnblogs com dolphin0520 p 3938914 html 原文链接 http ifeve com java copy on write Copy On Write简称COW 是一种用于程序设计中的优化策
  • 基于YOLOv8模型和CrowdHuman数据集的行人检测系统(PyTorch+Pyside6+YOLOv8模型)

    摘要 基于YOLOv8模型和CrowdHuman数据集的行人目标检测系统可用于日常生活中检测与定位行人 Human 利用深度学习算法可实现图片 视频 摄像头等方式的目标检测 另外本系统还支持图片 视频等格式的结果可视化与结果导出 本系统采用
  • python 利用表格批量修改文件夹(包括子文件夹)下所有文件名

    首先是获得需要修改文件的路径放入xlsx中 我一般直接在系统的搜索框中搜索 然后全选复制路径 偷个小懒 也可以再写个自动遍历所有文件获取地址 点击这个复制路径即可复制全部选中文件的路径 直接复制在表格第一列即可 便于读取 然后按照自己实际的
  • SQL调优的几个方法

    1 为什么调优 好处是什么 SQL语句在编写之后 对于数据量较少的表基本没有什么性能上的需求 但是如果考虑到性能方面的话 SQL语句优化就是必须的 2 如何调优 调有点方法有哪些 1 对查询进行优化 应尽量避免全表扫描 首先考虑在where
  • node 版本管理器 --- Volta

    鲸腾FE 来自恒生鲸腾网络 是一支专注于 web 前端的开发团队 并在 web 前端领域积累了多年疑难问题解决经验 崇尚高效 优质 成长 自由 快乐 前言 在我们的日常开发中经常会遇到这种情况 手上有好几个项目 每个项目的需求不同 然而不同
  • uniapp 原生安卓开发插件(module),以及android环境本地调试(一)

    uniapp 原生安卓开发插件 module 以及android环境本地调试 1 开发前景 由于uniapp 框架的局限先 有很多功能不能如原生android开发使用顺畅 因此 需要使用插件进行辅助 再由uniapp引入插件 使得功能完善