要求
- 無(wú)需 root
- 系統(tǒng)環(huán)境中已配置 adb 命令
- 系統(tǒng)環(huán)境中已配置 aapt 命令 (可選,用于解析APP中文名,用于導(dǎo)出文件的重命名)
思路

整體思路.png
步驟
- 手動(dòng)啟動(dòng)應(yīng)用
- 棧頂獲取包名
? ~ 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
- 導(dǎo)出安裝包到指定位置 (如:~/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中文名稱(chēng),方便進(jìn)行重命名 (可選, 可用于腳本中自動(dòng)化處理)
? ~ 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 函數(shù),通過(guò)Terminal一鍵執(zhí)行
function export_apk() {
if [ ! -d "$1" ]; then
echo "導(dǎo)出目錄無(wú)效"
return
fi
# 導(dǎo)出后絕對(duì)路徑
save_dir=$(
cd ${1%/}
pwd
)
echo "正在導(dǎo)出"
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)
# 導(dǎo)出后的默認(rèn)名稱(chēng)為 {包名}.apk
def_path=${save_dir}/"$pkg_name".apk
output=$(adb pull "$apk_path" "$def_path")
# 檢查導(dǎo)出是否成功
if [[ $output != *"file pulled"* ]]; then
printf "導(dǎo)出失敗 ($output)\n"
return
fi
# 如果環(huán)境中配置了AAPT命令,則嘗試解析APK對(duì)應(yīng)的中文名,并進(jìn)行重命名
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 "導(dǎo)出成功 %s\n" "$new_path"
return
fi
fi
printf "導(dǎo)出成功 %s\n" "$def_path"
}
使用方法:
export_apk {保存的位置}
效果演示:
- 無(wú)可用設(shè)備時(shí)
? ~ export_apk ~/Desktop 正在導(dǎo)出 導(dǎo)出失敗 (adb: error: failed to get feature set: no devices/emulators found) - 有可用設(shè)備時(shí)
? ~ export_apk ~/Desktop 正在導(dǎo)出 導(dǎo)出成功 /Users/XXX/Desktop/瀏覽器.apk - 環(huán)境中未配置AAPT命令時(shí) (導(dǎo)出的文件默認(rèn)為包名命名)
? ~ export_apk ~/Desktop 正在導(dǎo)出 導(dǎo)出成功 /Users/XXX/Desktop/com.android.browser.apk