在 Android Studio 中开发 AAR 插件并在 UniApp 中集成的详细步骤:
1. 开发 Android AAR 插件
1.1 创建 Android Library 项目
-
打开 Android Studio → New Project → 选择 "No Activity"
-
右键项目 → New → Module → Android Library (命名为
MyUniPlugin
)
1.2 编写插件代码
java
复制
// MyUniPlugin.java
package com.example.myuniplugin;
import com.alibaba.fastjson.JSONObject;
import io.dcloud.feature.uniapp.annotation.UniJSMethod;
import io.dcloud.feature.uniapp.common.UniModule;
public class MyUniPlugin extends UniModule {
// 同步方法
@UniJSMethod(uiThread = false)
public String syncMethod(String param) {
return "Received: " + param;
}
// 异步方法(带回调)
@UniJSMethod(uiThread = true)
public void asyncMethod(JSONObject params, UniJSCallback callback) {
try {
String message = params.getString("message");
callback.invoke(new JSONObject().put("result", "Echo: " + message));
} catch (Exception e) {
callback.invoke(new JSONObject().put("error", e.getMessage()));
}
}
}
1.3 配置依赖项
在 build.gradle
中添加 UniApp 依赖:
gradle
dependencies { implementation 'com.github.aliyun-alpha:uni-app:8.0.0' // 使用官方或兼容版本 }
1.4 生成 AAR 文件
-
点击右侧 Gradle → :mylibrary → Tasks → build → assemble
-
生成的 AAR 文件位于
mylibrary/build/outputs/aar/mylibrary-release.aar
2. UniApp 集成 AAR 插件
2.1 创建原生插件目录
在 UniApp 项目的 nativeplugins
目录下创建结构:
复制
MyUniPlugin/ ├── android/ │ ├── mylibrary-release.aar │ └── libs/ (可选第三方库) └── package.json
2.2 配置 package.json
json
{
"name": "MyUniPlugin",
"id": "com.example.myuniplugin",
"version": "1.0.0",
"description": "Custom AAR Plugin",
"_dp_type": "nativeplugin",
"_dp_nativeplugin": {
"android": {
"plugins": [
{
"type": "module",
"name": "com.example.myuniplugin",
"class": "com.example.myuniplugin.MyUniPlugin"
}
],
"integrateType": "aar",
"minSdkVersion": 21
}
}
}
2.3 注册插件
-
在 UniApp 项目的
manifest.json
中勾选原生插件 -
选择本地插件 → 找到
MyUniPlugin
3. UniApp 调用插件方法
3.1 编写 JS 调用代码
vue
<template>
<view>
<button @click="callSync">调用同步方法</button>
<button @click="callAsync">调用异步方法</button>
</view>
</template>
<script>
export default {
methods: {
callSync() {
const result = uni.requireNativePlugin('MyUniPlugin').syncMethod('Hello Sync');
console.log('同步结果:', result);
},
callAsync() {
uni.requireNativePlugin('MyUniPlugin').asyncMethod(
{ message: 'Hello Async' },
(res) => {
if(res.error) {
console.error('异步错误:', res.error);
} else {
console.log('异步结果:', res.result);
}
}
);
}
}
}
</script>
4. 调试与打包
4.1 本地调试
-
运行到 Android 设备:
HBuilderX → 运行 → 运行到手机或模拟器
-
使用 Chrome 开发者工具查看控制台日志
4.2 常见问题排查
-
ClassNotFoundException: 检查 AAR 是否包含完整包路径,ProGuard 是否排除混淆
-
方法未找到: 确认
@UniJSMethod
注解是否正确使用 -
依赖冲突: 在 UniApp 的
build.gradle
中添加排除规则:gradle
configurations { all*.exclude group: 'com.example', module: 'conflicting-library' }
高级配置
-
添加原生权限:
在MyUniPlugin/android/AndroidManifest.xml
中添加权限声明 -
处理 Activity 生命周期:
java
复制
@Override public void onActivityResume() { // 处理恢复逻辑 }
-
事件通知到 JS:
java
复制
mUniSDKInstance.fireGlobalEventCallback("globalEvent", new JSONObject().put("data", "eventData"));
通过以上步骤,您可以将 Android 原生功能封装为 AAR 插件,并在 UniApp 中无缝集成。确保保持 Android 与 UniApp 的版本兼容性,并充分测试不同设备场景。