uniapp如何集成第三方库

是的!uniplugin_module-release.aar 不是 Uni-App 官方提供的,而是由开发者自己编写原生代码(UniModule)后编译生成的。具体区别如下:


1. uniplugin_module-release.aar 的来历

谁生成的?
  • 开发者自己 :当你开发 Uni-App 原生插件时,需要:
    1. 用 Android Studio 创建 UniModule 子类(Java/Kotlin)。
    2. 调用第三方库(如 utilcodex)封装方法。
    3. 通过 Gradle 编译生成 uniplugin_module-release.aar
为什么需要它?
  • 桥接 JS 和原生代码 :Uni-App 需要通过这个 AAR 找到你定义的 @UniJSMethod 方法,否则 uni.requireNativePlugin() 无法工作。

2. Uni-App 官方提供的是什么?

核心依赖
  • uni-app SDK (如 uniapp-v8-release.aar):
    • 提供 UniModule 基类、JS 引擎等基础设施。
    • 不包含你的业务代码
官方插件
  • 例如 uni-aduni-push 等官方插件会提供 完整的 AAR (类似 uniplugin-release.aar),但你的自定义插件必须自己生成。

3. 正确开发流程

步骤说明
  1. 编写 UniModule (例如 DeviceUtilsModule.java):

    java 复制代码
    public class DeviceUtilsModule extends UniModule {
        @UniJSMethod
        public String getUniqueDeviceId() {
            return DeviceUtils.getUniqueDeviceId(); // 调用 utilcodex
        }
    }
  2. 配置 build.gradle

    gradle 复制代码
    dependencies {
        implementation 'com.blankj:utilcodex:1.31.1' // 依赖 utilcodex
        compileOnly 'io.dcloud:uniapp-v8-release:3.6.0' // 依赖 Uni-App SDK
    }
  3. 生成 AAR

    • 在 Android Studio 中选择 Build > Build Bundle(s) / APK(s) > Build AAR
    • 产物路径:/build/outputs/aar/uniplugin_module-release.aar
  4. 注册插件

    json 复制代码
    // package.json
    {
      "_dp_nativeplugin": {
        "android": {
          "plugins": [{
            "type": "module",
            "name": "DeviceUtilsModule",
            "class": "com.yourcompany.DeviceUtilsModule"
          }],
          "dependencies": ["com.blankj:utilcodex:1.31.1"]
        }
      }
    }

4. 常见误区

❌ 误区1:直接使用第三方 AAR(如 utilcodex.aar
  • 问题 :Uni-App 无法自动将任意 Java 库的方法暴露给 JS
  • 必须通过 UniModule 封装
❌ 误区2:混淆 uniplugin_moduleuniplugin-release
  • uniplugin_module-release.aar仅包含你的代码(需手动集成 Uni-App SDK)。
  • uniplugin-release.aar完整插件包(含你的代码 + 依赖 + Uni-App SDK)。

5. 通过示例理解

场景

你想调用 utilcodexDeviceUtils.getUniqueDeviceId()

错误方式
js 复制代码
// 直接调用(报错!)
const DeviceUtilsModule = uni.requireNativePlugin("DeviceUtilsModule");
const deviceId = DeviceUtilsModule.getUniqueDeviceId(); 

错误原因DeviceUtilsModule 未通过 UniModule 注册,Uni-App 找不到原生实现。

正确方式
  1. 生成 uniplugin_module-release.aar(包含你的 UniModule)。

  2. 配置插件依赖:

    json 复制代码
    "dependencies": ["com.blankj:utilcodex:1.31.1"]
  3. JS 调用:

    js 复制代码
    const module = uni.requireNativePlugin("DeviceUtilsModule");
    module.getUniqueDeviceId(res => {
        console.log(res); // 成功获取设备ID
    });

总结

  • uniplugin_module-release.aar 由开发者生成,用于封装原生功能。
  • ❌ Uni-App 不提供你的业务逻辑 AAR,只提供基础 SDK。
  • 核心规则 :想通过 JS 调用的原生方法,必须写在 UniModule
相关推荐
边境悍匪11 小时前
蜗牛学苑 Java 智能体学习 Day45|Knife4j+SpringBoot3、书城项目整合 MyBatis 思维导图复盘
java·开发语言·vue.js·学习·spring
我的xiaodoujiao11 小时前
Django 基础知识详细图文教程 9-Django 模板引擎 2
开发语言·数据库·后端·django
菜鸟~noob23311 小时前
【太空电子战】从CCS到Meadowlands:反通信系统的二十年演进史【含matlab代码】
开发语言·matlab
quantdash_cc12 小时前
量化策略为什么需要实时行情数据?从信号产生到交易决策的时间差说起
开发语言·python·数据分析·量化交易·股票数据·quantdash
逆向编程14 小时前
QGIS地图投影(CRS坐标参照系)设置
开发语言
free-elcmacom14 小时前
发际线警告!手撕《C陷阱与缺陷》终极 BOSS:signal 函数与 typedef 魔法
c语言·开发语言·visual studio code·visual studio
程序员阿鹏14 小时前
简单介绍一下软引用
java·开发语言·jvm·数据结构·后端
haluhalu.15 小时前
初识 Protobuf:微服务跨语言通信的一份契约
java·c语言·开发语言·c++·python
孙启超15 小时前
【AI开发之Rust】第 12 课:并发模型与同步原语
开发语言·后端·rust
敲代码的瓦龙15 小时前
Jetpack?DataBinding!!!
android·java·开发语言·mysql·android-studio