亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

開發(fā)者的進階之路:用語法樹來實現(xiàn)預編譯

CoffeX / 3302人閱讀

摘要:借助語法樹,開發(fā)者能夠更好地展現(xiàn)和修改源程序代碼,優(yōu)化開發(fā)環(huán)節(jié),提高安全系數(shù),還能進一步實現(xiàn)安卓預編譯。用語法樹來實現(xiàn)預編譯指令開發(fā)者還能用語法樹來實現(xiàn)預編譯指令,常見的預編譯指令主要分為條件編譯宏定義文件包含三大類。

如何在保證安全性的前提下,提升開發(fā)過程的效率,是每個開發(fā)者都在不斷探索的問題。借助語法樹,開發(fā)者能夠更好地展現(xiàn)和修改源程序代碼,優(yōu)化開發(fā)環(huán)節(jié),提高安全系數(shù),還能進一步實現(xiàn)安卓預編譯。

本文基于個推高級研發(fā)工程師李健民在該領(lǐng)域的實踐經(jīng)驗,與廣大開發(fā)者們一同交流語法樹在開發(fā)過程中的相關(guān)應用和具體使用場景。

什么是語法樹

語法樹是一種樹狀結(jié)構(gòu)的源程序代碼呈現(xiàn)方式,它可以很好地展示源程序代碼的信息,這其中就包含了:保存源程序的代碼信息和對應運行時的結(jié)構(gòu)。

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

在詞法分析過程中,會產(chǎn)生一系列的token流,token是一個保存著type和value的數(shù)據(jù)結(jié)構(gòu)。詞法分析將源代碼的每一個關(guān)鍵詞都分割出來,之后通過語法分析器進行語法模板匹配,最后生成語法樹。

語法樹的應用

這一階段,開發(fā)者可以對語法樹進行修改,達到修改源代碼的效果,從而實現(xiàn)不同的應用目的。

開發(fā)者可以對語法樹的一些節(jié)點進行修改或增加,來達到代碼自動生成的目的。同理,開發(fā)者也可以通過遍歷代碼塊插入部分埋點代碼,或者找到?jīng)]有用到的代碼進行代碼縮減。

線上發(fā)版后,開發(fā)者會遇到各式各樣的問題,需要通過日志定義這些問題。明文輸出的日志存在安全隱患,日志混淆插件可以對日志的輸出內(nèi)容進行混淆,大大提高了這一過程中的安全系數(shù)。基于語法樹實現(xiàn)的個推日志混淆插件,通過遍歷指定簽名的方法調(diào)用,修改它參數(shù)的值進行混淆。

用語法樹來實現(xiàn)預編譯指令

開發(fā)者還能用語法樹來實現(xiàn)預編譯指令,常見的預編譯指令主要分為條件編譯、宏定義、文件包含三大類。過去,開發(fā)者一般使用Antenna來實現(xiàn)預編譯指令,它是一個基于ant的工具,隨著ide的更新?lián)Q代,開發(fā)者會發(fā)現(xiàn)ant中的一些缺陷。Antenna需要配置環(huán)境變量,配置文件比較繁瑣,且不支持gradle集成。

個推預編譯插件是一個基于語法樹的流程,它經(jīng)過詞法分析產(chǎn)生token流,再通過語法分析進行模板匹配執(zhí)行相應的預編譯指令。

基于Antenna進行了改進的個推預編譯插件,不僅支持集成到gradle,還簡化了配置文件的流程。插件支持常見的預編譯指令,如條件編譯、宏定義、debug、mdebug等。

插件在Antenna上進行了類型擴展,支持float、double類型擴展;在表達式操作進行了擴展,提供了字符串的startwith、endwith等操作。

預編譯指令在安卓中的使用場景

開發(fā)者經(jīng)常需要輸出一些調(diào)試信息,這些調(diào)試信息無法帶到線上,開發(fā)者需要在發(fā)包時手動刪除,并在再次調(diào)試時進行添加,這個過程不僅效率低,而且容易出現(xiàn)漏刪的情況。

通過預編譯指令,開發(fā)者可以在調(diào)試時加上預編譯指令debug,在發(fā)線上包時,執(zhí)行預編譯指令,注釋掉不必要的信息。提高開發(fā)效率的同時,大大減少了因遺漏導致的安全隱患。

個推日志混淆插件和個推預編譯插件目前正處于代碼整理階段,未來這兩個項目都會提供開源,幫助開發(fā)者打造一個既安全又高效的開發(fā)環(huán)境。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/72788.html

相關(guān)文章

  • 前端進階之路

    摘要:事件模型事件捕獲階段。事件到達目標元素觸發(fā)目標元素的監(jiān)聽函數(shù)。的狀態(tài)值與狀態(tài)碼的狀態(tài)值未初始化還沒有調(diào)用方法。載入完成已經(jīng)執(zhí)行完成,已經(jīng)接收到全部的響應內(nèi)容。 前言 總括: 包含這三個月來碰到的一些覺得比較好的面試題,三個月沒怎么寫博客著實有些手癢,哈哈哈。7000余字,不成敬意2333 原文地址:我的前端進階之路 知乎專欄&&簡書專題:前端進擊者(知乎)&&前端進擊者(簡書) 博主...

    cloud 評論0 收藏0
  • 前端進階之路

    摘要:事件模型事件捕獲階段。事件到達目標元素觸發(fā)目標元素的監(jiān)聽函數(shù)。的狀態(tài)值與狀態(tài)碼的狀態(tài)值未初始化還沒有調(diào)用方法。載入完成已經(jīng)執(zhí)行完成,已經(jīng)接收到全部的響應內(nèi)容。 前言 總括: 包含這三個月來碰到的一些覺得比較好的面試題,三個月沒怎么寫博客著實有些手癢,哈哈哈。7000余字,不成敬意2333 原文地址:我的前端進階之路 知乎專欄&&簡書專題:前端進擊者(知乎)&&前端進擊者(簡書) 博主...

    zorpan 評論0 收藏0
  • C語言進階:程序處理

    摘要:程序預處理本章節(jié)研究的是,源代碼文件是如何一步步得到一個可執(zhí)行程序的。如的語句被稱為預處理指令,還有注釋文本的刪除,都在此階段完成替換。目的是能夠?qū)⑺形募械拇a組合到一起成一個完整的程序。終止程序可以正常也可以意外終止程序。 ...

    gxyz 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<