使用Android Studio打开:
选中项目新建模块:
填写相关模块名称:
注意包名:
目录中多出一项:
新建Java Class:
导入相关包:
import io.dcloud.feature.uniapp.annotation.UniJSMethod; import io.dcloud.feature.uniapp.bridge.UniJSCallback; import io.dcloud.feature.uniapp.common.UniModule; public class main extends UniModule { UniJSCallback cb; @UniJSMethod(uiThread = false) public void foo(UniJSCallback cb){ this.cb = cb; } }
实现具体方法:
找到:
文件名:consumer-rules.pro
添加:
-keep public class * extends io.dcloud.feature.uniapp.common.UniModule{*;}
文件名:proguard-rules.pro
添加:
-keep public class * extends io.dcloud.feature.uniapp.common.UniModule{*;}
添加相关依赖:
repositories { flatDir { dirs 'libs' } } dependencies { compileOnly fileTree(dir: 'libs', include: ['*.jar']) compileOnly fileTree(dir: '../app/libs', include: ['uniapp-v8-release.aar']) compileOnly 'androidx.recyclerview:recyclerview:1.0.0' compileOnly 'androidx.legacy:legacy-support-v4:1.0.0' compileOnly 'androidx.appcompat:appcompat:1.0.0' implementation 'com.alibaba:fastjson:1.1.46.android' implementation 'com.facebook.fresco:fresco:1.13.0' }
编辑插件内容:
public class Main extends UniModule { UniJSCallback callback; @UniJSMethod(uiThread = false) public void foo(String url, UniJSCallback callback) { this.callback = callback; try { callback.invoke("return ->"+url); } catch (Throwable throwable) { throwable.printStackTrace(); } } }
双击assemble最后打包:
注意:
mUniSDKInstance.getContext(); //用于代替context 需要继承 extends UniModule
callback.invoke("result");//用于返回数据
uniapp向android传参: param为参数
页面跳转获取参数: static final int REQUEST_CODE = 1000; Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType("*/*");//无类型限制 intent.addCategory(Intent.CATEGORY_OPENABLE); ((Activity)mUniSDKInstance.getContext()).startActivityForResult(intent, REQUEST_CODE);
@Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if(requestCode == REQUEST_CODE && data.hasExtra("respond")) { Log.e("TestModule", "原生页面返回----"+data.getStringExtra("respond")); } else { super.onActivityResult(requestCode, resultCode, data); } }
uniapp项目目录下面新建:nativeplugins文件夹,创建插件同名文件夹,然后创建android文件夹,把插件复制进去、添加package.json文件: 目录结构:
注意:package.json文件class为插件包名.类名的形式、插件名称要和文件夹名称一致
添加插件:
使用插件:
// let plugin = uni.requireNativePlugin('VideoThumbnail'); // try { // plugin.retrieve('http://a.laremehpe.xyz/resource/video.mp4',(res) => { // uni.showModal({ // content: JSON.stringify(res) // }) // }) // } catch (e) { // uni.showModal({ // content: 'error' + JSON.stringify(e) // }) // }
离线打包原生插件:
根目录创建结构:
package.json:
uniapp下的manifest.json添加:
打包文件下创建dcloud_uniplugins.json文件
内容如下:
{ "nativePlugins":[ { "plugins": [ { "type": "module", "name": "xxx", "class": "xxx" } ], "hooksClass": "", "integrateType": "aar", "abis":[] } ] }
将插件复制到libs目录下:
最后打包即可
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了