当前位置:   article > 正文

知乎客户端跨平台-Hybrid-调试实战,2024年最新那些年Android面试官常问的知识点_移动端hybird

移动端hybird

这么做的原理主要是让 PC 端和 客户端能发生通信,然后在客户端的每一个 Hybrid 网页注入一段模拟调用的 js.

做这样的功能,需要维护一个 socket 服务,PC端需要和这个服务器通信,客户端也需要,开发起来依旧是比较麻烦。但也算较好的解决了 本地模拟 的一些问题。

在开发上述功能的过程中,发现了 flipper 这个工具

flipper 提供了一个桌面客户端,然后这个桌面客户端提供了一个和手机客户端通信的机制,免去了 socket 服务的开销,依靠这个通信机制,我们可以把上述的功能复制过来

基于这个通信机制把 api 名称和 api 参数传到手机客户端上,然后再在客户端里注入的 js 调用相应的 api,无需再维护 socket 服务

###使用 flipper

希望全面了解 flipper 的可以上 https://fbflipper.com/

具体文档查看:flipper 文档

工程中就基于 flipper 开发了一个 api 调试的功能,以及获取当前 Hybrid 页面的客户端数据,下面有一个简单的示例,简单介绍一下接入流程和开发一个插件

###桌面插件

需要有简单 React 组件开发经验,不会的话,照葫芦画瓢 10 分钟也能搞定。

桌面插件是一个 React 组件,用来描述界面,接受发送数据

#####0.前置条件

下载 Node,Yarn

Node.js
Yarn

#####1.创建工程

创建目录,执行 yarn init,目录下会出现一个文件 package.json 注意 name得以 flipper-plugin- 开头

{

“name”: “flipper-plugin-myplugin”,

“version”: “1.0.0”,
“main”: “index.js”,
“license”: “MIT”,
“dependencies”: {}
}

#####2.开始编程

创建 index.js,在 index.js 里面可以编写自己的插件,一个简单的组件可能是这样。

这个插件有三个要注意的点

id 为 “myplugin”,id 很重要,桌面插件和客户端插件 id 一样的话才能发生通信
订阅了客户端 “clientMessage” 的消息
给客户端发送了 “getData” 的消息(稍后会在客户端中接收这个消息)

import {FlipperPlugin, Button, FlexCenter} from ‘flipper’;

export default class extends FlipperPlugin {
static title = ‘My Plugin’;
static id = ‘myplugin’;
static icon = ‘internet’;

constructor(props) {
super(props);
this.init();
}

init(){
this.state = {
data: ‘null’,
message: ‘null’
};
//订阅客户端发送的数据
this.client.subscribe(‘clientMessage’, res => {
if(res){
this.setState({message:res.message});
}
});
}

sendData(){
//给客户端发消息
this.client.call(‘getData’, {request:“”}).then(res => {
this.setState({data:res.data});
});
}

render() {
const {data, message} = this.state;
return (

点我调用 getData

{'getData 的内容是:' + data}

{'clientMessage 的内容是:' + message}

) } }

const mainStyle = {
“margin-top”:60,
“flex-direction”:“column”
}
const commonStyle = {
margin: 20,
};

#####3.加载插件

我编写完桌面插件之后,按照 flipper 提示的方式进行配置,还是无法动态加载我写的插件,最后我是把 flipper 的源码拉下来,将插件工程放到了

flipper/src/plugins/ 文件夹下面,然后执行 yarn build --version --mac 在 dist 文件夹下直接打出包,再使用的。

我不确实这是我的问题还是 flipper 的问题。

这是成功加载起插件的图例,假如没有写对应手机客户端插件的话,是不会显示我们写好的 MyPlugin,所以接下来介绍怎么写一个对应的手机客户端插件

###客户端插件

#####0.依赖

当大家想接入一个 debug 相关的库的时候,可能会考虑说,不想把 debug 的功能带到线上去,有几种做法,大家自行选用

a.在代码中去判断一下,在恰当的时候,把 debug 相关的功能给关掉

好处是做起来很简单轻松
坏处是会在线上引入一个线上根本不需要的库,增大了包体积
b.在非线上的时候引入正式库,在线上包中引入 ‘no-op’ 库,‘no-op’ 库可以理解为正式库的一个空实现, 这里有一个讨论 关于 no-op 的讨论

好处是不会增大太多包体积,虽然还是要引入一个不必要的包
不好的地方可能就是如果官方没有实现 no-op 的库,就需要你自己写

例如:

debugImplementation ‘com.facebook.stetho:stetho-okhttp3:1.5.0’
releaseImplementation ‘com.zhihu.android.library:stetho-no-op:1.0.0’

这种方式似乎也是很多类似库通用的处理方式

c.第三种,新建一个文件夹,比如 flipper,在里面写相关初始化代码,通过某种方式执行这些代码,然后再在 sourceSets 加上 srcDirs 即可 下面的意思是在 mr 或者 debug 包中才加上 srcDirs

dependencies {

debugImplementation ‘com.facebook.flipper

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/一键难忘520/article/detail/748798
推荐阅读
相关标签