Android渠道版本自动化校验

国内市场上有许许多多的应用市场,常见的有:百度、360、腾讯应用宝、豌豆荚等。其他手机厂家如小米、华为、魅族、三星等都有自己的应用市场,总共有上百家!

1. 问题


发版前,Android工程师打包了上百个渠道版本,如何检验渠道号与apk名称是否一致?版本、友盟、环信、极光推送、高德地图等key是否准确?

2. 怎么做


Android Apk的渠道号、key等一般存放在AndroidManifest.xml文件中。

  1. 批量反编译Android Apk
  2. 遍历反编译后的apk文件夹,从AndroidManifest.xml取出渠道号
  3. 比较渠道号与apk名称、比较各种key
  4. 将测试结果写入csv文件

3. 过程


3.1 安装环境

windows/Linux/Mac都可,你需要做的就是安装好Java,或Python。由于android为java所编写,所以需要下载apktool.jar反编译工具反编译class文件和xml文件。

3.2 反编译Android Apk

apktool.jar -f 会对apk的资源文件、源码等所有的文件进行反编译,耗时较长。
使用 -s 选项可跳过源码编译,节省时间。

反编译工具apktool.jar: https://bitbucket.org/iBotPeaches/apktool/downloads

    java -jar apktool.jar d -f package.apk  

输出结果如下:

    I: Using Apktool 2.1.0 on test.apk
    I: Loading resource table...
    I: Decoding AndroidManifest.xml with resources...
    I: Loading resource table from file: C:\Users\Administrator\apktool\framework\1.apk
    I: Regular manifest package...
    I: Decoding file-resources...
    I: Decoding values */* XMLs...
    I: Baksmaling classes.dex...
    I: Copying assets and libs...
    I: Copying unknown files...
    I: Copying original files...

打开AndroidManifest.xml文件,即可看到渠道号

<meta-data android:name="UMENG_CHANNEL" android:value="meizu"/>

3.3 获取渠道号

几十个渠道怎么办?这时就用到python了。

输入目录,遍历目录下的apk.

def decompiler(vdir):
    vapk = [ cv for cv in os.listdir(vdir) if os.path.splitext(cv)[1] == '.apk' ]
    print(" -> The Path has found {0} channel version,is in decomopiling,Please wait.....\n".format(len(vapk))) 
    for idx,apk in enumerate(vapk):
        channeldir,extension = os.path.splitext(apk)
        if os.path.isdir(channeldir):
            pass
        else:
            print(" -> The \033[1;37;44m {0} \33[0m Apk is processing : {1}".format(idx,apk))
            #反编译apk文件
            os.popen('java -jar apktool.jar d -s {0}'.format(apk))
    reverse_apk_folder = [ opf for opf in os.listdir(vdir) if os.path.isdir(opf) ]
    print("-------------------------------------------------------------------")
    print(" -> {0} Finish Apk decompiling.".format(now))
    print(" -> Total: \033[1;32;44m {0} \33[0m Apk Floder. ".format(len(reverse_apk_folder)))
    return vapk,reverse_apk_folder

或者直接输入编译后的apk文件夹,具体如下:

  def get_apk_umeng_value(reverse_folder):
      umeng_channel = []  
      for rfn in reverse_folder:
          manifest = os.path.join(version_catalogue,rfn,'AndroidManifest.xml')
          with open(manifest,'r+') as m:
              umeng_line = [ line.strip() for line in m.readlines() if 'UMENG_CHANNEL' in line ]
                  for ul in umeng_line:
                      ucv = ul.split('=')[2]
                      #使用strip过滤"/>//--等特殊字符
                      umeng_channel.append(ucv.strip('"/>// --'))
      return umeng_channel

处理AndroidManifest.xml文件

def handling(filename,text):
    textual_value = ""
    with open(filename,'r+') as m:
        line = [ line.strip() for line in m.readlines() if text in line ]
        for n in line:
            value = n.split('=')[2]
            #使用strip过滤"/>//--等特殊字符
            textual_value = value.strip('"/>// --')
    return textual_value

3.4 结果输出

使用python pandas优雅输出测试结果,并写入到csv文件。

Paste_Image.png

完整代码地址:

https://github.com/yi-heng/Android-Test/blob/master/Android_Channel_Test/channelverify.py
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,185评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,652评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,524评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,339评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,387评论 6 391
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,287评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,130评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,985评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,420评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,617评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,779评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,477评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,088评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,716评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,857评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,876评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,700评论 2 354

推荐阅读更多精彩内容