You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何批量删除Android Studio项目assets/images中的未使用图片?

解决方案

首先明确:Android Studio自带的「移除未使用资源」功能无法识别assets目录下的文件,因为这类资源通常通过动态字符串(如AssetManager.open("images/xxx.png"))加载,IDE的静态分析无法追踪到所有引用场景,这就是你之前方法失效的原因。

下面是几个可行的方案:

方案一:编写Python脚本批量清理

通过脚本扫描代码中所有引用的assets图片文件名,对比assets目录下的文件后删除未被引用的,适合批量处理。

步骤示例:

  1. 提取代码中引用的图片名:
    遍历项目的src/main/java、src/main/kotlin目录下所有文件,匹配类似"images/(.+?\\.(png|jpg|jpeg|webp))"或直接引用文件名的字符串,收集所有出现过的图片文件名。
  2. 列出assets/images下的所有文件:
    遍历src/main/assets/images目录,获取所有图片文件的名称(含后缀)。
  3. 对比并删除:
    找出不在引用列表中的文件,执行删除操作。

示例脚本(Python):

import os
import re

# 配置路径
PROJECT_ROOT = "/path/to/your/android/project"
CODE_DIRS = [os.path.join(PROJECT_ROOT, "src/main/java"), os.path.join(PROJECT_ROOT, "src/main/kotlin")]
ASSETS_IMAGES_DIR = os.path.join(PROJECT_ROOT, "src/main/assets/images")
# 支持的图片后缀
IMAGE_EXTENSIONS = (".png", ".jpg", ".jpeg", ".webp")

def get_referenced_images():
    referenced = set()
    # 匹配assets/images下的引用,比如 "images/xxx.png" 或直接 "xxx.png"
    pattern = re.compile(r'"(?:images/)?([^"]+\.(?:png|jpg|jpeg|webp))"')
    for code_dir in CODE_DIRS:
        for root, _, files in os.walk(code_dir):
            for file in files:
                if file.endswith((".java", ".kt")):
                    with open(os.path.join(root, file), "r", encoding="utf-8") as f:
                        content = f.read()
                        matches = pattern.findall(content)
                        referenced.update(matches)
    return referenced

def get_assets_images():
    assets_images = set()
    for root, _, files in os.walk(ASSETS_IMAGES_DIR):
        for file in files:
            if file.endswith(IMAGE_EXTENSIONS):
                assets_images.add(file)
    return assets_images

if __name__ == "__main__":
    referenced = get_referenced_images()
    assets_images = get_assets_images()
    unused = assets_images - referenced

    print(f"发现未使用图片 {len(unused)} 张:")
    for img in unused:
        print(img)
    
    # 确认后执行删除
    confirm = input("是否删除这些文件?(y/n): ")
    if confirm.lower() == "y":
        for img in unused:
            os.remove(os.path.join(ASSETS_IMAGES_DIR, img))
        print("删除完成")

注意:脚本无法识别通过变量拼接的动态引用(如"images/" + imageName),这类情况需要你手动确认后再处理。

方案二:使用专门的Android Studio插件

在Android Studio的「插件市场」中搜索并安装Unused Assets Finder,配置扫描范围为src/main/assets/images,运行扫描后可批量勾选未使用的图片进行删除。

同样需要注意:对于动态拼接文件名的引用,插件可能会误判为未使用,务必仔细核对扫描结果。

方案三:全局搜索辅助清理

如果脚本和插件都有局限性,可结合Android Studio的全局搜索功能批量验证:

  • 先导出assets/images下的所有文件名列表;
  • 逐个在项目中全局搜索文件名(如xxx.png),若搜索结果为空则标记删除;
  • 可配合IDE的「Find in Path」批量操作提高效率。

重要提醒

无论使用哪种方法,删除前务必备份项目或提交当前代码到Git仓库,避免误删有用资源。

内容的提问来源于stack exchange,提问作者user20329636

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 15:25:21