xPackage
''' ··· coding by myself '''
拆解打包机的一些学习经验和笔记
-
主流思路:
- 学习编程语言和学习人类自然语言并无二致。小时候我们开始说话的时候都是从模仿开始的,而且就只能发出最简单最容易发出的声音(爸爸或妈妈),但是当大人不断的教给你新的词汇,随着你的积累和练习越来越多,这个时候你就能随心所欲的表达自己。学习编程语言也是如此,在最开始的时候,你的能力只能驾驭“hello, world”这样的代码,但是随着学习和积累,总有一个时候你可以随心所欲的写自己想写的代码,控制计算机做我们想让它做的事情。当然,这里需要一个顿悟的过程,顿悟显然是一个从量变到质变的过程,顿悟的快慢应该取决于量的积累,也就是相关知识的积累。当然,如果你要成为改造世界的天才程序员,这个估计天分还是至关重要的因素,就像天才是百分之一的灵感加上百分之九十九的汗水,但百分之一的灵感起决定性作用。但是对于普通人来说,编程学不好还真不是天分的问题,那多半是因为量的积累还不够,这里的量一方面是新知识的汲取,一方面是旧知识的巩固。
-
抓住类继承框架的思路
- 任何工程都是思想思路的逻辑表达
- 都是一场自圆其说的工程拆解,print ,type ,dir 少不了
-
需要有一个最小拆解环境,demo,workspaces
- 很多驱动来源于状态的改变,而监控不同的condition
- 可以通过不同的file修改来解决,类似于移动到不同的目录文件夹
- 类似于将文件名命名为不同的标准格式,例如后面带.ok, .error
- CLI是很重要的衔接不同的编程模块和功能的工具
- 然后在文件里面填充不同的文本,也可以达成目标
- 例如,noot打包框架就是通过php的js,修改对应目录下的文件
- 再通过python框架命令,监听到不同目录(代表不同状态)的任务,然后读取文件内的json数据信息参数,进行的不同的构建
- 核心Key就是读取文件json,进行分类,写入了json
-
使用admin__.php 来进行对应的js修改
- 然后DataFlow RoadMap(Route)到对应的类进行xPackage打包
- 这一套项目用了很多年,确实有其独到之处,能经历得起时间考验的才是经典项目。
-
通过这个项目的拆解,想到了几个可以写的idea
- 在wampserver上面的对应目录挂不同人的名字,然后进行文本文件的修改,这样可以达到每天日报的汇总。后端起一个python来监控处理对应的文本文件(比如说挪位置,或者读取后插入数据库进行删除就好了。)
- 其实从原理上也可以直接连接和修改数据库进行这个每天日报汇总。
- 因为对应的webhook是可用的,那么自动提醒又可以用popo机器人日报提醒那一套了,看要不要复用而已。(这个跟1,2不是同一个功能项目)
-
打包机逻辑
-
拆解功能
-
可复用功能和思考模式 - 见下面的
-
调试可以使用autoreload的模式进行运行,对应目录文件在/auto_relaod/test_reload.py 可以查看(可以在sublime的左侧文件夹栏进行右键点击对应的文件,进行复制为选择文件路径操作)
-
noot/nootMain.py 用于项目的主路径进入,涉及的知识点是接收解析系统的传参 sys.argv ,通过接收不同的参数从而启动不同的服务类型进行服务(一般思考可以从这个思路作为切入点,因为之前airtest的testcase似乎也是这样组织的,然后CLI可以很灵活适配各种方式)
-
启动用的runner, 详见/noot/nootCmd/runner/RunnerCmd.py 文件
-
RunnerCmd.py内网阅读理解到此处,这个是作为一个监督线程来进行处理的
-
监督过程先看对文件夹的监管
-
fileUtil包括了常规到文件夹和文件操作,新建删除等,clearFolder这些
-
RunnerCmd.py 79行,进行的是pop处理需要处理的文件
-
接下来进行runningFile和可只执行参数的实际拼接
-
这里是每个派发的实际执行处
-
-
打包机实机拆解例子
-
启动
-
nootMain.py
-
此处为框架启动的入口
-
@pyhton3 C:\nooot\jzxx\noonMain.py runner -baseFolder "C:\wamp64\www\build\jzxx\task" -sleepTime "8"
-
参数
-
argv
-
{'baseFolder':"C:\wamp64\www\build\jzxx\task","sleepTime":"9"}
-
package_name
- runner
-
-
-
-
cmdUtil.py
- 执行对应命令的入口
-
className = packageName[0].upper() +packageName[1:] + 'Cmd'
print("className")
print(className)
targetClass = eval(className)
print(targetClass,targetClass.__doc__)
print('')
print('='*10 ,'[start]',packageName,targetClass.__doc__.strip(),'='*40)
print('')
cmd = targetClass(argv)
executeResult = cmd.execute()
-
任务执行
-
RunnerCmd.py
-
定时查询需要执行的任务
-
-
-
def __executeWaiting(self, waitingFolder, runningFolder, finishedFolder,scheduleFolder):
'''执行waiting的内容'''
- 管理所有的任务
- waiting
- running
- finished
- schedule
- 调用cmdUtil.executeCmd执行具体的命令
- baseFolder
- 指定工作目录(用于存放waiting,running,finished目录,通常指向www对应的目录)
- nootCmd/*
- 所有单独命令的实现
- 安卓apk
- 安卓ab
- 桌面exe
- 桌面ab
- ......
- xProjectInfo
- 每个任务构建所需的信息
- svn路径
- Unity版本
- 包名
- ......
-
目录相关参数
-
nootMain.py
-
nootFolder
- 运行python命令时候带的路径名,python打包脚本的父路径
-
workspaceFolder
- nootFolder + '.workspace'
-
-
xProjectUpdate.py
-
self.xFolder
- self.getBaseFolder(self.version,'x') 项目路径
-
self.binFolder
- self.getBaseFolder(self.version,'bin') 输出路径
-
-
-
def __getBaseFolder(self,*parList):
'''获取基础工作目录'''
return os.path.path.join(workspaceFolder,'xproject',*parList)
- XWindowAssetBundleCmd.py
- BaseCmd.py
-
具体任务流程
-
通用流程
-
前置
-
打包业务
-
后置
-
-
具体业务分发
-
安卓AB
-
安卓apk
-
......
-
-
-
SVN
- url:xxx
-
web 事务事件管理
-
注意事项
- php会强制填充version
-
重新回归主线笔记
- RunnerCmd.py 里 96行的 runningFile
- runningFile = waitingFile.moveToRunning(runningFolder)
- 在XIosXcodeCmd.py的最后还引用了跨目录层级调试的例子
- 修改了目录结构和引用模块的方式,使之符合实际项目的真实情况
- 从XIosXcodeCmd 调试,进行了XWindowsExeCmd 到 XBaseCmd 再到BaseCmd 的父类函数的调用, output输出如图所示
PS D:\Code_Project\git-DailyCode\noot\nootCmd\xIosXcode> python .\XIosXcodeCmd.py
D:\Code_Project\git-DailyCode\noot\nootCmd\xIosXcode\XIosXcodeCmd.py
debug in local environment model
attention now has already close framework update for debuging model
xIosXcode
['nootMain.py', 'xIosXcode']
argv: {}
here is executeCmd func
className
XIosXcodeCmd
<class 'nootCmd.xIosXcode.XIosXcodeCmd.XIosXcodeCmd'>
用于生成xcode项目用于macOS发版
========== [start] xIosXcode 用于生成xcode项目用于macOS发版 ========================================
here is XIosXcodeCmd __init__
here is XIosXcodeCmd execute
here is XWindowsExeCmd execute function
here is XBaseCmd execute function
here is BaseCmd execute function
None
here is XIosXcodeCmd finish
---------- [end] xIosXcode 用于生成xcode项目用于macOS发版 ----------------------------------------
-
- 实际上,从noot项目中看子类父类的函数关系会觉得更直接了当,/advanced-lessons/classes 也涉及一些基础,但是不够这个完整的项目的实例明显
- 打包机拆解拆了一周多,进入疲惫期,目前打算先暂停打包机拆解,进入下一个阶段的nodejs云真机测试平台拆解中,此处mark一下,当前看到的是XIosXcodeCmd.py 下次也可以从此处开始进行,然后技术向拆解还有5个如下方面下次继续的时候可以注意
- HTML,JavaScript, php, 打包机web端
- XAndroid 包
- sdk
- no-sdk
- callUnity
- XIOSPackage 包
- push,sync 推送和上传到外网
- cdn, cdn的更新和修改对应的cdn目标链接