当前位置: 首页 > news >正文

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来执行,依次输入项目名和包名就行了

http://www.xdnf.cn/news/1447651.html

相关文章:

  • CSS中使用 HSL(Hue, Saturation, Lightness) 动态生成色值
  • Linux 对目录授予用户读写权限的方法
  • 信创MySQL到达梦数据库的SQL语法转换技术解析
  • AWK命令完全指南:从理论到实战的文本处理利器
  • Spring Boot + Nacos 配置中心示例工程
  • tcpdump用法
  • Best Video网页官网入口 – 免费在线网页视频解析下载器
  • 认识HTML
  • 用资产驱动方法构建汽车网络安全档案
  • VPS云服务器安全加固指南:从入门到精通的全面防护策略
  • TypeScript 内置工具类型大全(ReturnType、Omit、Pick 等)
  • 【Unity项目经验分享】实现左右分屏裸眼3D程序
  • 数据结构之加餐篇 -顺序表和链表加餐
  • 从 0 到 1 实现 PyTorch 食物图像分类:核心知识点与完整实
  • 基础看门狗--idf开发esp32s3
  • PNP具身解读——RSS2025论文加州伯克利RLDG: 通过强化学习实现机器人通才策略提炼。
  • 基于物联网的智慧用电云平台构建与火灾防控应用研究
  • 复杂网络环境不用愁,声网IoT多通道传输实战经验丰富
  • Coze使用教程-插件
  • 袋鼠云产品功能更新报告14期|实时开发,效率再升级!
  • Kafka面试精讲 Day 6:Kafka日志存储结构与索引机制
  • 浏览器插件开发--通过调用本地nmap实现nmap插件扫描
  • python如何解决html格式不规范问题
  • Android使用内存压力测试工具 StressAppTest
  • [嵌入式embed][Qt]Qt5.12+Opencv4.x+Cmake4.x_用Qt编译linux-Opencv库 测试
  • 显存与内存
  • 【甲烷数据】MethaneSAT 卫星遥感数据
  • 使用DCGAN实现动漫图像生成
  • 树莓集团产教融合:数字学院践行职业教育“实体化运营”要求
  • Ubuntu 系统 LVM 逻辑卷扩容教程