开发工具

[toc]

背景

问:我不要频繁安装+卸载来安装我想要的包。我能不能同时装一个测试环境和正式环境?

答:不行。安装两个包,严格上来讲,不用想了,不行。具体原因涉及应用id,及app根据该id配置了各种三方key环境(除非你连三方的也都额外提供一套),太详细的道理我就不讲了。”不行“就对了。但是,我能让你安装一个包,却使用不同环境的功能。或者额外安装一个除与应用id相关的功能外其他皆一样的安装包

一、切换环境常见的场景为:

1、测试时候:换环境不用一直下载;

2、演示时候:某个环境使用不了,不用重新下载;

3、抓包时候:想切换代理,不用重新打包安装;

见下文:app环境与切换

二、额外安装一个除与应用id相关的功能外其他皆一样的安装包的使用场景:

1、app中不能接受切换环境,即严格限制一个包只能有一个环境

不允许切换环境的考虑原因:

测试包不允许切到生产:怕脏数据

生产包不允许切到测试:测试环境不是外界用户真正需要的

见我的另一篇文章:《iOS的重签名.md

一、功能开关

tool_entrance_0

tool_entrance_2log

二、app安装包与切换

1、app安装包信息

devtool_appinfo_0package

1.1、换包:app下载页

devtool_appinfo_0package_downloadurl

1.2、版本记录:历史版本记录页

devtool_appinfo_0package_version_records

2、各文件目录及大小

devtool_appinfo_0package_dirsize

三、app环境与切换

package_env_test package_env_product

流程图:《开发工具(含环境切换等).graffle.graffle)》中的【一、切换环境】版面

devtool_appenv_home

1、切换环境

2、切换平台

3、添加代理

devtool_appenv_3proxy_1

devtool_appenv_3proxy_2

四、设备信息

devtool_device_0devicetoken

devtool_deviceinfo_0

1、设备网络类型

2、设备屏幕大小

2.1、设备适配验证

devtool_device_uiadapt_check

3、设备ip及代理

4、设备埋点参数

未截取到的其他埋点参数见我的另一篇文章:《埋点规范_结构.md

5、是否模拟器

devtool_device_simulator_check

五、用户相关

devtool_user_info

六、调试页面

支付 支付宝
认证 实名认证、真人认证
选择器 生日选择、活动时间选择、项目多选
分享
关键页面入口 个人主页、发布页、引导页、完善性别/生日
位置相关 地图位置选择

快捷入口

1、检查更新

devtool_debug_0checkversion_1

devtool_debug_0checkversion_2

2、网页测试

devtool_debug_2webview_0home

2.1、网页快捷入口

devtool_debug_2webview_1url_entrance

2.2、白屏测试

devtool_debug_2webview_2blank_test.gif

2.3、JS测试

h5js.md

devtool_debug_2webview_3js

2.4、Route测试

h5_open_app.md

devtool_debug_2webview_4route

七、开发工具安全性处理

见我在”安全”专题里的另一篇文章:《开发工具安全性处理

八、脚本工具

目前的脚本操作如下:

qtool_ui_home

其中自定义的脚本操作有如下:

qtool_ui_custom_home

附1:Charles

文档:《Charles.md

附2:代理的实现(Flutter版)

dio添加代理

1
2
3
4
5
6
7
8
9
10
11
   (dio.httpClientAdapter as DefaultHttpClientAdapter).onHttpClientCreate =
(client) {
// config the http client
client.findProxy = (uri) {
CommonUtils.log('fcs-myproxy-begin:${uri is Uri} uri:${uri.toString()}');
return "PROXY 192.168.10.47:8888";//如果设置代理(localhost,127.0.0.1这样的是不行的。必须是电脑的ip)
// return 'DIRECT';// 如果不设置代理
};
client.badCertificateCallback =
(X509Certificate cert, String host, int port) => true;//忽略证书
};

End