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

相关文章

Linux在线解压jar包的实现方式

《Linux在线解压jar包的实现方式》:本文主要介绍Linux在线解压jar包的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux在线解压jar包解压 jar包的步骤总结Linux在线解压jar包在 Centos 中解压 jar 包可以使用 u

linux解压缩 xxx.jar文件进行内部操作过程

《linux解压缩xxx.jar文件进行内部操作过程》:本文主要介绍linux解压缩xxx.jar文件进行内部操作,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、解压文件二、压缩文件总结一、解压文件1、把 xxx.jar 文件放在服务器上,并进入当前目录#

Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式

《Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式》本文详细介绍如何使用Java通过JDBC连接MySQL数据库,包括下载驱动、配置Eclipse环境、检测数据库连接等关键步骤,... 目录一、下载驱动包二、放jar包三、检测数据库连接JavaJava 如何使用 JDBC 连接 mys

Java中调用数据库存储过程的示例代码

《Java中调用数据库存储过程的示例代码》本文介绍Java通过JDBC调用数据库存储过程的方法,涵盖参数类型、执行步骤及数据库差异,需注意异常处理与资源管理,以优化性能并实现复杂业务逻辑,感兴趣的朋友... 目录一、存储过程概述二、Java调用存储过程的基本javascript步骤三、Java调用存储过程示

springboot项目打jar制作成镜像并指定配置文件位置方式

《springboot项目打jar制作成镜像并指定配置文件位置方式》:本文主要介绍springboot项目打jar制作成镜像并指定配置文件位置方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录一、上传jar到服务器二、编写dockerfile三、新建对应配置文件所存放的数据卷目录四、将配置文

Python中Tensorflow无法调用GPU问题的解决方法

《Python中Tensorflow无法调用GPU问题的解决方法》文章详解如何解决TensorFlow在Windows无法识别GPU的问题,需降级至2.10版本,安装匹配CUDA11.2和cuDNN... 当用以下代码查看GPU数量时,gpuspython返回的是一个空列表,说明tensorflow没有找到

解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘问题

《解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘问题》:本文主要介绍解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4... 目录未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘打开pom.XM

SpringBoot开发中十大常见陷阱深度解析与避坑指南

《SpringBoot开发中十大常见陷阱深度解析与避坑指南》在SpringBoot的开发过程中,即使是经验丰富的开发者也难免会遇到各种棘手的问题,本文将针对SpringBoot开发中十大常见的“坑... 目录引言一、配置总出错?是不是同时用了.properties和.yml?二、换个位置配置就失效?搞清楚加

python如何调用java的jar包

《python如何调用java的jar包》这篇文章主要为大家详细介绍了python如何调用java的jar包,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以参考一下... 目录一、安装包二、使用步骤三、代码演示四、自己写一个jar包五、打包步骤六、方法补充一、安装包pip3 install

Python中对FFmpeg封装开发库FFmpy详解

《Python中对FFmpeg封装开发库FFmpy详解》:本文主要介绍Python中对FFmpeg封装开发库FFmpy,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、FFmpy简介与安装1.1 FFmpy概述1.2 安装方法二、FFmpy核心类与方法2.1 FF