前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android安装包不同版本文件大小对比实现

Android安装包不同版本文件大小对比实现

作者头像
沈宥
发布2022-05-09 21:41:27
5250
发布2022-05-09 21:41:27
举报

背景

每一次发版不仅意味着新功能的上线,也同样会导致安装包大小的改变。

为了解决每次安装包大小的改变测试能完全掌握具体情况,所以需要有这样一个平台实现.apk包所有文件遍历并获取大小。

功能

同一个应用包的两个不同版本文件大小对比

1、获取apk大小等基本信息

2、遍历文件夹,分别展示新增文件、体积增加文件、删除文件、体积减小文件列表木块

3、支持.jar包文件比对

4、前端页面包含:上传文件页面、任务列表页、结果详情页

实现步骤

1、前端页面上传需要对比的两个apk文件,保存到服务器

前端上传文件控件:

<input class="btn btn-default btn-lg" type="file" name='file[]'/>

后端获取文件:

代码语言:javascript
复制
# 需要同时获取多个文件
fuploaded_files = request.files.getlist("file[]")
# 保存到同一个文件夹下
for file in fuploaded_files:
    file.save(os.path.join(dirname, file.filename))

2、解压缩文件,判断文件类型,获取基本知识,遍历文件夹

解压缩

代码语言:javascript
复制
def unzip(sourceFile, targetPath):
    '''
    :param sourceFile: 待解压zip路径
    :param targetFile: 目标文件目录
    :return:
    '''
    file = zipfile.ZipFile(sourceFile, 'r')
    file.extractall(targetPath)
    return file, targetPath
判断文件类型
代码语言:javascript
复制
def postfixReplace(file_name):
    if '.jar' in file_name:
        return 0
    if '.apk' in file_name:
        return 1
获取基本知识
代码语言:javascript
复制
from androguard.core.bytecodes.apk import APK
def get_apk_info(apk_path):
    """
    获取apk信息
    :param root:
    :param f:
    :return:
    """
    apk_info = []
    try:
        androguard = APK(apk_path)
        if androguard.is_valid_APK():
            apk_info.append(get_file_md5(apk_path))
            apk_info.append(get_cert_md5(androguard))
            apk_info.append(androguard.get_app_name())
            apk_info.append(androguard.get_package())
            apk_info.append(androguard.get_androidversion_code())
            apk_info.append(androguard.get_androidversion_name())
            apk_info.append(androguard.get_main_activity())

    except Exception as e:
        print(apk_path + ' ->>', e)

    return apk_info
遍历获取所有文件名和大小
代码语言:javascript
复制
def apk2file(filepath, resultName, taskname):
    '''
        将apk中的dex文件提取出来
        :param filepath: apk文件路径
    '''
    # 直接用zipfule.ZipFile处理.apk文件
    apkfile, targetFile = unzip(filepath, resultName, taskname)

    # 存入数组中
    file_info_data = {}

    # 获取所有文件
    for filename in apkfile.namelist():
        # print(apkfile.namelist())
        # 如果是文件夹,继续遍历

        # 如果是文件,获取到文件大小

        resultFilePath = os.path.join(targetFile, filename)

        file_info_data[filename] = getFileSizeKB(resultFilePath)

        # writeFileInfo(filename, getFileSize(resultFilePath), resultName)

    return file_info_data

3、分列同一个文件增加、减少大小信息,新增、删除文件信息

前端

代码语言:javascript
复制
<div class="row">
    <div class="col-xs-1 col-xs-offset-1" id="myScrollspy">
        <ul class="nav nav-tabs nav-stacked" data-spy="affix" data-offset-top="100" data-offset-bottom="200">
            <li class="active"><a href="#section-1">任务信息</a></li>
            <li><a href="#section-2">新包中新增文件列表</a></li>
            <li><a href="#section-3">新包中体积增大文件列表</a></li>
            <li><a href="#section-4">新包中体积减少文件列表</a></li>
            <li><a href="#section-5">新包中删除文件列表</a></li>
        </ul>
    </div>
</div>
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-04-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 从头开始学习测试开发 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 判断文件类型
  • 获取基本知识
  • 遍历获取所有文件名和大小
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档