Android创建demo脚本

发布于:2025-09-04 ⋅ 阅读:(21) ⋅ 点赞:(0)

需要

有时候在使用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_EXTENSIONS

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


网站公告

今日签到

点亮在社区的每一天
去签到