简介:

   Python一键查询key或模糊匹配GUI工具是一款支持apk反编译资源目录后快速验证多个国家string.xml的语言配置工具,国家顺序和国家配置可灵活配置,同时查询支持两种方式查询。

    开发工具的初衷为的解决日常重复而繁琐的多语言验证字符串准确性验证,普遍操作是一次操作看5、6部手机每部手机切换不同语言对比验证,多语言不认识的情况人工仅核对头尾符合然后再逐一标记其正确性,再检查UI超边界显示齐全的问题这算比较常规的操作。若中途开发有修改或新增某几处多语言时又要重新操作,耗时耗力。

 

   此工具解决问题:

           1、单独多语言抽查,查看字符串长短

           2、一次同时验证多个不同国家多语言配置

           3、模糊匹配,查看多语言是否重复或调用相同key

           4、提高多语言验证效率

 

一、单key查询截图,精装匹配string.xml中指定key的值

java字段左模糊匹配_自然语言处理

 

二、模糊匹配多结果查询截图,逐个遍历搜索string.xml中的包含和全匹配文字得出搜索key列表,再逐一搜索显示出来。

java字段左模糊匹配_java字段左模糊匹配_02

ps:Windows控制台显示多语言可能会乱码,写了一个查询结果补充结果,支持复制粘贴,控制不能正常显示的乱码文字支持正常的复制粘贴不乱码。

 

 

开发需求分析过程:

 

jadx是一款非常好用的Android反编译工具,查询代码和其他的都非常方便。但是多语言验证不方便,需要打开10+个string.xml搜索验证,大量数据查询就是一个繁琐操作。

 

jadx查询展示截图

繁体中文

java字段左模糊匹配_python_03

阿拉伯语

java字段左模糊匹配_反编译_04

 

 

    编写配置文件,已支持多语言的查询国家顺序,每个国家对于的配置目录:

CountryList = ["zh",	"en",	"ar",	"hi",	"ru",	"vi",	"pt",	"th",	"in",	"zhTW", "zhTW",	"fr",	"es"]
    CountryConfig = {
            "zh": "values-zh",
            "zhHk": "values-zh-rHK",
            "zhTW": "values-zh-rTW",
            "en": "values",
            "vi": "values-vi",
            "ru": "values-ru",
            "pt": "values-pt",
            "in": "values-in",
            "es": "values-es",
            "fr": "values-fr",
            "hi": "values-hi",
            "th": "values-th",
            "it": "values-it",
            "tr": "values-tr",
            "fi": "values-fi",
            "ar": "values-ar",
            "ja":"values-ja",
            "ko":"values-ko",
            "de":"values-de"
        }


    def getXML(self,Country):
        # 使用minidom解析器打开 XML 文档
        file = self.path + "/res/%s/strings.xml" % self.CountryConfig.get(Country)
        DOMTree = xml.dom.minidom.parse(file)
        collection = DOMTree.documentElement

        # 在集合中key
        content = collection.getElementsByTagName("string")
        return content

 

    搜索单个key并返回起xml对应的value值

def getXMLName(self,content):
        for item in content:
            if self.keyName == item.getAttribute("name"):
                try:
                    return item.childNodes[0].data
                except Exception as e:
                    return None

 

    按国家依次遍历出每个国家对应的string.xml中的key对应的value值

def getAllXMLValue(self,testPrint=None):
        valueList = []

        if testPrint:
            xmlStr = ""
            xmlStr += "\n" + "key:    " + str(self.keyName)
            print(xmlStr)

        for country in self.CountryList:
            content = self.getXML(country)
            value = self.getXMLName(content)
            if testPrint:
                xmlStr += "\n" + country + ":    " + str(value)
                print(country, ":    ", value)
            valueList.append(value)

        if testPrint:
            return xmlStr

        return valueList

 

 

实际使用截图:

java字段左模糊匹配_反编译_05