uniapp如何集成第三方库
是的!uniplugin_module-release.aar 不是 Uni-App 官方提供的,而是由开发者自己编写原生代码(UniModule)后编译生成的。具体区别如下:
1. uniplugin_module-release.aar 的来历
谁生成的?
- 开发者自己:当你开发 Uni-App 原生插件时,需要:
- 用 Android Studio 创建
UniModule子类(Java/Kotlin)。 - 调用第三方库(如
utilcodex)封装方法。 - 通过 Gradle 编译生成
uniplugin_module-release.aar。
- 用 Android Studio 创建
为什么需要它?
- 桥接 JS 和原生代码:Uni-App 需要通过这个 AAR 找到你定义的
@UniJSMethod方法,否则uni.requireNativePlugin()无法工作。
2. Uni-App 官方提供的是什么?
核心依赖
uni-app SDK(如uniapp-v8-release.aar):- 提供
UniModule基类、JS 引擎等基础设施。 - 不包含你的业务代码。
- 提供
官方插件
- 例如
uni-ad、uni-push等官方插件会提供 完整的 AAR(类似uniplugin-release.aar),但你的自定义插件必须自己生成。
3. 正确开发流程
步骤说明
-
编写
UniModule(例如DeviceUtilsModule.java):public class DeviceUtilsModule extends UniModule {@UniJSMethodpublic String getUniqueDeviceId() {return DeviceUtils.getUniqueDeviceId(); // 调用 utilcodex} } -
配置
build.gradle:dependencies {implementation 'com.blankj:utilcodex:1.31.1' // 依赖 utilcodexcompileOnly 'io.dcloud:uniapp-v8-release:3.6.0' // 依赖 Uni-App SDK } -
生成 AAR:
- 在 Android Studio 中选择 Build > Build Bundle(s) / APK(s) > Build AAR。
- 产物路径:
/build/outputs/aar/uniplugin_module-release.aar。
-
注册插件:
// 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_module 和 uniplugin-release
uniplugin_module-release.aar:仅包含你的代码(需手动集成 Uni-App SDK)。uniplugin-release.aar:完整插件包(含你的代码 + 依赖 + Uni-App SDK)。
5. 通过示例理解
场景
你想调用 utilcodex 的 DeviceUtils.getUniqueDeviceId()。
错误方式
// 直接调用(报错!)
const DeviceUtilsModule = uni.requireNativePlugin("DeviceUtilsModule");
const deviceId = DeviceUtilsModule.getUniqueDeviceId();
错误原因:DeviceUtilsModule 未通过 UniModule 注册,Uni-App 找不到原生实现。
正确方式
- 生成
uniplugin_module-release.aar(包含你的UniModule)。 - 配置插件依赖:
"dependencies": ["com.blankj:utilcodex:1.31.1"] - JS 调用:
const module = uni.requireNativePlugin("DeviceUtilsModule"); module.getUniqueDeviceId(res => {console.log(res); // 成功获取设备ID });
总结
- ✅
uniplugin_module-release.aar由开发者生成,用于封装原生功能。 - ❌ Uni-App 不提供你的业务逻辑 AAR,只提供基础 SDK。
- 核心规则:想通过 JS 调用的原生方法,必须写在
UniModule中!
