知乎客户端跨平台 Hybrid 调试实战

知乎客户端跨平台-Hybrid-调试实战 做这样的功能,需要维护一个 socket 服务,PC端需要和这个服务器通信,客户端也需要,开发起来依旧是比较麻烦。但也算较好的解决了 本地模拟 的一些问题。在开发上述功能的过程中,发现了 flipper 这个工具flipper 提供了一个桌面客户端,然后这个桌面客户端提供了一个和手机客户端通信的机制,免去了 socket 服务的开销,依靠这个通信机制,我们可以把上述的功能复制过来。 阅读详情

点击上方“开发者技术前线”,选择“星标”
13:21 在看 真爱
作者: 伊一思 | 来源:知乎技术团队

责编:可可 | 链接:https://zhuanlan.zhihu.com/p/54611229

背景
知乎客户端中有一个自己维护的 Hybrid 框架,在此基础上开发了一些 Hybrid 页面,当需要前端或者客户端开发接口的时候,就涉及到联调的问题。

和一般的 前端 <=> 服务端,或者 客户端 <=> 服务端 类似,前端 <=> 客户端也会出现联调的各种问题,但是往往 Hybrid 开发相关的调试工具并不是那么完备。

由于在 Hybrid 里面,前端和客户端联系是很紧密的,假如一个人既熟悉前端开发又熟悉客户端开发,调试是很容易的,但是现实一般是可能客户端开发并不是那么熟悉前端开发,前端开发也不熟悉客户端开发,出现问题的时候需要两个人一起排查。

对于大多数公司来说,开发一整套的调试工具是不现实的,因为没有这么多的资源去做,短时间内,我们如何提供出可靠便利的调试工具呢?

通信日志

对于前端来说,客户端开发是一个黑盒,当遇到调试问题的时候,前端会比较迷茫,无法确定是自己调用的有问题,还是客户端的代码写的有问题。最简单的方式我们在通信发生的时候,使用约定的格式,在两端都打出日志

客户端通过执行一段 js

webview.evaluateJavascript(“console.log(’” + msg + “’)”, valueCallback);

使得在 ChromeDevTools 的 console 里面能看到打出的日志,全面描述这次通信的详细过程,将黑盒在一定程度上变成白盒。

全局日志

有时候前端除了需要通信日志之外,可能还需要其他客户端日志,简单的方式是前端可以通过 adb 获取日志,这里是官方使用文档:logcat 命令行工具

这里推荐一个工具:flipper…官网,也能比较简单方便的查看日志,具体用法将在后面 flipper 中详细介绍

接口测试

客户端开发了一个接口,要给前端使用,在交付之前,需要测试一下,但是客户端又不会写前端代码,可能就直接会交给前端自己去测,假如有问题,来来回回很麻烦并且耗费时间,我们需要提供一种方式让客户端能够较好的测试,并且不依赖前端。在交付给前端之前,达到一定的质量标准,而不是说等到前端介入开发,才能去测试这个接口。

客户端接口一般分两种,

1.一种是所有所有页面都可以调用的,并不依赖特定的环境,举个例子:一个获取用户信息的接口,在任意页面发起这个调用,都会有同样的结果。

2.一种是在特定页面才可以调用的,比如获取当前回答的状态,必须要在回答页访问这个接口才有效。

本地模拟

针对第一类接口,我们开发一个普通的网页,上面列有所有接口的示例参数,和模拟调用的按钮,例如

此刻,在手机上打开上面的网页,点击 dispatch 按钮即可。

但是这种方式无法针对第二种接口做测试。

并且还有一个很大的问题,当接口参数稍微复杂一点,在手机上编辑这些参数是非常不方便的,变更参数是一件很不愉快的体验。

于是我们提供了一个在 PC 网页上调用客户端接口的方式。

远程调用

最初的时候,我给上面的网页加了一个扩展的功能,增加了一个二维码

PC 端打开网页,用客户端扫码进入一个 Hybrid 页面后,点击 dispatch 会在客户端上的当前 Hybrid 页面调用相应的 api。

又或者,你打开了一个其他 Hybrid 页面,点击 dispatch,就会在这个页面调用接口。

这么做的原理主要是让 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- 开头

1{
2 “name”: “flipper-plugin-myplugin”,
3 “version”: “1.0.0”,
4 “main”: “index.js”,
5 “license”: “MIT”,
6 “dependencies”: {}
7}

2.开始编程

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

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

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

1import {FlipperPlugin, Button, FlexCenter} from ‘flipper’;
2
3
4export default class extends FlipperPlugin {
5 static title = ‘My Plugin’;
6 static id = ‘myplugin’;
7 static icon = ‘internet’;
8
9 constructor(props) {
10 super(props);
11 this.init();
12 }
13
14 init(){
15 this.state = {
16 data: ‘null’,
17 message: ‘null’
18 };
19 //订阅客户端发送的数据
20 this.client.subscribe(‘clientMessage’, res => {
21 if(res){
22 this.setState({message:res.message});
23 }
24 });
25 }
26
27 sendData(){
28 //给客户端发消息
29 this.client.call(‘getData’, {request:""}).then(res => {
30 this.setState({data:res.data});
31 });
32 }
33
34 render() {
35 const {data, message} = this.state;
36 return (
37
38 点我调用 getData
39

{‘getData 的内容是:’ + data}


40

{‘clientMessage 的内容是:’ + message}


41
42 )
43 }
44}
45
46const mainStyle = {
47 “margin-top”:60,
48 “flex-direction”:“column”
49}
50const commonStyle = {
51 margin: 20,
52};

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 的库,就需要你自己写

例如:

1debugImplementation ‘com.facebook.stetho:stetho-okhttp3:1.5.0’
2releaseImplementation ‘com.zhihu.android.library:stetho-no-op:1.0.0’
这种方式似乎也是很多类似库通用的处理方式

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

1dependencies {
2 …
3 debugImplementation ‘com.facebook.flipper?0.11.1’
4 mrImplementation ‘com.facebook.flipper?0.11.1’
5}
6android {
7 sourceSets {
8 …
9 debug {
10 java.srcDirs += “src/flipper/java”;
11 }
12 mr {//
13 java.srcDirs += “src/flipper/java”;
14 }
15}
1.初始化

1/** 官方示例 /
2public class MyApplication extends Application {
3
4 @Override
5 public void onCreate() {
6 super.onCreate();
7 SoLoader.init(this, false);
8 /
* 这里是 flipper 官方的示例代码,实际上在我们的工程中不是这么做的,实际工程中使用了上面依赖方式的第三种 /
9 if (BuildConfig.DEBUG && FlipperUtils.shouldEnableFlipper(this)) {
10 final FlipperClient client = AndroidFlipperClient.getInstance(this);
11 client.addPlugin(new InspectorFlipperPlugin(this, DescriptorMapping.withDefaults()));
12 client.addPlugin(new MyFlipperPlugin());
13 client.start();
14 }
15 }
16}
17
18/
*
19 * 我们的方式,示例代码,下面精简了一点
20 *(我们的工程里有一个 Task,在编译 app 时 gradle 插件会自动定位到所有的 Task,并运行时生成依赖图,按依赖顺序启动 Task)
21 */
22public class FlipperTask extends Task{
23
24 public FlipperTask(String name) {
25 super(name);
26 }
27
28 @Override
29 public void afterSetup() {
30 setScheduler(AndroidSchedulers.mainThread());
31 beFinalizedBy(“Task1”);
32 }
33
34 @Override
35 public void onRun() {
36 final Application app = (Application) getInput(“app”);
37 SoLoader.init(app, false);
38 FlipperClient client = AndroidFlipperClient.getInstance(app);
39 if (client != null){
40 client.addPlugin(new InspectorFlipperPlugin(app, DescriptorMapping.withDefaults()));
41 client.addPlugin(new MyFlipperPlugin());
42 client.start();
43 }
44 }
45}
2.编写插件

注意

id 要和桌面插件一致
同时实现了 “getData” 的接收,和 “clientMessage” 的发送

public class MyFlipperPlugin implements FlipperPlugin { ¨K7K }

这样一个简单的插件就写完了,赶紧跑起来试用一下吧!

手机客户端:

桌面客户端:

最后,通过这一个简单的 demo,我们把传递的参数改成 ’ Hybrid 接口’ 和 ’ Hybrid 接口的参数’,指示客户端进行的接口调用,复制出远程调用的功能就可以了。

总结

最终,基于方便的日志查看,基于 flipper 开发的各类插件,比如远程调用 Hybrid 接口,获取当前 Hybrid 数据等等,可以在短时间之内提供一个较好的调试和测试体验。

让测试不需要了解开发细节,客户端开发能独立测试,前端能快速自己确定问题,降低开发中联调的耦合程度。

现在很多公司都会有许多 Hybrid 页面,如何低成本的调试一直是一个问题,大家好什么好的想法也可以一起交流。

END

开发者技术前线 ,汇集技术前线快讯和关注行业趋势,大厂干货,是开发者经历和成长的优秀指南。

喜欢就点个好看吧

知乎客户端跨平台-Hybrid-调试实战(1) flipper 提供了一个桌面客户端,然后这个桌面客户端提供了一个和手机客户端通信的机制,免去了 socket 服务的开销,依靠这个通信机制,我们可以把上述的功能复制过来。只要是程序员,不管是Java还是Android,如果不去阅读源码,只看API文档,那就只是停留于皮毛,这对我们知识体系的建立和完备以及实战技术的提升都是不利的。我编写完桌面插件之后,按照 flipper 提示的方式进行配置,还是无法动态加载我写的插件,最后我是把 flipper 的源码拉下来,将插件工程放到了。 阅读详情

相关推荐

跨平台工业HMI实战:用Blazor Hybrid搭Web/桌面一体化上位机,Windows/Linux通吃+OPC DA适配全攻略

汽车零部件厂HMI跨平台改造方案 该方案针对汽车零部件厂面临的产线HMI系统割裂问题,提出基于Blazor Hybrid的一体化解决方案。系统采用分层架构,通过协议适配层解决Windows/Linux双平台下OPC DA兼容性问题:Windows端使用原生OPC DA客户端,Linux端通过Python中间层+MQTT桥接。服务层采用SignalR实现实时数据推送,UI层利用Blazor组件实现多端共享。方案实现了90%+代码复用率,支持Windows桌面程序、Linux网页服务和移动端APP的统一维护,有

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 978

嘿,兄弟!移动端调试工具Flipper了解一下

内容简介:本文介绍了一个面向移动端开发者的桌面调试平台Flipper,该调试工具功能包含移动端的日志,布局,文件,性能监控等。什么是FlipperFlipper 是 fa...

QiwooMobile的博客 4342

flipper-plugin-reduxinspector:Redux Inspector for Flipper(可扩展的移动应用调试器)

鳍状插件-reduxinspector English | 介绍 鳍状肢的Redux检查器(可扩展的移动应用调试器)。 快速开始 先决条件 开始之前,请确保您具有: 已安装的 安装 通过单击左侧边栏底部的“管理插件...”,然后选择“安装插件”选项卡,可以找到它以及其他可用的Flipper插件。 相关链接 讨论 如果您对此项目有任何建议或疑问,可以由与我讨论。 执照 MIT License Copyright (c) 2019 JianyingLi <lijy91> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), t

使用Flipper调试应用

【代码】使用Flipper调试应用。

qq_53761321的博客 1965

Flipper是处理功能切换的简单实用工具-JavaScript开发

Flipper Flipper是处理功能切换的简单实用工具。 它不是一些秘密武器,而是一组最佳实践,可用于在应用程序中翻转功能,该功能作为库提供。 Flipper Flipper是处理功能切换的简单实用工具。 它不是一些秘密武器,而是一组最佳实践,可以在您的应用程序中使用翻转功能,这些功能以库的形式提供。 快速入门将此库添加到gradle配置实现'com.redmadrobot:flipper:1.0.6'创建一个具有功能描述的类object features {object Feature1:Feature(){overlay val id =“ Feature1”}}创建一些最简单的配置

(蓝桥杯)STM32G431RBT6(SysTick timer)

选用最基础的定时器。

2301_81764359的博客 1903

React Native性能剖析:Flipper工具使用

Flipper 是一个开源的桌面调试工具,支持多种 React Native 和 GraphQL 调试功能。它提供了丰富的插件,帮助开发者分析应用性能、网络请求、内存泄漏等问题。

天涯学馆 3770

从流量到凭证:实战解析SMB协议中的NTLMv2/v1哈希提取与破解

本文详细解析了SMB协议中NTLMv2/v1哈希的提取与破解实战技巧。从流量捕获、哈希格式处理到Hashcat高效破解,提供了一套完整的操作指南。文章特别强调了NTLMv2和NTLMv1哈希的区别及处理要点,并分享了防护建议与检测方法,帮助安全人员提升渗透测试效率。

weixin_30642561的博客 116

flipper

https://gitee.com/mirrors/facebook-flipper https://github.com/facebook/flipper/ 什么是Flipper Flipper是facebook开源的一个面向移动端(Android/iOS)开发者的桌面调试平台。 开源地址: https://github.com/facebook/flipper 官网地址: https://fbflipper.com/ 它分为两个部分: macOS的桌面应用程序(目前仅支持macOS) Android和

yzpbright的博客 1106

Flutter框架GetX从入门到精通第二篇:路由管理-告别繁琐的Navigator

Flutter框架GetX从入门到精通第二篇:告别繁琐的Navigator。本系列将带你从零开始,一步步掌握 GetX 框架的核心功能与实战技巧。

鹏多多的博客 171

RH850从0搭建Autosar开发环境【23】- Davinci Configurator之DCM实操实现DID的读取写入

RH850从0搭建Autosar开发环境【23】- Davinci Configurator之DCM实操实现DID的读取写入,结合Developer实现

weixin_42412049的博客 1811

正在搜索开发人员模式安装包_优秀!适用于移动开发人员的开源跨平台桌面调试平台——Flipper...

介绍Flipper是笔者在浏览Github的时候发现的一个神器,我想这对于移动开发者来说真的很不错——Flipper是用于调试iOS,Android和React Native应用程序的平台,来自于Facebook,目前star数量已达到6.6k。它通过简单的桌面界面可视化,检查和控制您的应用程序。日常可使用Flipper或使用插件API对其进行扩展。本文简单介绍一下这个提效的好助手,部分来自于翻译...

weixin_39829574的博客 573

uniapp [安卓苹果App端] - 详细实现手机蓝牙连接打印机及打印票据小票/标签/面单/热敏小票订单/快递单等通用兼容适配解决方案,Uniapp对接蓝牙打印机支持各种主流品牌及打印指令,强悍插件

uni-app,安卓Android,苹果ios,安卓app端,苹果App端,uniapp苹果app,蓝牙打印机,uniappAPP实现通过蓝牙连接打印机打印,uniapp蓝牙连接打印机,安卓蓝牙打印插件,蓝牙打印机,蓝牙ble低功率及高功率打印机小票、标签、面单打印,手机PDA蓝牙打印插件,连接蓝牙打印机,蓝牙连接,打印文本、图片、条码、二维码,兼容斑马打印机、佳博打印机,TSC打印机,免费蓝牙打印机组件,蓝牙打印条码,蓝牙打印机连接,热敏蓝牙打印机,便携式打印机,打印机搜索不到,连接失败,发送打印命令

🏆 前端领域优质创作者 1万+

知乎客户端跨平台-Hybrid-调试实战(2)

其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。虽然 Android 没有前几年火热了,已经过去了会四大组件就能找到高薪职位的时代了。这只能说明 Android 中级以下的岗位饱和了,现在高级工程师还是比较缺少的,很多高级职位给的薪资真的特别高(钱多也不一定能找到合适的),所以努力让自己成为高级工程师才是最重要的。

2401_84123188的博客 427

单线激光雷达的工作原理

单线激光雷达通过单一激光束的水平扫描和时间 / 相位测量,实现二维环境的距离感知,是低成本二维导航的核心传感器。尽管其无法直接提供三维信息,但其可靠性和经济性使其在消费级和工业级场景中广泛应用。随着技术发展,部分单线雷达通过振动镜或 MEMS 微振镜实现微小角度偏转,可近似模拟多线扫描效果,进一步拓展了应用边界。

谢谢大家的关注和点赞!这里只有纯纯的知识干货,没有一句废话。希望能实实在在帮到大家~要是觉得有用,别忘了给我点支持哟,你 1859

Linux 4.19、Linux 5.10、Linux 6.1 三个版本详细分析

Linux 4.19发布日期:2018年10月22日LTS 状态:是长期支持版本,官方支持到2024年12月。Linux 5.10发布日期:2020年12月13日LTS 状态:LTS 版本,官方支持到2026年12月。Linux 6.1发布日期:2022年12月11日LTS 状态:不是官方的LTS版本,但通常社区会为新的版本提供一定时间的支持。定位:稳定性和长期支持,广泛应用于多种平台,尤其是嵌入式系统和服务器。主要优势:稳定性高,广泛的硬件支持,核心功能可靠。

小灰灰的博客 5957

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

最后小编想说:不论以后选择什么方向发展,目前重要的是把Android方面的技术学好,毕竟其实对于程序员来说,要学习的知识内容、技术有太多太多,要想不被环境淘汰就只有不断提升自己,从来都是我们去适应环境,而不是环境来适应我们!这里附上我整理的几十套腾讯、字节跳动,京东,小米,头条、阿里、美团等公司19年的Android面试题。把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。由于篇幅有限,这里以图片的形式给大家展示一小部分。

2401_84002771的博客 904

高通开发系列 - Bootloader之lk匹配dtb和dtbo中msm-id和board-id的知识

lk匹配dtb和dtbo中的msm-id和board-id等知识

fulinux的博客 4247

Xamarin Hybrid应用开发实战指南

跨平台移动开发框架Xamarin结合了Web技术与原生应用优势,通过C#语言统一处理业务逻辑,实现高效开发。Hybrid应用利用WebView组件承载HTML/JS/CSS界面,同时通过原生容器访问设备功能,在保持Web开发效率的同时提供接近原生体验的性能。Xamarin.Forms作为核心UI框架,支持Android、iOS等多平台部署。本文深入解析Xamarin Hybrid开发中的WebView优化、JavaScript与C#互操作等关键技术,分享性能调优和内存管理实战经验,帮助开发者快速构建高性能混

weixin_33901926的博客 363

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

为什么顶级公司都在转向Blazor Hybrid?.NET MAUI 9.0跨平台真相揭晓

掌握C#实现跨平台桌面应用(.NET MAUI 9.0+Blazor Hybrid)的完整方案,解决多平台开发效率难题。适用于Windows、macOS和移动应用开发,结合Blazor Hybrid的Web与原生融合优势,提升开发速度与维护性。一次开发,多端部署,性能优异,值得收藏。

InstrWander的博客 1065

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

hybrid简单了解

技术点总有它的来由。文中例子参考Jockeyjs.js容易理解一点。文章概要:1.hybrid 基本概念2.前端和客户端的交互3.前端和客户端的交互实现4.前端交互实现关注点5.小结 1.hybrid 基本概念1.1什么是hybrid?hybrid即“混合”,前端和客户端的混合开发模式,某些环节也可能涉及到 server 端。 hybrid 底层依赖于Native提供的容器(WebView),上层...

weixin_34336526的博客 998

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

史上最全的Android面试题集锦,知乎上已获万赞

背景 知乎客户端中有一个自己维护的 Hybrid 框架,在此基础上开发了一些 Hybrid 页面,当需要前端或者客户端开发接口的时候,就涉及到联调的问题。 和一般的 前端 <=> 服务端,或者 客户端 <=> 服务端 类似,前端 <=> 客户端也会出现联调的各种问题,但是往往 Hybrid 开发相关的调试工具并不是那么完备。 由于在 Hybrid 里面,前端和客户端联系是很紧密的,假如一个人既熟悉前端开发又熟悉客户端开发,调试是很容易的,但是现实一般是可能客户端开发并不是

m0_57077995的博客 158

转转Hybrid体系建设历程-客户端视角

前言H5 在转转 App 中有着较高的比重,承载了 B2C,C2B,C2C 多个业务的巨大流量,转转在前端技术这块,考虑到业务架构和人员结构的情况,没有采用 ReactNative,Weex,小程序等技术,一直在 Hybrid 领域进行深耕。从 App 诞生之初直到现在,转转的 Hybrid 体系经历了一些迭代和演进。之前公众号历史文章曾经发布过《转转Hybrid体系建设》,这篇文章是站在前端视角...

大转转FE 569

【总结】1532- Hybrid 远程调试的前世今生

出品:西瓜视频前端技术团队作者:郑家兴 前言 前端程序员最容易搞出 P0 事故的就是白屏,PC 上的白屏我们比较好调,打开 Chrome Devtools 就能看见。但是手机上的白屏怎么调?以及远程用户手机上的白屏又该怎么调?这时候就需要使用远程调试的技术了。本文将对远程调试这个话题进行探讨,并给出最佳实践。谁适合阅读本文档有移动端 Web 开发背景,或者对移动端 Web 开发感兴趣的前端同学预期...

pingan8787 530

看完就懂的Hybrid框架设计方案

????目录1 前言2通信方案3 离线包方案4 容器基础能力5开发调试6稳定性与安全7番外篇8 总结本篇文章探讨“基于 Webview,如何在 App 内实现带离线包能力的 H5”。在当下这个主题似乎有些过时,但 H5 技术以其良好的跨端一致性,长期来看会占据一席之地,希望整理一个较完整的方案,从基本的实现原理到业务具体应用,让不了解的同学对“离线 H5"有一个较完整的视角。01前言2009年,...

QcloudCommunity的博客 1086
上一篇: JDFlutter 京东跨平台开发框架!
下一篇: Android 1.5 -10.0 都有哪些新特性?
DevolperFront
博客等级 码龄8年 465粉丝 81原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值