使用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目录下:

 

 最后打包即可

 

 posted on 2022-11-24 10:17  laremehpe  阅读(155)  评论(0)    收藏  举报