专栏首页原创开发者的进阶之路:用语法树来实现预编译

开发者的进阶之路:用语法树来实现预编译

如何在保证安全性的前提下,提升开发过程的效率,是每个开发者都在不断探索的问题。借助语法树,开发者能够更好地展现和修改源程序代码,优化开发环节,提高安全系数,还能进一步实现安卓预编译。

本文基于个推高级研发工程师李健民在该领域的实践经验,与广大开发者们一同交流语法树在开发过程中的相关应用和具体使用场景。

什么是语法树

语法树是一种树状结构的源程序代码呈现方式,它可以很好地展示源程序代码的信息,这其中就包含了:保存源程序的代码信息和对应运行时的结构。

如何生成一棵语法树?在回答这个问题前,我们需要先了解编译器的工作流程,它主要分为词法分析、语法分析、中间代码和目标代码这四个过程,语法树则是由语法分析一过程生成。

在词法分析过程中,会产生一系列的token流,token是一个保存着type和value的数据结构。词法分析将源代码的每一个关键词都分割出来,之后通过语法分析器进行语法模板匹配,最后生成语法树。

语法树的应用

这一阶段,开发者可以对语法树进行修改,达到修改源代码的效果,从而实现不同的应用目的。

开发者可以对语法树的一些节点进行修改或增加,来达到代码自动生成的目的。同理,开发者也可以通过遍历代码块插入部分埋点代码,或者找到没有用到的代码进行代码缩减。

线上发版后,开发者会遇到各式各样的问题,需要通过日志定义这些问题。明文输出的日志存在安全隐患,日志混淆插件可以对日志的输出内容进行混淆,大大提高了这一过程中的安全系数。基于语法树实现的个推日志混淆插件,通过遍历指定签名的方法调用,修改它参数的值进行混淆。

用语法树来实现预编译指令

开发者还能用语法树来实现预编译指令,常见的预编译指令主要分为条件编译、宏定义、文件包含三大类。过去,开发者一般使用Antenna来实现预编译指令,它是一个基于ant的工具,随着ide的更新换代,开发者会发现ant中的一些缺陷。Antenna需要配置环境变量,配置文件比较繁琐,且不支持gradle集成。

个推预编译插件是一个基于语法树的流程,它经过词法分析产生token流,再通过语法分析进行模板匹配执行相应的预编译指令。

基于Antenna进行了改进的个推预编译插件,不仅支持集成到gradle,还简化了配置文件的流程。插件支持常见的预编译指令,如条件编译、宏定义、debug、mdebug等。

插件在Antenna上进行了类型扩展,支持float、double类型扩展;在表达式操作进行了扩展,提供了字符串的startwith、endwith等操作。

预编译指令在安卓中的使用场景

开发者经常需要输出一些调试信息,这些调试信息无法带到线上,开发者需要在发包时手动删除,并在再次调试时进行添加,这个过程不仅效率低,而且容易出现漏删的情况。

通过预编译指令,开发者可以在调试时加上预编译指令debug,在发线上包时,执行预编译指令,注释掉不必要的信息。提高开发效率的同时,大大减少了因遗漏导致的安全隐患。

个推日志混淆插件个推预编译插件目前正处于代码整理阶段,未来这两个项目都会提供开源,帮助开发者打造一个既安全又高效的开发环境。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • DT时代下[个推3.0]遵循的四个法则

    DT(Data Technology),是以服务大众、激发生产力为主的技术。从IT时代走向DT时代,我们要思考如何用互联网技术、理念、思想去与传统行业进行交融和...

    个推君
  • 移动端数据统计,精细化运营的永动机

    随着移动互联网市场快速发展,以往“跑马圈地”式的粗犷运营时代已成为过去时。大环境的改变,也导致移动端的数据统计分析在产品的研发、决策、运营等方面起着越来越重要的...

    个推君
  • 个推技术实现原理介绍

    概述 PUSH是互联网上内容提供者和内容定制方之间的一种通信机制,利用在服务器端的程序把数据源源不断地推向客户端,大大提高客户机和服务器之间的交互性能。 传统互...

    个推君
  • LightSwitch Sliverlight应用系统开发入门

    LightSwitch 开发入门 什么是LightSwitch 简单的说LightSwitch就是一个基于模板的自动化开发Silverlight应用程序的工...

    阿新
  • 自定义Cordova插件详解

    在混合式应用中,我们通过现有的Cordova插件,可以轻松的在 H5 上调用手机native的功能。现有的Cordova插件能满足平时大部分的开发需求,然而,有...

    IT晴天
  • scrapy shell

    执行scrapy shell http://www.521609.com,查看response

    小麦苗DBA宝典
  • 在linux下安装w3af和使用

    技术交流,请勿用于违法途径,后果自负 一、环境: sudoapt-get install git Python 2.7,大部分的linux都默认安装 sudoa...

    企鹅号小编
  • 通俗易懂的Gradle插件讲解

    在本系列的前作中,我们学习了为什么要用Gradle、Gradle的入门基础和Groovy的基础,这些文章为Gradle的入门打下了基础,这一篇我们要来学习Gra...

    用户1269200
  • VS Code进阶

    Visual Studio Code (简称VS Code/VSC)是微软在Build 2015大会(本次大会同时还发布了Windows10、Edge等重量级产...

    IMWeb前端团队
  • 20 个强大的 Sublime Text 插件

    作 为一个开发者你不可能没听说过SublimeText。不过你没听说过也没关系,下面让你明白。 SublimeText是一款非常精巧的文本编辑器,适合编写代码、...

    小小科

扫码关注云+社区

领取腾讯云代金券