开发uniapp插件包aar文件,使uniapp可以调用jar包

2024-06-21 08:36

本文主要是介绍开发uniapp插件包aar文件,使uniapp可以调用jar包,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

背景

使用 uniapp 开发应用时,很多时候都需要调用第三方的sdk,一般以 jar 为主。为了应对这个问题,官方提供了插件方案,可以将第三方 jar 包进行封装为 aar 包后,再集成到 uniapp 中使用。

一、环境安装工具

1、jdk1.8环境(略)
2、Android studio官网下载 或者 Android Studio中文社区
3、Android studio安装教程
4、最新Android离线SDK下载
5、自有证书生成

二、基础工程准备

  1. 安装好android studio后,导入离线SDK中UniPlugin-Hello-AS安卓项目

    在这里插入图片描述

导入后,等待下载相关依赖,根据提示去补全sdk。确认没有错误后即可。

在这里插入图片描述
在这里插入图片描述

这里除了 app 之外的其他几个 module ,uniplugin_moduleuniplugin_componentuniplugin_rrichalert 是示例,都可以删除,你也可以留着参考。

如果删除这几个 module,则需要同时删除 app/build.grade 文件中的依赖和 app/src/main/assets/dcloud_uniplugins.json 中间中的内容,如下图所示:

在这里插入图片描述

在这里插入图片描述

三、创建组件

在项目根目录右击 New > Module > Android Library

在这里插入图片描述

在这里插入图片描述

到此,Module Library 创建完成。

此时刚刚创建完成后会出现编译错误 No signature of method: build_*.android() is applicable for argument types 或者 Package Name not found in xxxxxx,这是因为我们刚刚创建项目 AndroidManifest.xml 中没有 package 属性导致的,继续向下进行,下面会讲。

1)先编辑刚刚创建的这个组件目录中的 build.gradle 文件。在最后面找到 dependencies 节点,添加导入 libs 有关的两行配置,如下:

// 这个libs是指当前module往后退一层后app目录中的libs,那个libs中有uniapp-v8-release.aar文件
compileOnly fileTree(dir: '../app/libs', include: ['uniapp-v8-release.aar'])
// 这个libs是指当前module中的libs目录
implementation fileTree(dir: 'libs', include: ['*.aar', '*.jar'], exclude: [])

**特别注意:**因为使用不同版本的 Android Studio 创建的 Module,生成的 build.gradle 里面的内容是可能不同的,这样可能会出现你这个 module 无法正常编译构建的问题,所以这里我建议复制一份 uniplugin_module 中的 build.gradle,再修改,下面是我的完整的 build.gradle 的内容:

apply plugin: 'com.android.library'android {
//    namespace 'com.example.myfirstlibrary'compileSdkVersion 29defaultConfig {minSdkVersion 16targetSdkVersion 28versionCode 1versionName "1.0"testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
//        consumerProguardFiles "consumer-rules.pro"}buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'}}compileOptions {sourceCompatibility JavaVersion.VERSION_1_8targetCompatibility JavaVersion.VERSION_1_8}
}repositories {flatDir {dirs 'libs'}
}dependencies {// 这个libs是指当前module往后退一层后app目录中的libs,那个libs中有uniapp-v8-release.aar文件compileOnly fileTree(dir: '../app/libs', include: ['uniapp-v8-release.aar'])// 这个libs是指当前module中的libs目录implementation fileTree(dir: 'libs', include: ['*.aar', '*.jar'], exclude: [])compileOnly 'androidx.appcompat:appcompat:1.0.0'/*implementation 'com.google.android.material:material:1.12.0'testImplementation 'junit:junit:4.13.2'androidTestImplementation 'androidx.test.ext:junit:1.1.5'androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'*/
}

在这里插入图片描述

2)编辑当前创建的 module 中的 AndroidManifest.xml,添加 package 属性,如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.myfirstlibrary"></manifest>

在这里插入图片描述

如未配置 package 属性,会出现编译错误 Package Name not found in xxxxxx UniPlugin-Hello-AS\myfirstlibrary\src\main\AndroidManifest.xml

3)添加第三方 jar 包和对应依赖

将第三方 jar 包拷贝到 libs 目录中,如果该 jar 包需要依赖其他 jar 包,你可以选择将相关依赖的 jar 包都拷贝到 libs中,或者在 build.grade 的 dependencies 中添加依赖,最后点击右上角的 Sync Now 刷新依赖。

本例导入一个第三方的 jar包来演示对字符串进行处理测试,导入 jar 包后的截图如下:

在这里插入图片描述

4)在 src > main > java 的包中,新建测试的 Java类,继承io.dcloud.feature.uniapp.common.UniModule,然后在里面编写自己的业务逻辑代码。

在这里插入图片描述

package com.example.myfirstlibrary;import net.iharder.Base64;import java.io.IOException;import io.dcloud.feature.uniapp.annotation.UniJSMethod;
import io.dcloud.feature.uniapp.bridge.UniJSCallback;
import io.dcloud.feature.uniapp.common.UniModule;/*** 继承 UniModule 并在需要被 uniapp 调用的方法上添加 @UniJSMethod 注解* <p>* UniJSMethod 中的 uiThread 属性决定了被标记的方法是否在主线程(UI 线程)中执行。* uiThread = true: 当 uiThread 设置为 true 时,标记的方法将在 UI 线程中执行。UI 线程是负责处理用户界面更新的线程,因此,如果方法涉及到 UI 更新、视图操作等,应该在 UI 线程中执行。否则,在非 UI 线程中进行这些操作会导致异常。* uiThread = false: 当 uiThread 设置为 false 时,标记的方法将在后台线程中执行。这适用于耗时操作、IO 操作或需要在后台完成的任务,不会阻塞 UI 线程。*/
public class HelloUniappModule extends UniModule {/*** 测试加密字符串** @param str      参数* @param callback js回调*/@UniJSMethodpublic void testEncodeStr(String str, UniJSCallback callback) {if (callback != null) {String result = Base64.encodeBytes(str.getBytes());callback.invoke(result);}}@UniJSMethodpublic void decodeBase64(String encodedStr, UniJSCallback callback) throws IOException {if (callback != null) {byte[] decodedBytes = Base64.decode(encodedStr);callback.invoke(new String(decodedBytes));}}}

三、配置插件

1、文件 app/src/main/assets/dcloud_uniplugins.json,添加内容如下:

{"nativePlugins": [{"plugins": [{"type": "module","name": "My-First-Plugin","class": "com.example.myfirstlibrary.HelloUniappModule"}]}]
}

2、文件 app/build.grade 添加插件

在这里插入图片描述

四、打包插件

在这里插入图片描述

默认情况下打包是 debug 打包,生成的 aar 文件中也包含 debug 字样,我们最终使用还是希望使用 release 正式版,并且正式版本你可能做了混淆或者压缩对其等处理(具体配置可以在 build.gradle 文件的 buildTypes 块中配置。

如果希望进行 release 打包,如下图所示操作即可:

在这里插入图片描述

切换 buildType 后,再执行构建,生成的包就是对应类型的文件了。

在这里插入图片描述

最后,将这个 aar 文件拷贝出来添加到 uniapp 代码工程里使用,至于如何在 uniapp 中集成并使用 aar 文件,本文不做赘述。

官方文档: 开发者须知 | uni小程序SDK
参考资料:uniapp调用Java库 | uniapp使用第三方jar


(END)

这篇关于开发uniapp插件包aar文件,使uniapp可以调用jar包的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1080721

相关文章

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

使用Python开发一个现代化屏幕取色器

《使用Python开发一个现代化屏幕取色器》在UI设计、网页开发等场景中,颜色拾取是高频需求,:本文主要介绍如何使用Python开发一个现代化屏幕取色器,有需要的小伙伴可以参考一下... 目录一、项目概述二、核心功能解析2.1 实时颜色追踪2.2 智能颜色显示三、效果展示四、实现步骤详解4.1 环境配置4.

Python使用smtplib库开发一个邮件自动发送工具

《Python使用smtplib库开发一个邮件自动发送工具》在现代软件开发中,自动化邮件发送是一个非常实用的功能,无论是系统通知、营销邮件、还是日常工作报告,Python的smtplib库都能帮助我们... 目录代码实现与知识点解析1. 导入必要的库2. 配置邮件服务器参数3. 创建邮件发送类4. 实现邮件

Java调用C#动态库的三种方法详解

《Java调用C#动态库的三种方法详解》在这个多语言编程的时代,Java和C#就像两位才华横溢的舞者,各自在不同的舞台上展现着独特的魅力,然而,当它们携手合作时,又会碰撞出怎样绚丽的火花呢?今天,我们... 目录方法1:C++/CLI搭建桥梁——Java ↔ C# 的“翻译官”步骤1:创建C#类库(.NET

IDEA如何实现远程断点调试jar包

《IDEA如何实现远程断点调试jar包》:本文主要介绍IDEA如何实现远程断点调试jar包的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录问题步骤总结问题以jar包的形式运行Spring Boot项目时报错,但是在IDEA开发环境javascript下编译

Java -jar命令如何运行外部依赖JAR包

《Java-jar命令如何运行外部依赖JAR包》在Java应用部署中,java-jar命令是启动可执行JAR包的标准方式,但当应用需要依赖外部JAR文件时,直接使用java-jar会面临类加载困... 目录引言:外部依赖JAR的必要性一、问题本质:类加载机制的限制1. Java -jar的默认行为2. 类加

java -jar命令运行 jar包时运行外部依赖jar包的场景分析

《java-jar命令运行jar包时运行外部依赖jar包的场景分析》:本文主要介绍java-jar命令运行jar包时运行外部依赖jar包的场景分析,本文给大家介绍的非常详细,对大家的学习或工作... 目录Java -jar命令运行 jar包时如何运行外部依赖jar包场景:解决:方法一、启动参数添加: -Xb

基于Python开发一个有趣的工作时长计算器

《基于Python开发一个有趣的工作时长计算器》随着远程办公和弹性工作制的兴起,个人及团队对于工作时长的准确统计需求日益增长,本文将使用Python和PyQt5打造一个工作时长计算器,感兴趣的小伙伴可... 目录概述功能介绍界面展示php软件使用步骤说明代码详解1.窗口初始化与布局2.工作时长计算核心逻辑3

C/C++和OpenCV实现调用摄像头

《C/C++和OpenCV实现调用摄像头》本文主要介绍了C/C++和OpenCV实现调用摄像头,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录准备工作1. 打开摄像头2. 读取视频帧3. 显示视频帧4. 释放资源5. 获取和设置摄像头属性

python web 开发之Flask中间件与请求处理钩子的最佳实践

《pythonweb开发之Flask中间件与请求处理钩子的最佳实践》Flask作为轻量级Web框架,提供了灵活的请求处理机制,中间件和请求钩子允许开发者在请求处理的不同阶段插入自定义逻辑,实现诸如... 目录Flask中间件与请求处理钩子完全指南1. 引言2. 请求处理生命周期概述3. 请求钩子详解3.1