APK两个包文件对比

作者: 沈宥 | 来源:发表于2019-07-31 13:30 被阅读1次

功能:同一个应用包的两个不同版本文件大小对比
1、获取apk大小等基本信息
2、遍历文件夹,分别展示新增文件、体积增加文件、删除文件、体积减小文件列表木块
3、支持.jar包文件比对
4、前端页面包含:上传文件页面、任务列表页、结果详情页


结果详情页
一、上传文件,保存到本地
前端
<div class="container">
    <div class="center-block">
        <h4>请选择文件上传</h4>
                <form class="form-horizontal" role="form" action="/tasklist" method="post" enctype="multipart/form-data">
                    <table class="table table-striped table-hover table-condensed table-bordered">
                        <tr>
                            <th>新包</th>
                            <th>老包</th>
                        </tr>
                        <td width="100px">
                            <input class="btn btn-default btn-lg" type="file" name='file[]'/>
                        </td>
                        <td width="100px">
                            <input class="btn btn-default btn-lg" type="file" name='file[]'/>
                        </td>
                    </table>

                     <div class="container">
                        <input class="btn btn-success" type="submit" value="确认提交">
                     </div>
                </form>
    </div>
</div>
后端
# 需要同时获取多个文件
fuploaded_files = request.files.getlist("file[]")

# 保存到同一个文件夹下
for file in fuploaded_files:
    file.save(os.path.join(dirname, file.filename))
二、解压缩文件,判断文件类型,获取基本知识,遍历文件夹
1、解压缩
def unzip(sourceFile, targetPath):
    '''
    :param sourceFile: 待解压zip路径
    :param targetFile: 目标文件目录
    :return:
    '''
    file = zipfile.ZipFile(sourceFile, 'r')
    file.extractall(targetPath)
    return file, targetPath
2、判断文件类型
def postfixReplace(file_name):
    if '.jar' in file_name:
        return 0
    if '.apk' in file_name:
        return 1
3、获取基本知识
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

如何安装androguard

4、遍历获取所有文件名和大小
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
三、展示结果

相关文章

  • APK两个包文件对比

    功能:同一个应用包的两个不同版本文件大小对比1、获取apk大小等基本信息2、遍历文件夹,分别展示新增文件、体积增加...

  • java项目与kotlin项目打包产物对比

    打包两个apk 通过对比打包产物 发现kotlin打包的apk下多出了和kotlin相关的支持库文件 包增大的体积...

  • Android Studio 打包生成apk

    apk文件就是一个包,打包就是要生成apk文件,有了apk别人才能安装使用。打包分debug版和release包,...

  • APK打包流程

    1.APK文件内容 .apk文件是一个Android应用程序压缩包,可以将apk文件转换成.zip文件并解压查看,...

  • APK包 对比工具

    http://code.yy.com/fuzhenhua/apk-compare

  • 说说Android生成APK

    什么是APK?APK是AndroidPackage的缩写,即Android安装包(apk)。APK文件其实是zip...

  • Android 打包apk

    Andriod安装包文件(Android Package),简称APK,后缀名为.apk 在签名文件已经生成的情况...

  • Google play開發者後台新版本测试流程

    上传APK+OBB文件 大于100M的应用需要拆分成两个文件上传,一个是APK,一个是资料包OBB。 核对版本号 ...

  • Android 签名信息

    生成keystore 查看keystore内容 查看APK包的签名信息 解压APK包,解压出METE-INF文件夹...

  • Android程序打包及签名

    一. APK文件APK后缀文件是Android应用程序的标准格式,是zip压缩包,包含文件如下: AndroidM...

网友评论

    本文标题:APK两个包文件对比

    本文链接:https://www.haomeiwen.com/subject/kcezrctx.html