网鱼AI电商助手  ·  面向闲鱼卖家的 AI 铺货与发布自动化 工作日 09:00–18:00  ·  试用与部署 免费

下载与部署,先看环境能不能撑住

这套系统不是双击一个安装包就能用的软件:它要驱动安卓设备、要占端口、要授权、要按你的账号与服务线写配置,所以交付形态是部署。这页把交付边界、机器与设备的环境要求、八步部署顺序、首次配置的字段、分层的验收项、上线第一天的灰度方式都写清楚,并按实测踩过的坑给出排查顺序。照着走,能少走两三天弯路。

交付形态环境要求部署八步首次配置验收项常见问题
桌面显示器与键盘
Deploy first · 先把运行环境固定下来,再谈流程

01  /  交付形态

这里讲的是部署,不是装个安装包

先把预期摆正:这套系统不在公开渠道分发安装包。原因不是故作姿态,而是它装不起来。它依赖 ADB 驱动、依赖设备授权、依赖 adb server 端口分配、依赖一份写在绝对路径上的配置,还要跑通分层的引擎自检。这些环节里任何一步在这台机器上不成立,装完也用不了。所以交付形态是:由部署方把这套装到你的机器上,完成首次配置,跑通自检,交出验收结果。

这个形态决定了“下载”这件事在你这里长什么样:你不需要先找安装包,需要先准备一台机器、若干设备、一个账号,然后约一次部署。流程是准备、部署、验收、灰度四段,不是下载、安装、打开。

阶段谁做产出
准备使用方机器、设备、集线器、网络、账号,按环境要求逐项对齐
部署部署方驱动与授权、端口规划、配置写入、自检跑通
验收双方分层自检逐项结果,反向测试结果
灰度使用方第一批少量发布,观察日志与台账

为什么不给一个压缩包让你自己解压?因为解压出来的是文件,装不上的是环境。最典型的三个卡点:驱动装在哪个系统上(WSL 到 Windows 的 TCP 不通,驱动必须跑 Windows 侧)、adb server 连哪个地址(不显式写就连到了另一个 server,看到一半设备)、设备授权是不是真的过了(授权弹窗点过不代表 adbkey 已写入)。这三处都要现场看,远程发文件解决不了。

还有一层边界要讲清:部署方负责让系统在你的机器上跑起来,不负责替你运营。账号归你、商品归你、发布节奏由双方的规则共同约束、平台侧的判定不由任何一方控制。部署完成的标志是分层自检全过,不是“能发出去一条”。这两者的差距,在一个月之后会变得很明显。

准备阶段的沟通成本也常被低估。把账号数、设备数、每天可投入的值守时间、类目范围这四项一次给全,端口、目录与节奏参数才能一次配到位;分几次补充,返工的是配置与自检,反而更慢。四项里最容易漏的是值守时间,它决定了故障响应落在谁那一侧。

这一段准备做得越细,部署当天越少返工。反过来,临时才发现少一台设备、没有集线器或者网络是共用的,整天的顺序都要重排,自检与灰度只能顺延到第二天。

02  /  环境要求

机器与设备,逐项对齐再开始

部署前一天把这些项对完,比部署当天现场补要省一半时间。下面每一条都写过不满足的后果,因为这几项几乎每一项都真实卡过人。

项目要求不满足的后果
操作系统Windows 机器,长期在线驱动在 WSL 里跑,TCP 不通,设备列表为空
USB 与集线器带独立供电的集线器,设备分散到不同控制器电流不够,多台设备同时段集体掉线
安卓设备真机或模拟器,开启开发者选项与 USB 调试无法建立界面层会话,读不到界面结构
ADB与设备匹配的版本,server 地址显式配置连到了另一个 server,只看到一部分设备
uiautomator2能在每台设备上建立会话并 dump 出界面能连不能用,任务卡在第一步
运行环境满足流程引擎与台账写入的运行依赖流程跑到一半异常退出,槽位丢状态
网络固定出网,上行稳定图片上传慢,窗口末端任务超时
时区与发布窗口一致的时区时间戳偏移,跨零点记录分错天
磁盘留出日志、截图与台账备份的空间写盘失败,且失败发生在最不该发生的时候

设备这一项要多说一句:不是所有安卓机都合适。界面层级稳定的机器更省事,定制系统改过界面结构的机器会让选择器失效得快。设备进池前要过三条判定:shell 往返、界面 dump、中文输入通道。中文输入这条尤其要注意,adb input text 打不出中文,这是实测结论,必须走 uiautomator2 那条通道。

模拟器可以用,但要单独规划。它没有实体 USB,掉线方式是进程被杀或端口回收,端口表要与真机分开维护,否则重启之后端口被别的进程占走,配置里还以为它在那儿。另外模拟器的序列号常是固定值,多开时会撞号,配置的键要用序列号加设备名的组合。

网络这一项容易被当成“能上网就行”。实际要求更具体:多设备同时上传图片时上行要撑得住;出网要稳定,不能频繁切换;设备池最好单独一条线路,不与办公网络混用。上传慢的直接后果是任务在窗口末端超时,而窗口末端正是最不该超时的位置。

最后是那台机器本身。它不需要很高配置,但需要稳定:不休眠、不自动更新重启、不跑别的重负载任务。把它当成一台设备看待,而不是一台办公电脑。

03  /  部署八步

部署顺序,不能颠倒

八步的顺序有依赖关系,跳过任何一步都会在后面变成难查的故障。照顺序走,每步都有可观察的结果。

第一步:固定运行目录与数据目录

数据目录用绝对路径写在配置里,不依赖环境变量。这一条来自一次真实事故:自检数据写进了生产台账,根因是路径解析早于环境变量生效。目录一旦定下就不再改,改路径等于换了一套数据。

第二步:装 ADB 并显式指定 server 地址

装完之后不用默认推断地址,把 server 的地址与端口写进配置。顺手确认一下当前连的是哪个 server,多设备场景下这一步能省掉后面一半的排查。

第三步:设备接入与授权

逐台接入,逐台确认授权弹窗已确认、adbkey 已写入。多台一起插再统一授权,很容易有一两台漏掉,而漏掉的那台在列表里可能仍然显示着。

第四步:端口分配与租约目录

给每台设备分配独立的 adb server 端口,端口与设备标识一对一绑定,写进配置;租约目录建好,确保进程异常退出后能被回收。uiautomator2 一个进程只绑一个端口,这一步不做,多设备会退化成串行。

第五步:装 uiautomator2 并逐台验证界面读取

每台设备建会话、dump 一次界面。dump 在 launcher 屏会失败,所以验证要在非桌面界面上做,并且把“先试压缩模式、失败再退回普通模式”这条退路写进流程。

第六步:写入流程与通道配置

两条通道分别配置:手机 APP 通道写设备映射与 YAML 流程,电脑网页版通道写接口参数。两条通道共用同一套台账与闸门,配置里不要各写一套规则,规则只有一处。

第七步:跑分层自检

网页通道 82 项、主路径冒烟 26 项、手机通道 24 项、引擎自检在每台设备 13 项,另跑反向测试。自检进程带标记,带标记的进程尝试写生产数据直接抛错;整轮自检前后对生产文件做哈希比对。

第八步:灰度发布与验收

先用一个服务线发一到两条,看台账是否按槽位追加、item_id 是否能回读到、闸门结论是否落账。这一条跑通,才放开到正常节奏。

这八步里,第一、第四、第七步最容易被简化,而它们恰好是后面所有麻烦的来源。第一是路径,第四是并发,第七是可核对性。省掉任何一步,症状都不会当场出现,而在两周之后的某次对账里出现。

如果部署由对方执行,你至少要现场看三件事:数据目录的绝对路径写在哪一行、端口与设备的对应表长什么样、分层自检的输出是不是逐项列出来的。三项都看到了,才算真的装完。相关流程在闲鱼自动铺货教程里有面向操作者的版本。

部署当天的节奏也建议按这个顺序排:上午装环境与做设备授权,下午跑自检与灰度。原因是设备授权经常需要人工确认,一次不齐就要重来;自检跑一轮要一段时间,放在下午能留出修复的余地。反过来把自检排在最后一小时,一旦有一项不过,当天就没有复跑的机会,第二天还要重新确认环境有没有被改过。

04  /  首次配置

配置里必须写死的几项

首次配置不是填几个框,而是把几件以后不该再变的事定下来。下面这些项要写死,写死的意思是:写在配置文件里,不靠运行时推断,不靠环境变量,不靠“默认值应该是对的”。

配置项写什么为什么必须写死
数据目录绝对路径路径解析早于环境变量生效曾导致自检写进生产台账
备份目录绝对路径,与数据目录分开写生产前要留备份,备份不能放在同一块盘上
adb server 地址地址加端口推断会连到另一个 server,看到一半设备
设备端口表设备标识到端口的映射uiautomator2 一进程只绑一个端口
租约目录与阈值目录路径与超时秒数进程崩溃后端口要能被回收
通道开关手机通道与网页通道各自是否启用两条通道路径不同,混用会让归因变难
发布窗口09:00 到 21:59窗口外发布违反节奏规则
每日条数与间隔每日 5 到 10 条,间隔不小于 30 分钟并带抖动间隔是硬下限,不是建议值
单服务线上限每日 2 条,周上限 12 条配额按服务线算,不按设备算
中文输入通道指定可用的一条,默认不用 adb input textadb input text 打不出中文
时区与窗口一致时间戳偏移会让记录分错天

这几项里最有争议的是把节奏参数写死在配置里。有人想留出“临时多发几条”的口子,这个口子不该留。节奏是账号侧的安全边界,留口子等于把边界交给当时的心情。真要调整,走配置变更、留记录、观察三周,而不是临时改一下再改回来。

配置里还有一处需要显式:自检标记。自检进程带标记,带标记的进程一旦尝试写生产数据直接抛错。这个判断要写在写入模块里,不能靠调用方自觉——自觉是最不可靠的一层防护。

配置写完要做的事只有一件:读回来核对。把配置文件读一遍,逐项确认写进去的是你以为的值。曾经出现过的错误是端口号写成字符串、路径末尾多了空格,两者都不会报错,只会在某次运行时表现为“设备未找到”。

配置改过一次就要留一条记录,写清改的是哪一项、为什么改、什么时候改的。否则下次出问题时会多出一个变量:到底是环境变了,还是配置被改过。这一条在多设备环境下尤其重要,因为改一处端口可能只影响其中一台设备。

05  /  验收

验收不是能发一条,是逐项有结果

验收标准要能被第三方复核。下面这份清单是交付时可以逐条对着跑的,每一条都有明确的可观察结果。

  • 网页通道 82 项逐项跑完并列出结果,不是“整体通过”
  • 主路径冒烟 26 项从选品到台账落盘的整条主路径
  • 手机通道 24 项设备端流程的动作与等待
  • 每台设备引擎自检 13 项三台设备就是三份 13 项,不能合并成一份
  • 反向测试通过该拦住的情况确实被拦住,不是只测顺利路径
  • 自检污染防护自检进程带标记,带标记写生产直接抛错
  • 写前备份改动生产数据前生成备份,并读回验证行数一致
  • 哈希比对整轮自检前后对生产文件做哈希比对
  • 台账口径两条通道写同一本台账,字段含 item_id、标题、描述、价格、时间戳
  • 槽位守恒成功加失败加跳过加取消等于当日槽位数
  • 到点复检发布前用当下基线重跑闸门,不通过就不发
  • 平台健康闸平台侧异常时暂停发布,不硬发

这份清单里,反向测试最容易被跳过,也最能说明问题。顺利路径跑通只证明“能用”,反向测试才证明“不会乱用”:闸门该拦的拦住了、超量的被挡住、间隔不足的被顺延、重复指纹的被去重。只测顺利路径的系统,在第一次遇到异常时就会做出错的决定。

槽位守恒这一条要现场算一次。把当天的槽位数、成功数、失败数、跳过数、取消数打出来,四态相加应当等于槽位数。不相等就先补状态,不要先分析原因——这一步能抓出程序中途退出没写记录的问题,而这类问题在日志里通常看不出来。

还有一个验收时容易忽略的点:截图。界面快照与界面结构 dump 是排查的原料,验收时要确认它们真的落盘了、能打开、带时间。这两样东西平时没用,出事时是唯一能还原现场的东西。台账与截图的对应关系,在发布数据台账里有说明。

验收结果要写成一份可以存档的记录:日期、设备清单、每项的通过情况、失败项的编号与原因、修复后的复跑结果。这份记录在三个月后仍然有用,因为它是唯一能证明“当时是什么状态”的东西。

这份记录还要与运行目录对得上:自检输出、每台设备的 13 项结果、反向测试明细,都落在同一个归档目录里按日期分开。散在各处的截图与临时文件,三个月后基本没人找得到。归档目录用日期加版本命名,不用人名,这样换人值守也不用问。

06  /  排查

连不上、读不到、打不出中文

部署之后最常见的四类问题,按出现频率排。每一类都给了排查顺序,顺序比结论重要,因为症状往往指向错误的地方。

设备列表里没有设备,或者设备时有时无

先确认驱动跑在哪个系统上:WSL 到 Windows 的 TCP 不通,驱动必须跑 Windows 侧。再确认 adb server 地址是否显式配置,两个进程连到不同 server 时会各看到一部分设备。最后看 USB 供电,多台设备同时掉线通常是集线器电流不够,换带独立供电的集线器并把设备分散到不同控制器。

能连上,但读不到界面结构

先在非桌面界面上验证 dump,launcher 屏的 dump 失败率明显更高。做法是先试压缩模式,失败再退回普通模式,两条路都要写进流程。仍失败就看 uiautomator2 能不能在该设备上建立会话,建不起来说明设备侧的界面服务没起来,重启设备的界面服务再试。

标题里打不出中文,或者只出现英文和数字

这不是编码设置问题。adb input text 打不出中文是实测结论,改字符集改不好。要切到 uiautomator2 那条中文输入通道,它已验证可以输入中文。三条输入通道里,adbkey 与 adb_input 各有适用场景,但中文这一项以 uiautomator2 为准。

进程启动时报端口被占用,但找不到占用者

上一个进程崩溃时没释放端口。检查租约文件里的进程号与时间戳,超过阈值就当作失效回收。这也是要用租约而不是简单锁文件的原因:锁会过期,人工清锁不可靠,尤其在多设备环境下。

任务跑到一半消失,台账里没有这条记录

先核对槽位守恒:四态相加是否等于槽位数。不相等说明有槽位丢了状态,通常是程序中途退出。再查那台设备是否在任务期间掉线,掉线会让流程停在等待动作上,直到超时。修法分两层:执行层加超时封顶,写入层保证异常退出也写一条终态。

发布的商品时间戳落在窗口外

大概率是时间戳取了设备本地时间,而设备时间与主控端有偏差。统一取主控端时间,设备侧只提供事件顺序。顺带确认时区配置与发布窗口一致,时区错了会让整天的记录都偏。

这六类的共同排查原则是:先确认环境层(系统、地址、供电),再确认设备层(会话、界面、输入),最后才看流程层。反过来的顺序会把时间花在读流程配置上,而问题在环境。

还有一类问题不在这六条里:平台侧异常。表现是任务都跑得动,但发布失败集中出现。这时候正确的动作是让平台健康闸生效、暂停发布,而不是加大重试。硬发的代价通常比停一天高。相关判断口径在防封控与商品合规检查里。

07  /  灰度

上线第一天,只发一两条

部署完成不等于可以按满负荷跑。第一天要做的是灰度:先一条服务线、一台设备、一到两条,观察完整链路,再逐步放开。

第一条看什么

看四件事:流程有没有走完、回执有没有拿到、item_id 能不能回读、台账有没有落一条带 item_id 的记录。四件事都成立才算这一条成功。任何一项不成立,都先停在这一步,不要继续发第二条。

第二三条看什么

看间隔。两条之间的实际间隔是否落在设定区间内、是否带了抖动。间隔是硬下限,不是建议值。同时看时间戳是否落在 09:00 到 21:59 之内。

当天结束看什么

看槽位守恒:成功加失败加跳过加取消是否等于槽位数。再看闸门有没有拦下东西,拦下的原因是不是预期的。一天下来如果闸门一次都没拦,要怀疑闸门是不是没生效,而不是庆幸顺利。

第二三天看什么

看结构:类目有没有分散、标题与主图的相似度有没有拉开、同一指纹的链接有没有超过三条。这几项在单条上看不出来,只有攒到十几条才能看出来。

什么时候放开到满负荷

连续三天槽位守恒、失败率稳定、闸门有正常拦截、结构指标没有恶化,再放开到每日 5 到 10 条、单服务线每日 2 条。放开是一次一小步,不要一次拉满。

灰度期最常见的错误是“先发够量再说”。发布量上去之后,一旦结构出问题,就要回头删或改已经发出去的链接,成本比一开始慢两天高得多。另一个错误是灰度期不看台账,只凭“看着发出去了”判断成功——看界面和看台账是两回事,前者只能说动作执行完了。

灰度期还要刻意制造一次失败:故意让某台设备断连,看隔离是否生效、任务是否顺延、台账是否记下失败原因。这一次演练的价值很高,因为真正的故障总是在不方便的时候发生。演练过之后,值守的人才知道该看哪里。

如果第一天就出现“闸门拦下大量商品”,不要急着放宽规则。先看拦下的原因分布:如果集中在某一类目或某一类标题模板,改模板;如果分散在所有类目,可能是阈值设得太紧,需要按实际类目结构调,而不是整体关掉。相关方法在商品合规检查里。

放开到满负荷之后,节奏的意义才真正显出来。每天 5 到 10 条不是目标,是一个区间:低于下限说明产能没用上,高于上限就是在拿账号换量。真正要看的是每个服务线当天有没有跑满它那 2 条,以及周上限 12 条有没有被提前用完。提前用完的那一周,剩下几天就该停,而不是换台设备补上。

08  /  升级与归属

升级、回滚,和东西归谁

部署是一次性的,升级是长期的。这两件事要分开安排,否则一次升级就能把稳定状态打回原点。

升级前

先备份:数据目录、配置文件、流程文件三样都要备,并且读回验证能打开。再看变更说明里有没有涉及字段结构、状态枚举、时间戳口径的改动——这三类改动会影响历史数据可比性,要单独评估。

升级中

先在非生产目录跑一遍分层自检,通过之后再切生产。切换期间不要并发跑任务,避免一半旧一半新。升级过程记一条变更记录,写清版本、时间、改了什么。

升级后

跑一次全量自检,再发一到两条灰度。灰度通过才恢复满负荷。如果升级涉及台账字段,要确认历史记录仍能读、仍能按同一口径统计。

回滚

回滚要有明确的触发条件,比如自检连续两轮不过、灰度失败两次。回滚不是把文件拷回去就完,要连同配置一起回滚,并确认台账没有被写坏。回滚之后同样跑一次自检。

版本记录不要只记在脑子里。每次变更写进更新日志,写清版本、日期、改动项、影响面。三个月后回看某次数据异常时,这份记录是唯一能对上时间的依据。

最后是归属。这件事在部署阶段就要写清,不要等到换供应商时再谈。合理的约定是:机器与设备归你,账号归你,台账与日志归你,配置与流程文件可导出,导出格式是能直接读的文本。交付方保留的是软件本身。数据归属不清的后果很具体:台账导不出来,历史就带不走,换一套系统等于从零开始。

还有一条容易被忽略的归属问题:截图与界面 dump。这些是排查原料,也是运行记录的一部分,应当与台账放在一起、按同一套时间标记归档,不要散在各个临时目录里。归档策略定了之后不要随意改,改一次就等于断了一段历史。

归档目录的权限也要提前定:谁能读、谁能删,删除要不要留痕。没有这条约定,某天发现截图不见了,也查不出是谁清理的,而那时候恰好是最需要它们的时候。

需要更细的环境核对或安排部署,可以走联系我们;产品各模块的关系见产品功能总览,两条通道的差别见手机 APP 自动化通道与电脑网页版通道,多台设备怎么规划见多设备并行管理。

为什么不提供安装包下载?
因为装不上。这套系统依赖 ADB 驱动、设备授权、adb server 端口分配、绝对路径配置与分层自检,任何一步在这台机器上不成立,装完也用不了。交付形态是由部署方把系统装到你的机器上、完成首次配置、跑通自检并交出验收结果。流程是准备、部署、验收、灰度四段。
部署前要准备什么?
一台长期在线、不休眠的 Windows 机器;带独立供电的 USB 集线器;按要求数量的安卓真机或模拟器并开启 USB 调试;稳定的固定出网;与发布窗口一致的时区;留出日志、截图与台账备份的磁盘空间;以及要接入的账号。这些项对齐之后再约部署,能省掉现场补环境的时间。
驱动能不能装在 WSL 里?
不能。WSL 到 Windows 的 TCP 不通,ADB 驱动必须跑在 Windows 侧。把驱动放进 WSL 的表现是设备列表为空、连接超时,而设备本身完全正常,很容易被误判成设备故障。同时 adb server 的地址与端口要显式写进配置,不要依赖默认推断,否则不同进程会连到不同的 server,各自看到一部分设备。
中文标题打不出来怎么办?
这不是编码设置问题。adb input text 打不出中文是实测结论,改字符集改不好。要切到 uiautomator2 那条中文输入通道,它已验证可以输入中文。设备进池时就应该把这条通道列为必过项,否则设备能点、能读,就是写不了标题。
部署完成的验收标准是什么?
分层自检逐项有结果:网页通道 82 项、主路径冒烟 26 项、手机通道 24 项、每台设备引擎自检 13 项,另跑反向测试。同时确认自检污染防护生效(带标记的进程写生产直接抛错)、写生产前留备份并读回验证、整轮自检前后哈希比对一致、两条通道写同一本台账、槽位守恒成立、发布前用当下基线重跑闸门。验收标准不是“能发出一条”。
上线第一天应该发多少条?
先一条服务线、一台设备、一到两条,观察四件事:流程走完、回执拿到、item_id 能回读、台账落了一条带 item_id 的记录。四件都成立再放开。当天结束核对槽位守恒,并确认闸门有正常拦截。连续三天槽位守恒、失败率稳定、结构指标没有恶化,再放开到每日 5 到 10 条、单服务线每日 2 条。
升级之后出问题怎么回滚?
升级前把数据目录、配置文件、流程文件三样都备份并读回验证;升级先在非生产目录跑自检通过再切生产;切换期间不并发跑任务。回滚要有明确触发条件,比如自检连续两轮不过或灰度失败两次。回滚不是拷文件,要连同配置一起回滚,并确认台账没有被写坏,回滚后同样跑一次自检。
部署之后数据归谁?
合理的约定是:机器与设备归使用方,账号归使用方,台账与日志归使用方,配置与流程文件可导出且导出格式是能直接读的文本,交付方保留软件本身。这一条在部署阶段就要写清,因为它决定两年后换不换得动。台账导不出来,历史就带不走,换系统等于从零开始。

部署之后

系统跑起来只是开始,能不能核对才是分界

分层自检、台账回读、槽位守恒,这三件事决定了出问题的那天你是能定位,还是只能猜。

留好三样东西

截图、界面结构 dump、带时间的失败原因枚举。三样都在,设备是真坏了还是被某类商品卡住,几分钟就能分开;三样都没有,同一个故障每次都要从头查一遍。

先跑通一条真实发布,再谈铺量

把账号、设备、商品素材交给我们的部署流程,先跑通一条真实发布并留下可核对的日志,确认没问题再谈规模化。