Python apk重命名工具

117 阅读1分钟

在工作过程中,对提测的apk一般会有所要求,所以我用 Python 写了个 apk重命名工具,人生苦短,我用Python,以下是实现的脚本

from datetime import datetime
import os
import re

def get_file_size(file_path):
    try:
        # 获取文件大小
        size = os.path.getsize(file_path)
        byte_count = size
        k_byte_count = 0
        mb_count = 0
        if byte_count > 1024:
            k_byte_count = byte_count / 1024
            byte_count = byte_count % 1024

        if k_byte_count > 1024:
            mb_count = k_byte_count / 1024
            k_byte_count = k_byte_count % 1024

        result = ""
        if mb_count > 0:
            result = f"{mb_count:.2f} MB"
        elif k_byte_count > 0:
            result = f"{k_byte_count:.2f} KB"
        else:
            result = f"{byte_count} B"

        print(f"File size:{result}")

    except OSError as e:
        print(f"Error: {e}")
        return None

def list_apk_file_in_directory(directory):
    try:
        # 列出指定目录中的所有文件
        apk_files = [f for f in os.listdir(directory) if f.endswith('.apk')]
        return apk_files[0]
    except Exception as e:
        print(f"Error: {e}")
        return ""

class RenameApk:

    def __init__(self, apkDir:str):
        self.originalName = f"{apkDir}/{list_apk_file_in_directory(apkDir)}"
    def renameApk(self):
        version = ""
        with open("app/build.gradle.kts", "r", encoding='utf8') as file:
            for line in file:                
                if "versionName" in line:
                    startidx = line.index("versionName") + len("versionName")
                    version = line[startidx:].replace(""","").replace("=","").strip()
                    print(f"versionName {version}")
                    break

        if version == "":
            print("versionName not found app\build.gradle")
            return
        
        # 使用正则表达式匹配版本号
        match = re.match(r'(\d+.\d+.\d+)', version)
        if match:
            version = match.group(1)  # 获取匹配到的版本号            


        # 获取当前日期
        now = datetime.now()

        # 格式化日期为 'yyyy-MM-dd'
        formatted_date = now.strftime('%Y-%m-%d_%H%M')

        dir = self.originalName[0:self.originalName.rfind("/")]
        
        type = ""
        if "factory1" in self.originalName.lower():
            type = "factory1"
        elif "factory2" in self.originalName.lower():
            type = "factory2"        

        self.newName = f"{dir}/ProjectName_{type}_{version}_{formatted_date}.apk"
        
        print(f"Renaming {self.originalName} to {self.newName}")
        os.rename(self.originalName, self.newName)
        print("Rename successful")


        get_file_size(self.newName)

    def __str__(self):
        return f"Original Name: {self.originalName}, New Name: {self.newName}"

    def __repr__(self):
        return f"RenameApk(originalName={self.originalName}, newName={self.newName})"


RenameApk(apkDir="app/build/outputs/apk/factory1/release").renameApk()

只要在工作根目录下运行以下命令即可输出这种格式的文件,携带项目名称、版本号、打包日期时间ProjectName_factory1_v1.0.1_2024-11-15_0944.apk

python tools/rename.py