发明内容
本发明的目的在于提供一种核对APK内多国语言的方法及其系统,能够实现不同Values文件中string.xml文件之间的对比,并且能够与字典文件进行对比,指出字典文件的缺陷,测试效率高,准确率高。
为了达到上述目的,本发明通过以下技术方案实现:一种核对APK内多国语言的方法,其特点是,包含以下步骤:
S1、抓取待测试的APK文件,并对待测试的APK文件进行反编译以获得对比文件及源文件;
S2、解析对比文件,获取对比文件中所有节点的属性名和内容字符串,新建一个MapFile字段构成的List,并将节点的属性名和内容字符串分别存入MapFile字段的label和contrastText;
S3、解析源文件,获取源文件中所有节点的属性名和内容字符串,新建一个MapFile字段构成的List,并将节点的属性名和内容字符串分别存入MapFile字段的label和srcText;
S4.1、获取源文件List中的一个元素,将该元素中的label和srcText字段与对比文件中一个元素的label和contrastText字段进行对比;
S5、判断字段是否相同;
S5.1、若是,则输出字段相符的对比结果,从源文件中选取下一个元素再执行步骤S4.1;
若否,则执行步骤S6;
S6、判断对比文件中是否包含其他元素;
若是,则从对比文件中选取下一个元素再执行步骤S4.1;
若否,则执行步骤S7;
S7、判断源文件中是否包含其他元素;
若是,则从源文件中选取下一个元素再执行步骤S4.1;
S7.1、若否,则输出字段不相符的对比结果。
所述的步骤S1中还包含一步骤S1.1:
S1.1、判断源文件是否为xml格式;
若是,则执行步骤S2;
S1.1.1、若否,则输出源文件为无效文件的结果。
所述的步骤S1还包含与一步骤S1.2:
S1.2、判断对比文件是否为xml格式;
若是,则执行步骤S2;
S1.2.1、若否,则输出对比文件为无效文件的结果。
核对APK内多国语言的方法进一步包含一与所述步骤S4.1并列的步骤S4.2:
S4.2.1、解析字典文件,获取字典内容,新建一个ExlContent字符串构成的List,并将字典内容的第一列及第二列分别存入ExlContent字符串中的Row1和Row2;
S4.2.2、获取源文件中的一个元素对应的srcText字段;
S4.2.3、获对比文件中的一个节点对应的contrastText字段;
S4.2.4、将srcText字段与contrastText字段分别与Row1、Row2对比;
S4.2.5、判断是否有相符的字符串;
若否,则输出字典对比结果;
若是,则返回步骤S4.2.4。
所述的S4.2.1之前还包含步骤S4.2.0:
S4.2.0、判断字典文件是否为xls格式;
若是,则执行步骤S4.2.1;
若否,则输出字典文件为无效文件的结果。
核对APK内多国语言的方法进一步包含一与所述步骤S5.1并列的步骤S5.2:
S5.2.1、将源文件List中该元素的label和srcText字段分别与字典文件中的Row1、Row2对比;
S5.2.2、判断字段是否相符;
若否,则输出字段不相符的结果,再从源文件中获取下一个元素后执行步骤S5.2.1;
若是,则执行步骤S5.2.3;
S5.2.3、判断源文件中是否包含其他元素;
若是,则从源文件中选取下一个元素再执行步骤S5.2.1;
若否,则输出字段相符的结果。
所述的步骤S7.2之后还包含步骤S8.1:
S8.1.1、将源文件List中该元素的label字段与对比文件中元素的label字段进行对比;
S8.1.2、判断字段是否相同;
若是,则执行步骤S8.1.1;
若否,则输出对比结果后上报至BUG库。
所述的步骤S7.2之后还包含步骤S8.2:
S8.2.1、将对比文件List中该元素的label字段与源文件中元素的label字段进行对比;
S8.2.2、判断字段是否相同;
若是,则执行步骤S8.1.1;
若否,则输出对比结果后上报至BUG库。
一种核对APK内多国语言的系统,其特点是,包含:
抓取模块,用于抓取待测试的APK文件;
反编译模块,与所述抓取模块连接,用于反编译待测试的APK文件,以获取对比文件及源文件;
格式校验模块,与所述反编译模块连接,用于校验对比文件及源文件的格式;
字段比对模块,与所述格式校验模块连接,用于对比源文件与对比文件中的字段是否相同;
结果输出模块,与所述字段比对模块连接,用于输出字段比对模块的结果;
存储模块,与所述结果输出模块连接,用于存储对比结果。
核对APK内多国语言的系统进一步包含一显示模块,与所述存储模块连接,用于显示对比结果。
本发明一种核对APK内多国语言的方法及其系统与现有技术相比具有以下优点:实现Values文件中string.xml文件之间的对比,测试效率高,准确性高;通过与字典文件对比,可以找出字典文件的缺失,可以协助完善字典文件。
具体实施方式
以下结合附图,通过详细说明一个较佳的具体实施例,对本发明做进一步阐述。
如图1一种核对APK内多国语言的系统,包含:抓取模块1,用于抓取待测试的APK文件;反编译模块2,与所述抓取模块1连接,用于反编译待测试的APK文件,以获取对比文件及源文件;格式校验模块3,与所述反编译模块2连接,用于校验对比文件及源文件的格式;字段比对模块4,与所述格式校验模块3连接,用于对比源文件与对比文件中的字段是否相同;结果输出模块5,与所述字段比对模块4连接,用于输出字段比对模块4的结果;存储模块6,与所述结果输出模块5连接,用于存储对比结果;显示模块7,与所述存储模块6连接,用于显示对比结果。
如图2所示,一种核对APK内多国语言的方法,包含以下步骤:
S1、抓取待测试的APK文件,并对待测试的APK文件进行反编译以获得对比文件及源文件。
利用adb命令,在CMD命令行中输入adb pull /system/app/<file.apk> <dir>(<file.apk>代表了要反测试的APK文件,最好写绝对路径,比如C:\MusicPlayer.apk<dir>代表了复制后文件的存储位置,比如C:\MusicPlayer)命令,将要测试的APK从手机复制到PC端。
利用谷歌官方解包工具 APKTool,在CMD命令行中输入apktool d –f <file.apk> <dir>(<file.apk>代表了要反测试的APK文件,最好写绝对路径,比如C:\MusicPlayer.apk <dir>代表了反编译后的文件的存储位置,比如C:\MusicPlayer)得到反编译后的APK文件文件内容。
S1.1、判断源文件是否为xml格式;
若是,则执行步骤S2;
S1.1.1、若否,则输出源文件为无效文件的结果。
S1.2、判断对比文件是否为xml格式;
若是,则执行步骤S2;
S1.2.1、若否,则输出对比文件为无效文件的结果。
这里步骤S1.1与步骤S1.2没有先后顺序。
S2、解析对比文件,获取对比文件中所有节点的属性名和内容字符串,新建一个MapFile字段构成的List,并将节点的属性名和内容字符串分别存入MapFile字段的label和contrastText。
选择上步解包后的文件夹中res文件夹,选择里面Values文件夹,选择里面string.xml文件,成功后程序界面会显示选择的对比文件地址 (对比文件一般选择Values或是Values-GB,应为android默认语言为英文。选择Values可以得到对比默认状态中没有翻译的节点,选择Values-GB则是为了和英文对比)。xml内容解析,取得节点的属性名和内容字符串,新建立个MapFile字段构成的List,将属性名和内容字符串依次放入MapFile字段的 lebel 和 contrastText。
S3、解析源文件,获取源文件中所有节点的属性名和内容字符串,新建一个MapFile字段构成的List,并将节点的属性名和内容字符串分别存入MapFile字段的label和srcText。
选择上步解包后的文件夹中res文件夹,选择里面要测试国家语言的Values文件夹(如法语为Values-fr。德语为Values-de,具体见工具中的语言对应表.xls),选择里面string.xml文件,成功后程序界面会显示选择的源文件地址。工具新建立个MapFile字段构成的List,将属性名和内容字符串依次放入MapFile字段的 lebel 和 srcText。
S4.1、获取源文件List中的一个元素,将该元素中的label和srcText字段与对比文件中一个元素的label和contrastText字段进行对比;
如图3所示,步骤S4.2与步骤S4.1并列包含:
S4.2.0、判断字典文件是否为xls格式;
若是,则执行步骤S4.2.1;
若否,则输出字典文件为无效文件的结果;
S4.2.1、解析字典文件,获取字典内容,新建一个ExlContent字符串构成的List,并将字典内容的第一列及第二列分别存入ExlContent字符串中的Row1和Row2;
S4.2.2、获取源文件中的一个元素对应的srcText字段;
S4.2.3、获对比文件中的一个节点对应的contrastText字段;
S4.2.4、将srcText字段与contrastText字段分别与Row1、Row2对比;
S4.2.5、判断是否有相符的字符串;
若否,则输出字典对比结果;
若是,则返回步骤S4.2.4。
步骤S4.2是在包含字典文件的情况下才会执行的,用于找出字典文件的缺失,可以协助完善字典文件。
有字典文件,会自动删除和字典文件中相同的节点(相同意味着不需要翻译)。将源文件List和对比文件List里面内容进行循环对比,若源文件List中label字段,srcText字段在对比文件List的label字段,contrastText字段上找到一致字符串,那么将字典List的Row1和Row2字符串和源文件List中label字段,srcText字段进行循环对比,如没有一致的则输出到结果文件中,成为结果文件中文件相符部分。
S5、判断字段是否相同;
S5.1、若是,则输出字段相符的对比结果,从源文件中选取下一个元素再执行步骤S4.1;
若否,则执行步骤S6;
如图4所示,步骤S5.2与步骤S5.1并列,包含:
S5.2.1、将源文件List中该元素的label和srcText字段分别与字典文件中的Row1、Row2对比;
S5.2.2、判断字段是否相符;
若否,则输出字段不相符的结果,再从源文件中获取下一个元素后执行步骤S5.2.1;
若是,则执行步骤S5.2.3;
S5.2.3、判断源文件中是否包含其他元素;
若否,则从源文件中选取下一个元素再执行步骤S5.2.1;
若是,则输出字段相符的结果。
S6、判断对比文件中是否包含其他元素;
S6.1、若是,则从对比文件中选取下一个元素再执行步骤S4.1;
若否,则执行步骤S7;
S7、判断源文件中是否包含其他元素;
S7.1、若是,则从源文件中选取下一个元素再执行步骤S4.1;
S7.2、若否,则输出字段不相符的对比结果。
其中步骤S7.2之后包含两个并列步骤S8.1与S8.2,其中
步骤S8.1包含:
S8.1.1、将源文件List中该元素的label字段与对比文件中元素的label字段进行对比;
S8.1.2、判断字段是否相同;
若是,则执行步骤S8.1.1;
若否,则输出对比结果后上报至BUG库。
步骤S8.2包含:
S8.2.1、将对比文件List中该元素的label字段与源文件中元素的label字段进行对比;
S8.2.2、判断字段是否相同;
若是,则执行步骤S8.1.1;
若否,则输出对比结果后上报至BUG库。
步骤S8.1与步骤S8.2主要进行以下步骤。
将源文件List和对比文件List里面内容进行循环对比,若源文件List中label字段在对比文件List的label字段上没有找到一致的,那么输出到结果文件中,成为结果文件中监测到源文件比对比文件多部分。
将源文件List和对比文件List里面内容进行循环对比,若对比文件List中label字段在源文件List的label字段上没有找到一致的,那么输出到结果文件中,成为结果文件中监测到对比文件比源文件多部分。
在对比结果文件中列举了三种可能的对比结果:
文件相符部分(相同可能异常),这部分是指对比文件和源文件属性名,内容都和源文件的属性名,内容相同。这里输出的条目除纯数字,有$#%这种特殊字符外的内容都是测试后要上报的BUG。
监测到源文件比对比文件多部分(多出部分可能异常)这部分是指源文件节点属性名在对比文件上找不到相同的。 这里输出的内容绝大部分都是正常字符,不需要上报BUG。
监测到对比文件比源文件多部分(多出部分可能异常)这部分是指对比文件节点属性名在源文件上找不到相同的。这里输出的条目除纯数字,有$#%这种特殊字符外的内容基本都是测试后要上报的BUG。
尽管本发明的内容已经通过上述优选实施例作了详细介绍,但应当认识到上述的描述不应被认为是对本发明的限制。在本领域技术人员阅读了上述内容后,对于本发明的多种修改和替代都将是显而易见的。因此,本发明的保护范围应由所附的权利要求来限定。