admin 管理员组

文章数量: 887031


2023年12月25日发(作者:hellmy)

Beyond Compare使用技巧

在移植Baidu ROM过程中,我们经常需要对比分析源包代码和工程代码两套smali代码,并把源包代码中的feature代码或bug fix代码合并到工程代码中,使用一个专业、高效的文件对比工具将会让我们patch事半功倍,这里推荐Beyond Compare这款优秀的文件对比软件。Beyond Compare同时有Windows和Linux版本可使用,这里就不多介绍,具体可自行上网搜索,这里介绍利用这款软件在合并代码过程的一些使用技巧。

1、 忽略行号差异

在对比smali代码过程,会发现很多文件的差异缩略图(下图左侧)几乎全部标红,文件差异似乎很大。其实很多只是行号的差异,我们并不关心,但这些差异会让所关心的差异难以定位,因此可以设置一个对比规则忽略掉行号的差异,设置方法如下:

a. 点击“规则”选项按钮,弹出对话“重要”选项对话框,点击编辑语法,新建一个语法,按照下图所示配置语法项目。

b. 确定后便在“重要”选项卡中生成一个“行号”勾选项,取消该选项的勾选,确定后返回。

c. 按下“忽略不重要差异项”选项按钮示出实重要代码差异的位置。

,就能忽略行号的差异,左侧缩略图便能显

2、 smali语法高亮

smali代码虽然不是一种官方标准语言,但也遵循一定的语法规范,如有语法高亮辅助功能将能大大增强smali代码的可读性。Beyond Compare允许自定义文件格式,对自定义的语法高亮显示,下面介绍针对smali代码进行语法高亮设置的方法:

a. 在选项菜单“工具”中打开“文件格式”对话框,新建一个文本格式类型的选项并命名为”smali”,文件过滤条件为”*.smali”,完成后先点击保存。如下图所示:

b. 点击“语法”选项卡,这里会创建“关键字”、“字符串”和“注释”三种语法,点击“新建”弹出语法项目对话,按照下图配置:

关键字列表添加了部分匹配字段,可根据需要自行删减。

关键字列表使用了:

.class

.super

.source

.field

.end field

.implements

.annotation

.end annotation

.method

.end method

.locals

.parameter

.prologue

public

private

protected

constructor

static

final

字符串语法匹配规则:

注释语法匹配使用正则表达式匹配了”#”和”.line”两个字段:

c. 创建完成后便把“关键字”、“字符串”和“注释”三种语法添加进匹配规则列表中,保存后关闭文件格式对话框。

d. 选中选项菜单“查看”中的“语法高亮”选项,Beyond Compare即可对所有smali文件进行smali语法高亮显示。

3、 全工程文件夹比较

机型工程下smali代码目录结构繁杂、文件数量庞大,我们又经常需要同时对比分析源包代码和工程代码多个文件,如何方便快捷地定位到需要对比的文件,这里介绍使用Beyond

Compare全工程文件比较的方法。

a. 新建“文件夹比较”会话,分别添加源包代码文件夹和工程代码文件夹。

b. 在上方过滤器中输入需要查找的文件名关键词。

c. 所有文件名不包含输入关键字的文件会过滤掉而不显示,包含差异文件父目录颜色会标红,可以快速定位到查找的文件。

4、 把Beyond Compare做为git的可视化比较工具

准确说这应该是git的使用技巧,但涉及Beyond Compare这个工具,这里一并做下介绍。

a. 在Linux下,执行以下命令配置git的默认可视化比较工具。

git config --global bc3

git config --global false

b. 使用Beyond Compare比较两个commit的差异,git difftool命令其他使用与git diff一致。

git difftool commit_old [commit_new] [file] &


本文标签: 代码 语法 文件 选项 差异