如何離線部署 perfetto ui

perfetto 是從安卓9.0開始可用的安卓系統(tǒng)性能監(jiān)測相關(guān)的一個工具,可以參考官網(wǎng):https://developer.android.google.cn/studio/command-line/perfetto?hl=zh_cn
通常我們使用 ui.perfetto.dev 來查看從系統(tǒng)里面抓取到的信息,這個網(wǎng)站是可以離線使用的,但是某些時候,我們需要將這個網(wǎng)站離線或者部署到內(nèi)網(wǎng)使用,這里我們主要參考?https://perfetto.dev/docs/contributing/build-instructions#ui-development 。p.s: 官網(wǎng)是更加詳細的,這里只是簡單總結(jié)一下步驟。
下載源碼
你可以通過這樣一條命令下載到源碼
做Android Framework或者固件的人一樣就能看出來了,這條命令下載了AOSP源碼下的?platform/external/perfetto
,下載到源碼的方式還有很多,例如Github上的?https://github.com/google/perfetto。
下載依賴
這里最好使用Ubuntu環(huán)境,并且需要安裝 3.7 版本以上的 python3,如果不想破壞宿主機環(huán)境,可以用虛擬機或者docker來解決。
這一步視網(wǎng)絡環(huán)境,下載時間在 10min~30min 左右。
編譯運行(p.s 這一步可能需要 16GB 內(nèi)存,我用12GB內(nèi)存的虛擬機是跑不起來的)
成功運行之后,你會看到類似下圖的信息,如果你是在本地編譯運行,這個時候通過瀏覽器范圍?http://127.0.0.1:10000?應該可以正??吹骄W(wǎng)頁了。

如果你不是在本地編譯運行,可以用類似
的命令來運行,然后瀏覽器直接訪問編譯和運行perfetto的設備的IP地址,端口為 10000來訪問它。下面我是在局域網(wǎng)運行的樣例

離線部署
第三步有提及,編譯運行需要12GB上內(nèi)存,這個條件直接勸退VPS內(nèi)存小的人。ui.perfetto.dev
?實際上是一堆js/html文件,編譯運行之后,對應的網(wǎng)頁文件在源碼路徑out/ui/ui/dist
?
里面能找到,dist 目錄里面的文件大概是這些(p.s: 如果你編譯出來沒有 service_worker.js ,使用命令編譯運行不要停掉,用瀏覽器訪問一次服務就會生成出來)
把這些文件拿出來用任意一個你喜歡的web服務器搭建一個靜態(tài)文件服務器即可,同樣的,如果你實在沒有編譯運行的環(huán)境,還可以直接把 ui.perfetto.dev 扒下來。
移掉 is_internal_us.js 的訪問
訪問官網(wǎng)?ui.perfetto.dev?的時候,明明說是可以離線運行并且UI都出來了,但是每次訪問官網(wǎng),瀏覽器還是得轉(zhuǎn)半天,打開瀏覽器的調(diào)試頁面可以看到還訪問了了?https://storage.cloud.google.com/perfetto-ui-internal/is_internal_user.js?,如下圖所示


這個鏈接即使在外網(wǎng)也是訪問不到的,這里提供兩種辦法。
如果自己沒有需要訪問谷歌云的需求,可以直接改本機的hosts,把 storage.cloud.google.com 指向 127.0.0.1 在,這樣它訪問失敗的速度比較快。
編譯運行之前,修改源碼的?
ui/src/frontend/index.ts
,按照下圖所示把對應的位置注釋掉,然后重新編譯運行、部署。

支持USB調(diào)試
官網(wǎng)是支持在網(wǎng)頁上直接通過usb adb來連接安卓設備直接抓取trace的,離線部署的話只需要添加 https 支持就可以了。下面是我本地搭的示例
