開發者的高階之路 用語法樹來實現預編譯

2021-09-13 01:14:42 字數 1903 閱讀 8904

如何在保證安全性的前提下,提公升開發過程的效率,是每個開發者都在不斷探索的問題。借助語法樹,開發者能夠更好地展現和修改源程式**,優化開發環節,提高安全係數,還能進一步實現安卓預編譯。

語法樹是一種樹狀結構的源程式**呈現方式,它可以很好地展示源程式**的資訊,這其中就包含了:儲存源程式的**資訊和對應執行時的結構。

如何生成一棵語法樹?在回答這個問題前,我們需要先了解編譯器的工作流程,它主要分為詞法分析、語法分析、中間**和目標**這四個過程,語法樹則是由語法分析一過程生成。

這一階段,開發者可以對語法樹進行修改,達到修改源**的效果,從而實現不同的應用目的。

開發者可以對語法樹的一些節點進行修改或增加,來達到**自動生成的目的。同理,開發者也可以通過遍歷**塊插入部分埋點**,或者找到沒有用到的**進行**縮減。

線上發版後,開發者會遇到各式各樣的問題,需要通過日誌定義這些問題。明文輸出的日誌存在安全隱患,日誌混淆外掛程式可以對日誌的輸出內容進行混淆,大大提高了這一過程中的安全係數。基於語法樹實現的個推日誌混淆外掛程式,通過遍歷指定簽名的方法呼叫,修改它引數的值進行混淆。

開發者還能用語法樹來實現預編譯指令,常見的預編譯指令主要分為條件編譯、巨集定義、檔案包含三大類。過去,開發者一般使用antenna來實現預編譯指令,它是乙個基於ant的工具,隨著ide的更新換代,開發者會發現ant中的一些缺陷。antenna需要配置環境變數,配置檔案比較繁瑣,且不支援gradle整合。

個推預編譯外掛程式是乙個基於語法樹的流程,它經過詞法分析產生token流,再通過語法分析進行模板匹配執行相應的預編譯指令。

基於antenna進行了改進的個推預編譯外掛程式,不僅支援整合到gradle,還簡化了配置檔案的流程。外掛程式支援常見的預編譯指令,如條件編譯、巨集定義、debug、mdebug等。

外掛程式在antenna上進行了型別擴充套件,支援float、double型別擴充套件;在表示式操作進行了擴充套件,提供了字串的startwith、endwith等操作。

開發者經常需要輸出一些除錯資訊,這些除錯資訊無法帶到線上,開發者需要在發包時手動刪除,並在再次除錯時進行新增,這個過程不僅效率低,而且容易出現漏刪的情況。

通過預編譯指令,開發者可以在除錯時加上預編譯指令debug,在發線上包時,執行預編譯指令,注釋掉不必要的資訊。提高開發效率的同時,大大減少了因遺漏導致的安全隱患。

個推日誌混淆外掛程式和個推預編譯外掛程式目前正處於**整理階段,未來這兩個專案都會提供開源,幫助開發者打造乙個既安全又高效的開發環境。

開發者的高階之路 用語法樹來實現預編譯

如何在保證安全性的前提下,提公升開發過程的效率,是每個開發者都在不斷探索的問題。借助語法樹,開發者能夠更好地展現和修改源程式 優化開發環節,提高安全係數,還能進一步實現安卓預編譯。語法樹是一種樹狀結構的源程式 呈現方式,它可以很好地展示源程式 的資訊,這其中就包含了 儲存源程式的 資訊和對應執行時的...

獨立開發者的自由之路 2

世事大抵都是如此 要麼生活在別人的眼神裡,迷失在自己的心路上 要麼走自己的路,讓別人去瞎 扯蛋!ios開發者帳號要99美元,谷歌 要25美元。第乙個小遊戲,最大的初衷也就是能把流程走通,沒必要沒花這錢。看了公司開發的遊戲上的電子市場差不多有70幾個,眼花繚亂,何其多,看來壟斷和開放都是有利有弊的,有...

PHP開發者的Linux學習之路

談起乙個高效動態 的構建,那就不得不提到lamp,即linux作業系統 apache網路伺服器 mysql資料庫 perl php或python程式語言等開源產品所組成的 架構框架,其最大的優勢是開放性強,安全性高,且成本低廉。因此,lamp成為了國際流行的 構建方案。而作為一名php開發人員,在工...