【工具向】分析FGUI依赖关系工具
目錄
資源地址?
核心思路
代碼邏輯核心
后續擴展
正確拿到真實的依賴啦,因為所有都有一個唯一id,包含package和所有組件 圖片 字體等資源都有唯一id,應該用package.xml得到所有包體的依賴關系后,去遍歷全部xxx.xml里的所有節點 是否有 ui://xxxx這種 或 src=xxx 這種去知道它的依賴包。?
資源地址?
鏈接: https://pan.baidu.com/s/145as33i0KQ9f6HAfxuEUYw?pwd=pty8
提取碼: pty8
2022年8月6日更新:
在FGUI工程里輸出一個excel文件,內容類似
?以下是舊的已經沒有了 但是可以看看 就是這種的擴展板
處理依賴關系錯亂問題(比如公共資源引用其他非公共資源)
輸出包名 資源xml 依賴url? 依賴包名
上圖就是ModalWaiting包 有一個資源叫GlobalModelWaiting的家伙 去依賴了另一個叫Model的包里面的ui://qef31w6wujncf(這是一個資源唯一ID碼 能直接用這個字符串去搜索出對應的資源)
你可以新增邏輯,比如忽略公共包的輸出,Common 只需要判斷依賴包是"Common" 就不要寫入allStr輸出字符串就行了。
比如:
核心思路
FGUI概念:
包ID:packageId 每一個Package的唯一ID
組件ID:comId? FGUI每一個組件(UI、Button..)的唯一ID
資源ID:url 第一種形式:包ID(8位長度字符串)+組件ID,第二種形式:包名/資源名
FGUI都是以"ui://資源ID"來準確搜索出資源。
代碼邏輯核心
1、分析每一個包的package.xml,它內部有包id和所有組件id,獲取到<packageId, packageName>字典,主要用來通過包ID來獲取包名?!纠锩孢€有個字典沒用到】
2、分析每一個包里面的資源xml文件(排除package.xml),使用遞歸形式分析xml每一個標簽【<xxx id='xx' src='xx' pkg='xxx' icon='ui://xxx'>】
2.1 獲取標簽內兩個特殊的屬性,src屬性和pkg屬性,src屬性是依賴資源的組件ID,pkg屬性是依賴資源的所在包ID。pkg屬性是只有依賴其他包(非自身)才會存在。
2.2 獲取標簽內全部屬性,遍歷每一個屬性,以'|'符號進行分割屬性內容,再分析分割出來的string[],判斷string的內容存在"ui://"以這5個字符為前綴的,若有取出"ui://"字符后續的字符串【即content.SubString(5, content.Length-5)這個截取到的字符串就是資源ID(url)。
因為資源ID分兩種形式,首先第一種形式:? 包ID+組件ID的,我們要取它的前8位獲取到packageId(包ID),關鍵點來了,因為第一步驟里我們拿到了<packageId, packageName>字典,所以我們這里要判斷下是不是拿到的是第一種形式的包ID,而不是第二種形式的【包名/資源名】,判斷方法是直接判斷截取到的packageId是否存在字典中,如果存在則說明是第一種形式,否則第二種,代碼會對第二種形式做相應的處理。
總之,我們會處理url得到一個字符串【資源包名|資源xml名稱|依賴資源url|依賴資源所在包名】,每一個標簽如果都有上面2.1和2.2的情況都會誕生出一個這樣的字符串,放入到一個sumStr里以\n換行。
后續則是簡單的輸出到Excel表(sample.xlsx)
代碼要改的只有前面的地方,把fgui工程和輸出excel路徑修改成你的。
后續擴展:
因為分析工具基本都可以拿到資源ID(url)、組件ID、包ID,而每一個包的package.xml文件里也會記錄有包ID、組件ID(資源ID是由包ID+組件ID構成的),并且package.xml里還有很多內容,比如:資源相對路徑,后續可以弄出來<url, 資源相對路徑>字典,通過上面2.1和2.2得到的資源ID(url) 去獲取到資源的相對路徑,從而去拿到依賴資源的xml文件信息,去進一步分析依賴資源本身的情況(比如,資源大小、紋理尺寸等等)
總結
以上是生活随笔為你收集整理的【工具向】分析FGUI依赖关系工具的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux互斥锁的使用代码实现
- 下一篇: Linux下c/c++项目代码覆盖率的产