JAVA语言之开发者的进阶之路:用语法树来实现预编译
小标 2019-03-04 来源 : 阅读 754 评论 0

摘要:本文主要向大家介绍了JAVA语言之开发者的进阶之路:用语法树来实现预编译,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。

本文主要向大家介绍了JAVA语言之开发者的进阶之路:用语法树来实现预编译,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。

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

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


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


什么是语法树


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


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


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


语法树的应用


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


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


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


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


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


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


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


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


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


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


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


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

   

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注编程语言JAVA频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程