在工作过程中,对提测的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