微信底層調用方案Hardcoder已開源!

1、Hardcoder 的誕生

隨着微信越來越複雜,性能優化變得越來越難做,優化所帶來的效果提升也越來越不明顯。所以我們⼀直在思考,該如何突破這個優化的極限?

直到有一次與廠商的交流我們瞭解到,部分廠商會針對微信做一些小改動,其中比較典型的就是“暴力提頻”。系統在識別到微信啓動,頁面切換等場景時,會粗暴地提高 CPU 頻率,從而提升 APP 運行的性能。

但由於廠商無法準確判斷微信場景,暴力提頻效果並不理想;而如果過多地提高 CPU 頻率,又對手機的功耗有影響。這一方案啓發了我們,我們何不跳出軟件的範疇,在手機硬件的層面上挖掘更多的性能優化空間呢?於是 Hardcoder 框架應運而生。

2、Hardcoder 是什麼

廠商暴力提頻效果不理想是由於在目前 Android 框架下,手機沒有辦法準確獲知 APP 需要資源的時機。如果我們需要挖掘手機硬件層面的性能優化,就需要跳過 Android 操作系統的應用框架,在應用開發者和硬件之間打開一個通道,讓硬件可以直接根據應用開發者的需要進行資源的調度。

Hardcoder 構建了 APP 與系統(ROM)之間可靠的通信框架,突破了 APP 只能調用系統標準 API,無法直接調用系統底層硬件資源的問題,讓 Android APP 和系統能實時通信。

[![[動態] 微信底層調用方案Hardcoder已開源!](http://www.52im.net/data/atta...](http://www.52im.net/data/atta...

利用 Hardcoder,APP 能充分調度系統資源如 CPU 頻率,大小核,GPU 頻率等來提升 APP 性能,系統能夠從 APP 側獲取更多信息以便更合理提供各項系統資源。同時,對於 Android 缺乏標準接口實現的功能,APP 和系統間也可以通過該框架實現機型適配和功能拓展。

3、Hardcoder 框架通信流程

Hardcoder 框架分爲 Server 端和 Client 端。其中 Server 端在廠商系統側實現,Client 端以 aar 形式合入到 APP中。

[![[動態] 微信底層調用方案Hardcoder已開源!](http://www.52im.net/data/atta...](http://www.52im.net/data/atta...

APP 在需要資源的時候,向 Hardcoder 的 Client 端發出請求。Hardcoder Client 端接收到請求後向 Hardcoder Server 端發出請求。Server 端接受到請求後會根據請求參數向硬件申請不同的資源,比如調整 CPU 頻率,把線程綁定到大核運行等,實現了 APP 到系統的通信。

同時系統也可把當前系統的狀態通過 Hardcoder Client 在 Server 端註冊的接口回調通知到 Client 端,從而 APP 可以獲取到系統狀態,實現系統到 APP 的通信。

Hardcoder Client 端與 Server 端採用的是 LocalSocket 的通信方式,由於 Hardcoder 採用 Native 實現,因而在 C 層使用 Linux 的 socket 接口實現了一套 LocalSocket 機制作爲 Client 端與 Server 端之間的通信方式。

Hardcoder 通信框架有以下特點:

  • 1)系統服務爲 optional,實現上可以完全支持或者部分支持;
  • 2)框架實現不依賴於特定 Android 系統,如 API level 限制;
  • 3)APP 的功能和業務特性不依賴於該框架。

4、Hardcoder 適用場景和效果

Hardcoder 框架有效提升了微信啓動、發送視頻、小程序啓動等重度場景的速度,朋友圈的滑動流暢性也明顯提升,平均優化效果達 10%-30%。

此外,由於微信作爲主動請求方可以在場景資源把控上做得更精細和準確,Hardcoder 在性能得到提升的同時僅增加了 2% 的電量消耗,相當於用 2% 的功耗換取平均 20% 的性能提升。

Hardcoder 框架目前已接入 OPPO、vivo、華爲、小米、三星、魅族等主流手機廠商,覆蓋 4.6 億+ 設備量。

5、Hardcoder 開源

從微信技術開放共享的理念出發,我們在騰訊內部進行了 Hardcoder 框架的宣傳和推廣,包括手機 QQ、企業微信、天天快報等多個應用團隊接入。其中手機 QQ 接入 Hardcoder 後,在啓動、打開聊天界面、發送圖片等場景的平均優化效果達 10%-50%。

我們現將 Hardcoder 框架開源,讓更多 Android 開發者享受到 Hardcoder 框架的價值,解決大家在性能優化和機型適配上的煩惱。

歡迎大家查閱 github 網址:http://github.com/Tencent/Hardcoder.git

6、如何使用 Hardcoder

一、通過Hardcoder 技術方案介紹,瞭解 Hardcoder 實現原理以及框架;

二、使用工程自帶 testapp 快速使用 Hardcoder 並驗證效果,具體請見Hardcoder Testapp 測試指南

三、APP 接入 Hardcoder,具體請參見Hardcoder 接入指南

  • 1)下載 Hardcoder 工程編譯 aar;
  • 2)項目 build.gradle 引入 Hardcoder aar;
  • 3)進程啓動時調用 initHardCoder 建立 socket 連接(一般進程啓動時需要請求資源,因而推薦在進程啓動時調用)。每個進程都是獨立的,都需要調用 initHardCoder 建立 socket 連接,建立連接後每個進程維持一個 socket,進程退出時 socket 也會斷開;
  • 4)initHardCoder 回調成功後調用 checkPermission,傳入 APP 已申請的各個廠商鑑權值;
  • 5)在需要請求資源的場景調用 startPerformance,傳入請求資源的參數。若場景位於進程啓動階段,比如 APP 啓動,需要在 initHardCoder 的回調成功以後再調用 startPerformance,確保連接已成功建立,或者判斷 HardCoderJNI 的 isConnect() 檢查 socket 是否已連接。
  • 6)場景結束時主動調用 stopPerformance,傳入對應場景 startPerformance 時的返回值 hashCode 作爲參數,停止本次請求。
  • 7)測試性能,APP 可對打開/關閉 Hardcoder 的情況做對比實驗,測試性能是否有提升。

四、向廠商申請線上權限,具體請見常見問題

五、發佈帶 Hardcoder 功能的 APP。

附錄: github的wiki 文檔鏈接

Hardcoder產品方案介紹:https://github.com/Tencent/Hardcoder/wiki/Hardcoder-產品方案介紹

Hardcoder 技術方案介紹:https://github.com/Tencent/Hardcoder/wiki/Hardcoder-技術方案介紹

Hardcoder testapp 測試指南:https://github.com/Tencent/Hardcoder/wiki/Hardcoder-Testapp測試指南

Hardcoder 接入指南:https://github.com/Tencent/Hardcoder/wiki/Hardcoder-接入指南

常見問題:https://github.com/Tencent/Hardcoder/wiki/FAQ

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章