ADB導(dǎo)出指定應(yīng)用APK安裝包

要求

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

思路

整體思路.png

步驟

  1. 手動(dòng)啟動(dòng)應(yīng)用
  2. 棧頂獲取包名
?  ~ adb shell dumpsys activity top | grep -w ACTIVITY | tail -n 1 | awk '{ printf $2}' | cut -d "/" -f 1
com.android.browser
  1. 獲取安裝路徑
?  ~ adb shell pm path com.android.browser | cut -d ":" -f 2
/data/app/~~1VThWJXJ1-CLosRKqPgHtg==/com.android.browser-QoQ8ZoUwRi1jCEu6w-B0Mw==/base.apk
  1. 導(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)
  1. 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
    
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容