要求
- 无需 root
- 系统环境中已配置 adb 命令
- 系统环境中已配置 aapt 命令 (可选,用于解析APP中文名,用于导出文件的重命名)
思路
整体思路.png步骤
- 手动启动应用
- 栈顶获取包名
➜ ~ adb shell dumpsys activity top | grep -w ACTIVITY | tail -n 1 | awk '{ printf $2}' | cut -d "/" -f 1
com.android.browser
- 获取安装路径
➜ ~ adb shell pm path com.android.browser | cut -d ":" -f 2
/data/app/~~1VThWJXJ1-CLosRKqPgHtg==/com.android.browser-QoQ8ZoUwRi1jCEu6w-B0Mw==/base.apk
- 导出安装包到指定位置 (如:~/Desktop)
➜ ~ adb pull /data/app/~~1VThWJXJ1-CLosRKqPgHtg==/com.android.browser-QoQ8ZoUwRi1jCEu6w-B0Mw==/base.apk ~/Desktop
/data/app/~~1VThWJXJ1-CLosRKqPgHtg==/com.android.browser-QoQ8ZoUwRi1...apk: 1 file pulled, 0 skipped. 32.8 MB/s (132671840 bytes in 3.860s)
- aapt 解析APP中文名称,方便进行重命名 (可选, 可用于脚本中自动化处理)
➜ ~ aapt d badging ~/Desktop/base.apk | grep "application-label-zh-CN" | cut -d ':' -f 2 | sed "s/'//g"
浏览器
➜ ~ mv ~/Desktop/base.apk ~/Desktop/浏览器.apk
组合
组合以上命令使用
如在 .zshrc 或 .bashrc 中添加 function 函数,通过Terminal一键执行
function export_apk() {
if [ ! -d "$1" ]; then
echo "导出目录无效"
return
fi
# 导出后绝对路径
save_dir=$(
cd ${1%/}
pwd
)
echo "正在导出"
pkg_name=$(adb shell dumpsys activity top 2>/dev/null | grep -w ACTIVITY | tail -n 1 | awk '{ printf $2}' | cut -d "/" -f 1)
apk_path=$(adb shell pm path "$pkg_name" 2>/dev/null | cut -d ":" -f 2)
# 导出后的默认名称为 {包名}.apk
def_path=${save_dir}/"$pkg_name".apk
output=$(adb pull "$apk_path" "$def_path")
# 检查导出是否成功
if [[ $output != *"file pulled"* ]]; then
printf "导出失败 ($output)\n"
return
fi
# 如果环境中配置了AAPT命令,则尝试解析APK对应的中文名,并进行重命名
if [[ -x "$(command -v "aapt")" ]]; then
app_name=$(aapt d badging "$def_path" 2>/dev/null | grep "application-label-zh-CN" | cut -d ':' -f 2 | sed "s/'//g")
if [[ -n $app_name ]]; then
new_path="$save_dir"/"$app_name".apk
mv "$def_path" "$new_path"
printf "导出成功 %s\n" "$new_path"
return
fi
fi
printf "导出成功 %s\n" "$def_path"
}
使用方法:
export_apk {保存的位置}
效果演示:
- 无可用设备时
➜ ~ export_apk ~/Desktop 正在导出 导出失败 (adb: error: failed to get feature set: no devices/emulators found)
- 有可用设备时
➜ ~ export_apk ~/Desktop 正在导出 导出成功 /Users/XXX/Desktop/浏览器.apk
- 环境中未配置AAPT命令时 (导出的文件默认为包名命名)
➜ ~ export_apk ~/Desktop 正在导出 导出成功 /Users/XXX/Desktop/com.android.browser.apk
网友评论