开发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

相关文章

基于 Cursor 开发 Spring Boot 项目详细攻略

《基于Cursor开发SpringBoot项目详细攻略》Cursor是集成GPT4、Claude3.5等LLM的VSCode类AI编程工具,支持SpringBoot项目开发全流程,涵盖环境配... 目录cursor是什么?基于 Cursor 开发 Spring Boot 项目完整指南1. 环境准备2. 创建

javacv依赖太大导致jar包也大的解决办法

《javacv依赖太大导致jar包也大的解决办法》随着项目的复杂度和依赖关系的增加,打包后的JAR包可能会变得很大,:本文主要介绍javacv依赖太大导致jar包也大的解决办法,文中通过代码介绍的... 目录前言1.检查依赖2.更改依赖3.检查副依赖总结 前言最近在写项目时,用到了Javacv里的获取视频

Java使用jar命令配置服务器端口的完整指南

《Java使用jar命令配置服务器端口的完整指南》本文将详细介绍如何使用java-jar命令启动应用,并重点讲解如何配置服务器端口,同时提供一个实用的Web工具来简化这一过程,希望对大家有所帮助... 目录1. Java Jar文件简介1.1 什么是Jar文件1.2 创建可执行Jar文件2. 使用java

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

Python实战之SEO优化自动化工具开发指南

《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模

基于Java开发一个极简版敏感词检测工具

《基于Java开发一个极简版敏感词检测工具》这篇文章主要为大家详细介绍了如何基于Java开发一个极简版敏感词检测工具,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下... 目录你是否还在为敏感词检测头疼一、极简版Java敏感词检测工具的3大核心优势1.1 优势1:DFA算法驱动,效率提升10

Java调用Python脚本实现HelloWorld的示例详解

《Java调用Python脚本实现HelloWorld的示例详解》作为程序员,我们经常会遇到需要在Java项目中调用Python脚本的场景,下面我们来看看如何从基础到进阶,一步步实现Java与Pyth... 目录一、环境准备二、基础调用:使用 Runtime.exec()2.1 实现步骤2.2 代码解析三、

Python如何调用另一个类的方法和属性

《Python如何调用另一个类的方法和属性》在Python面向对象编程中,类与类之间的交互是非常常见的场景,本文将详细介绍在Python中一个类如何调用另一个类的方法和属性,大家可以根据需要进行选择... 目录一、前言二、基本调用方式通过实例化调用通过类继承调用三、高级调用方式通过组合方式调用通过类方法/静

java -jar example.jar 产生的日志输出到指定文件的方法

《java-jarexample.jar产生的日志输出到指定文件的方法》这篇文章给大家介绍java-jarexample.jar产生的日志输出到指定文件的方法,本文给大家介绍的非常详细,对大家的... 目录怎么让 Java -jar example.jar 产生的日志输出到指定文件一、方法1:使用重定向1、