o***@qq.com
o***@qq.com
  • 发布:2020-03-19 08:51
  • 更新:2020-06-12 18:56
  • 阅读:1894

请问调用自定义安卓原生component组件,需要在hubilder中进行什么设置吗

分类:nvue

我写了一个很简单的安卓原生component组件,但是在uni-app中始终调用不到,以下是我的代码:
1、编写组件类:
组件类:
public class myConponent extends WXComponent<TextView> {

public myConponent(WXSDKInstance instance, WXVContainer parent, BasicComponentData basicComponentData) {  
    super(instance, parent, basicComponentData);  
}  

public myConponent(WXSDKInstance instance, WXVContainer parent, int type, BasicComponentData basicComponentData) {  
    super(instance, parent, type, basicComponentData);  
}  
@Override  
public void onActivityResume() {  
    super.onActivityResume();  
}  

@Override  
public void onActivityPause() {  
    super.onActivityPause();  
}  

@Override  
public void onActivityDestroy() {  
    super.onActivityDestroy();  
}  
@Override  
protected TextView initComponentHostView(@NonNull Context context) {  
    TextView textView = new TextView(context);  
    textView.setTextSize(20);  
    textView.setTextColor(Color.GREEN);  
    return textView;  
}  

@WXComponentProp(name = "tel")  
public void setTel(String telNumber) {  
    getHostView().setText("tel: " + telNumber);  
}  

}
组件注册:
public class myConponentWXComponent_AppProxy implements AppHookProxy {

@Override  
public void onCreate(Application application) {  
    try {  
        System.out.println("组件注册开始");  
        boolean r = WXSDKEngine.registerComponent("mycomponent", myConponent.class);  
        System.out.println(r);  
        System.out.println("组件注册成功");  
    } catch (WXException e) {  
        e.printStackTrace();  
    }  
}  

}

2、打包aar
3、引入aar包,具体引用在附件中
以下是package.json代码:
{
"name": "mycomponent",
"id": "mycomponent",
"version": "1.0",
"description": "个人组件",
"_dp_type":"nativeplugin",
"_dp_nativeplugin":{
"android": {
"plugins": [
{
"type": "component",
"name": "mycomponent",
"class": "com.tipsoft.mycomponent.myConponent"
}
],
"hooksClass": "com.tipsoft.mycomponent.myConponentWXComponent_AppProxy",
"integrateType": "aar",
"minSdkVersion": "19"
}
}
}

4、调用组件,在nvue页面中调用代码,见附件。我在manifest.json也配置了nvue页面编译模式为weex
在调用组件之前,进行自定义基座打包。
5、页面上输出只有789,不能输出123456

这是个什么情况怎么调用才能成功显示出正常的控件

2020-03-19 08:51 负责人:无 分享
已邀请:
DCloud_Android_ST

DCloud_Android_ST

你这情况一般配置没问题就是插件没有集成到APK中。看下云打包的APK有没有你集成你的插件资源。如果你不会查看可以提供APPID

  • o***@qq.com (作者)

    UNI3D01D4C这个是我的appId,我有两个插件,一个是mycompoent,一个是tipsoftvideo,采用的是自有证书打包,是不是需要把证书发给您?

    2020-03-20 16:09

  • o***@qq.com (作者)

    如果是打包没有把插件集成进去,那是不是需要做什么特殊配置,才能把插件打包进去?

    2020-03-20 16:12

  • o***@qq.com (作者)

    我不用云打包,离线打包的方式,不引用aar,直接把组件写在HBuilder-Hello项目,在HBuilderX中生成本地打包APP资源的方式集成到HBuilder-Hello项目,也是调不到自定义component组件

    2020-03-20 16:20

  • o***@qq.com (作者)

    我用weex.isRegisteredComponent("mycomponent");方式在nvue页面中获取组件的值,提示返回true

    2020-03-20 16:44

  • DCloud_Android_ST

    回复 o***@qq.com: 离线的时候你可以测试下component的initComponentHostView是否触发

    2020-03-20 17:13

  • o***@qq.com (作者)

    回复 DCloud_Android_ST: 测试过了,打断点,不会进入component任何方法。

    2020-03-21 09:53

  • DCloud_Android_ST

    回复 o***@qq.com: 那说明你的插件并没有正常载入注册。先确认云打包的APK中是否包含你的插件吧

    2020-03-23 11:12

  • o***@qq.com (作者)

    回复 DCloud_Android_ST: 怎么确认云打包的APK是否包含插件?

    2020-03-23 14:05

  • DCloud_Android_ST

    回复 o***@qq.com: 可以提供你的APK文件 或云打包APPID 我帮你查下

    2020-03-23 14:40

  • o***@qq.com (作者)

    回复 DCloud_Android_ST: UNI3D01D4C这个是我的appid

    2020-03-24 09:56

  • DCloud_Android_ST

    回复 o***@qq.com: <mycomponent>组件给高度

    2020-03-24 11:58

  • o***@qq.com (作者)

    回复 DCloud_Android_ST: 要在nvue页面给高度?是增加style="width:200px;height:50px"这样给高度,还是其它什么方式给高度?

    2020-03-24 15:04

  • o***@qq.com (作者)

    回复 DCloud_Android_ST: 给 style高度也是没有作用

    2020-03-24 15:08

  • DCloud_Android_ST

    回复 o***@qq.com: style给高度

    2020-03-24 15:23

  • o***@qq.com (作者)

    回复 DCloud_Android_ST: 给了style高度也是没有作用

    2020-03-24 15:24

  • DCloud_Android_ST

    回复 o***@qq.com: 云打包测试还是离线测试的 我看你之前给的appid云打包记录并没有

    2020-03-24 15:33

  • o***@qq.com (作者)

    回复 DCloud_Android_ST: 我没有进行云打包,只是打包了基座,离线测试也测试过,我现在进行一次云打包操作

    2020-03-24 16:33

  • o***@qq.com (作者)

    回复 DCloud_Android_ST: 云打包会把本地插件打包进去吧?我的那个测试都是在hbuilderX中直接运行在手机上进行测试的,离线测试也是直接运行在手机上调试。

    2020-03-24 16:36

  • DCloud_Android_ST

    回复 o***@qq.com: 插件必须云打包才生效 不管是自定义基座还是正式包 你多看看文档或者测试,我看加上高度就可以了

    2020-03-24 16:47

  • o***@qq.com (作者)

    回复 DCloud_Android_ST: android studio离线打包插件是否生效吗?我添加插件后,从新打包自定义基座,始终没有生效,对于文档我认真的看过很多次,怕自己错漏了什么配置,导致插件运行不起来。

    2020-03-26 09:29

  • DCloud_Android_ST

    回复 o***@qq.com: 有效。离线你可以debug。看你的插件代码是否正常调用啊。

    2020-03-26 11:14

  • o***@qq.com (作者)

    回复 DCloud_Android_ST: 如果离线有效,那就不需要云打包了,我直接导出生成本地打包APP资源,正常来说debug能进入到initComponentHostView方法,但实际是进不去这个方法

    2020-03-26 16:25

  • DCloud_Android_ST

    回复 o***@qq.com: 那肯定是你配置有问题。可参考SDK中的plugin示例

    2020-03-26 17:29

  • o***@qq.com (作者)

    回复 DCloud_Android_ST: 我现在己在把我能配置的都贴出来了,我反复查看官方示例,没有找到漏了什么配置,才在论坛发贴咨询。

    2020-03-27 10:52

  • DCloud_Android_ST

    回复 o***@qq.com: https://ask.dcloud.net.cn/article/13015 不行就用这个。

    2020-03-27 10:56

  • o***@qq.com (作者)

    回复 DCloud_Android_ST: 您好,我一直在研究这个问题,我今天拉了一个新项目,把自定义插件<mycomponent>标签写在index.nvue里面可以调用到,我以前的页面是这样的,两个页面,index.vue引入一个组件video.vue页面,在video页面写调用了<mycomponent>这个时候是调用不成功的。自定义组件是不是一定要写在非组件页面,如果是组件页面就调用不成功。

    2020-04-08 18:27

  • DCloud_Android_ST

    回复 o***@qq.com: component仅支持nvue

    2020-04-08 18:49

  • o***@qq.com (作者)

    回复 DCloud_Android_ST: 我上一个回复有一个描述错误,video.vue正确的应该是video.nvue,我在index.vue页面引入一个组件页面video.nvue,在video.nvue页面引入<mycomponent>这样的调用方式不行,如果我把index.vue改成index.nvue,直接在index.nvue页面引入<mycomponent>是可以的。

    2020-04-09 09:26

  • o***@qq.com (作者)

    回复 DCloud_Android_ST: 是不是项目必须要用nvue模式进行编译

    2020-04-09 10:45

j***@gmail.com

j***@gmail.com

你好我也遇到这样的情况,我是原生插件,在HBuildx 中生成本地打包资源,然后放在UniPlugin-Hello-AS 对应的资源文件夹中
dcloud_uniplugins.json 配置:


{  
  "nativePlugins": [  
    {  
      "hooksClass": "",  
      "plugins": [  
        {  
          "type": "module",  
          "name": "Mokan-Android-Video-Player",  
          "class": "com.reiniot.videoplay.VideoWXModule"  
        }  
      ]  
    },  
    {  
      "hooksClass": "com.reiniot.videoplay.VideoAppHookProxy"  
    }  
  ]  
}  

VideoAppHookProxy 代码:

public class VideoAppHookProxy implements AppHookProxy {  
    @Override  
    public void onCreate(Application application) {  
//        try {  
////            WXSDKEngine.registerComponent("richText", RichText.class);  
//  
//            WXSDKEngine.registerComponent("mokan-android-video",VideoPlayComponent.class);  
//            Log.e("========>","====================================");  
//        } catch (WXException e) {  
//            e.printStackTrace();  
//            Log.e("========>",e.getMessage());  
//        }  
    }  
}  

VideoWXModule 对应的请求是可以使用的,但是 VideoPlayComponent 这个类没有执行,而且在VideoAppHookProxy 中注册了,界面就是一片空白的,没有注册显示正常,但是VideoPlayComponent 没有执行, 注册返回的也是ture

  • DCloud_Android_ST

    测试下component的initComponentHostView是否触发

    2020-03-25 16:14

  • o***@qq.com (作者)

    你的这个问题现在解决了吗?你也是想做一个视频播放插件,我也想做一个视频播放插件,官网的video播放rtsp有些源不能播放,我就想集成一个vlc。

    2020-03-26 16:27

9***@qq.com

9***@qq.com

踩完的坑,https://liujingyuan.top/2020/06/12/Dcloud%E6%89%A9%E5%B1%95%E5%8E%9F%E7%94%9F%E7%BB%84%E4%BB%B6/

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