使用ADB Push忽略特定文件夹

8次阅读
没有评论

问题描述

在通过adb push将开发文件(如git仓库)从本地机器传输到Android设备时,需要排除某些目录(例如Java项目中的“build”目录)。但遗憾的是,没有直接的方法让adb push支持忽略指定的目录。本篇文章将介绍如何解决该问题。

解决方案

请注意在进行文件操作前备份重要数据,并确保理解所有可能对你的Android设备产生的影响。

方案1:编写Shell脚本

这是最直接的解决方案,可以通过编写一个shell脚本来实现adb push时忽略特定目录的功能。具体而言,可以先使用本地的git命令行工具筛选出需要推送文件,之后逐个使用adb push进行推送。

示例步骤:

  1. 首先安装Termux以及在设备中部署的Git客户端。
  2. 使用以下Bash脚本来过滤并移动需要推送的文件到Android设备:
#!/bin/bash

# 先准备一个临时目录用于存放不需要推送到Android设备的文件或目录
TEMP_DIR=$(mktemp -d)

# 将忽略规则列出来(此处使用.gitignore)
git checkout .

# 推送除忽略外全部内容
adb push ./* $TEMP_DIR/

# 移动git项目排除掉的目标文件夹到临时目录中
adb shell ls -R /path/to/excluded/folder >$TEMP_DIR/exclusions.txt
while IFS= read -r line; do
  adb pull "/path/to/excluded/folder/${line#$'\n'}" $TEMP_DIR/
done < exclusions.txt

# 清理临时文件夹,并推送所有内容
rm -rf $TEMP_DIR
adb push ./* /path/to/destination/

# 删除临时文件夹残留副本及清理工作

注:请确保根据你的需求修改脚本中的路径和命令。

方案2:依赖Git操作来排除文件

为了简化此过程,你可以使用git status, git ls-files -o --exclude-standard将要忽略的文件目录通过本地机器进行处理再推送:

#!/bin/bash

excluded_folders=("build" "target")
for folder in ${excluded_folders[@]}; do
    # 把指定要排除的文件夹加入. gitignore 
    echo "$folder" >> .gitignore
done 

# 清理并确认git状态,然后通过git push的方式将改动推送到远程仓库
git add .
git commit -m "Prepare files for android push"
git pull

# 推送已更新后的.gitignore及剩余文件到设备路径下
adb push ./* /path/to/destination/

上述解决方案确保了开发环境中必要的变更都能通过Git操作进行,而非直接依赖adb命令集。如果你计划定期推送到Android系统,并且希望保持一个相对一致的编译环境,则建议采用这种方法来处理忽略规则的问题。

综上所述,无论选择哪一种方法,请确保已经充分了解相关工具并做好数据备份工作,在实际生产环境中操作务必谨慎。另外,随着技术的进步也有可能引入新的工具和API使得这一过程变得更加简单直接。

正文完