安卓原生代码如何打包成uniapp插件?

我想将现有的安卓原生代码集成到uniapp项目中作为插件使用,但不知道具体的打包流程。请问应该如何将安卓原生代码打包成uniapp插件?需要哪些步骤和配置?是否有官方文档或最佳实践可以参考?

2 回复

将安卓原生代码打包成uniapp插件,需要先创建Android Module,编写插件类继承UniModule,实现所需方法。然后在assets/dcloud_uniplugins.json中注册插件,最后用Android Studio打包成aar文件,放入uniapp项目的nativeplugins目录即可使用。


要将安卓原生代码打包为 UniApp 插件,需通过 uni原生插件 形式集成。以下是关键步骤和示例:

1. 创建 UniApp 原生插件项目结构

在 UniApp 项目根目录下创建 nativeplugins 文件夹,并建立插件目录(例如 MyNativePlugin),结构如下:

nativeplugins/
  └── MyNativePlugin/
      ├── android/
      │   ├── libs/          # 存放第三方 JAR/AAR
      │   ├── src/           # 原生代码
      │   ├── assets/        # 资源文件
      │   └── plugin.gradle  # 依赖配置
      └── package.json       # 插件配置文件

2. 配置 package.json

定义插件基本信息:

{
  "name": "MyNativePlugin",
  "id": "my-native-plugin",
  "version": "1.0.0",
  "description": "自定义原生插件示例",
  "_dp_type": "nativeplugin",
  "_dp_nativeplugin": {
    "android": {
      "plugins": [
        {
          "type": "module",
          "name": "my-native-plugin",
          "class": "com.example.MyNativeModule"  // 入口类
        }
      ],
      "integrateType": "aar",
      "minSdkVersion": 21
    }
  }
}

3. 编写安卓原生代码

android/src 中创建入口类,继承 UniModule

package com.example;

import io.dcloud.feature.uniapp.annotation.UniJSMethod;
import io.dcloud.feature.uniapp.bridge.UniJSCallback;
import io.dcloud.feature.uniapp.common.UniModule;

public class MyNativeModule extends UniModule {
    
    // 同步方法(返回字符串)
    @UniJSMethod(uiThread = false)
    public String getDeviceInfo() {
        return android.os.Build.MODEL;
    }

    // 异步方法(带回调)
    @UniJSMethod(uiThread = true)
    public void showToast(String message, UniJSCallback callback) {
        if (mUniSDKInstance != null && mUniSDKInstance.getContext() != null) {
            android.widget.Toast.makeText(mUniSDKInstance.getContext(), message, Toast.LENGTH_SHORT).show();
            callback.invoke("Toast shown: " + message);
        }
    }
}

4. 配置 Gradle 依赖

plugin.gradle 中添加依赖:

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'androidx.appcompat:appcompat:1.3.0'
}

5. 在 UniApp 中调用插件

在 Vue 页面中使用:

const myModule = uni.requireNativePlugin('my-native-plugin');

// 调用同步方法
const device = myModule.getDeviceInfo();
console.log('Device:', device);

// 调用异步方法
myModule.showToast('Hello from Native!', (result) => {
  console.log(result);
});

6. 打包与发布

  • 调试:通过 HBuilderX 将插件导入项目,真机运行测试。
  • 发布:将插件目录压缩为 .zip,通过开发者中心提交。

注意事项:

  1. 权限配置:如需系统权限,在原生 AndroidManifest.xml 中声明。
  2. 资源冲突:避免资源命名与主项目冲突。
  3. ProGuard:如启用混淆,需保留 UniModule 相关类。

通过以上步骤,即可将安卓原生功能封装为 UniApp 插件,实现跨平台调用。

回到顶部