mu0918
mu0918
  • 发布:2021-12-09 10:30
  • 更新:2021-12-10 11:53
  • 阅读:511

【报Bug】Android原生插件使用自己的包名无法导入插件

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: Windows 10

HBuilderX类型: 正式

HBuilderX版本号: 3.2.16

手机系统: Android

手机系统版本号: Android 11

手机厂商: 小米

手机机型: Redmi K30 Pro Zoom Edition

页面类型: vue

vue版本: vue2

打包方式: 离线

项目创建方式: HBuilderX

示例代码:

uniapp项目代码

<template>  
    <view class="content">  
        <image class="logo" src="/static/logo.png" @click="onMuTest"></image>  
        <view class="text-area">  
            <text class="title">{{title}}</text>  
        </view>  
    </view>  
</template>  

<script>  
    let muTest;  
    export default {  
        data() {  
            return {  
                title: 'Hello'  
            }  
        },  
        onLoad() {  
            muTest = uni.requireNativePlugin('Mu-Test')  
            this.title = !muTest ? '插件导入失败' : '插件导入成功'  
        },  
        methods: {  
            onMuTest() {  
                uni.showToast({  
                    title: '点击了',  
                    icon: 'none'  
                });  

                if(muTest) {  
                    muTest.test({  
                        code: 1  
                    }, res => {  
                        this.title = JSON.stringify(res)  
                    })  
                }  
            }  
        }  
    }  
</script>  

<style>  
    .content {  
        display: flex;  
        flex-direction: column;  
        align-items: center;  
        justify-content: center;  
    }  

    .logo {  
        height: 200rpx;  
        width: 200rpx;  
        margin-top: 200rpx;  
        margin-left: auto;  
        margin-right: auto;  
        margin-bottom: 50rpx;  
    }  

    .text-area {  
        display: flex;  
        justify-content: center;  
    }  

    .title {  
        font-size: 36rpx;  
        color: #8f8f94;  
    }  
</style>

插件module代码

package mu.test;  

import com.alibaba.fastjson.JSONObject;  
import io.dcloud.feature.uniapp.annotation.UniJSMethod;  
import io.dcloud.feature.uniapp.bridge.UniJSCallback;  

/**  
 * @author LiYejun  
 * @date 2021/12/9 10:01  
 */  
public class TestModule {  

    @UniJSMethod()  
    public void test(JSONObject options, UniJSCallback callback) {  
        if(callback != null) {  
            JSONObject data = new JSONObject();  
            data.put("code", "success");  
            data.put("data", options);  
            callback.invoke(data);  
        }  
    }  
}

插件配置dcloud_uniplugins.json

{  
  "nativePlugins": [  
    {  
      "hooksClass": "",  
      "plugins": [  
        {  
          "type": "module",  
          "name": "Mu-Test",  
          "class": "mu.test.TestModule"  
        }  
      ]  
    }  
  ]  
}

操作步骤:
  1. 直接下载3.2.16版本的Android SDK,使用Android Studio打开UniPlugin-Hello-AS项目;
  2. 配置自己的appkey和签名配置;
  3. New Module,按照uniplugin_module这个插件教程进行build.gradle配置,创建Module类和方法,使用自己的包名,不要用io.dcloud.uniplugin这个包名;
  4. 在dcloud_uniplugins.json这个文件中配置自己的插件
  5. 在HBuilderX中生成本地资源包,放到UniPlugin-Hello-AS项目中
  6. 运行调试

预期结果:
  1. 插件导入成功
  2. 点击按钮调用插件内方法,返回响应

实际结果:

插件导入失败

bug描述:

插件开发调试无法导入

插件Module使用自己的包名时无法导入

如创建Module类为mu.test.TestModule
2021-12-09 10:30 负责人:无 分享
已邀请:
DCloud_Android_ST

DCloud_Android_ST

跟包名没关系 只要你配置的class能找到相关的类 name与你requireNativePlugin填写的内容是一样的。那就不会有问题。自己检查下配置的class是否在apk中能找到或是被混淆了。

  • mu0918 (作者)

    确实混淆问题

    2021-12-10 14:40

该问题目前已经被锁定, 无法添加新回复