Android创建demo脚本
需要
有时候在使用Android Studio创建demo进行开发验证过程中。创建的demo不能直接运行比较浪费时间。所以我写了一个脚本,可以把能运行的demo作为模版。
import os
import shutil# 定义需要处理的文本文件扩展名
TEXT_FILE_EXTENSIONS = {'.kt', '.java', '.xml', '.gradle', '.pro', '.properties', '.txt', '.html', '.css', '.js', '.json', '.yml', '.yaml','.kts'}def is_text_file(filename):"""判断文件是否为文本文件(根据扩展名)"""ext = os.path.splitext(filename)[1].lower()return ext in TEXT_FILE_EXTENSIONSdef make_demo(project_name, package_name):# 源 demo 目录路径source_dir = r'D:\Users\Desktop\AppDemo\AppDemo\KTLearn'# 新项目目录路径target_dir = os.path.join(os.getcwd(), project_name)# 复制源目录到目标目录if os.path.exists(target_dir):shutil.rmtree(target_dir) # 避免目标已存在shutil.copytree(source_dir, target_dir)# 创建包名对应的目录结构java_dir = os.path.join(target_dir, 'app', 'src', 'main', 'java')package_dirs = package_name.replace('.', os.sep)package_path = os.path.join(java_dir, package_dirs)os.makedirs(package_path, exist_ok=True)# 移动 MainActivity.kt 到新创建的包目录下original_main_activity_path = os.path.join(target_dir, 'app', 'src', 'main', 'java', 'com', 'example', 'ktlearn', 'MainActivity.kt')new_main_activity_path = os.path.join(package_path, 'MainActivity.kt')if os.path.exists(original_main_activity_path):shutil.move(original_main_activity_path, new_main_activity_path)else:print(f"警告: 找不到文件 {original_main_activity_path}")# ✅ 新增:删除旧的 com.example 目录(包括 ktlearn 子目录)old_com_example_path = os.path.join(target_dir, 'app', 'src', 'main', 'java', 'com', 'example')if os.path.exists(old_com_example_path):shutil.rmtree(old_com_example_path)print(f"已删除多余目录: {old_com_example_path}") # 遍历目标目录中的所有文件并替换占位符(仅限文本文件)for root, dirs, files in os.walk(target_dir):for file in files:file_path = os.path.join(root, file)# 只处理文本文件if not is_text_file(file):continue # 跳过非文本文件try:with open(file_path, 'r', encoding='utf-8') as f:content = f.read()# 替换占位符new_content = content.replace('$PACKAGE_NAME', package_name)new_content = new_content.replace('$PROJECT_NAME', project_name)with open(file_path, 'w', encoding='utf-8') as f:f.write(new_content)except UnicodeDecodeError:print(f"跳过文件(非UTF-8编码): {file_path}")except Exception as e:print(f"处理文件失败: {file_path} - {e}")if __name__ == "__main__":project_name = input("请输入项目名称: ")package_name = input("请输入包名: ")make_demo(project_name, package_name)print(f"项目 {project_name} 创建成功!")
使用
把上面的脚本中的source_dir 替换为模版所在的路径。同时把包名用这个作为占位符。$PACKAGE_NAME
项目名用 $PROJECT_NAME 做占位符,会扫描所有文本文件并替换。
在控制台使用 python makeDemo.py来执行,依次输入项目名和包名就行了