Shell腳本 | 截取包名


之前寫 shell 腳本的幾篇文章都是先大致介紹腳本的功能和寫法,然后一股腦的給出完整的代碼。並沒有細致入微的解釋腳本中的每一行是如何思考如何編寫的。

今天反其道而行之,只介紹一行代碼。爭取能講的清楚明白,讓大家了解我在寫這行代碼時的思路。

說說這行代碼的作用吧:通過反編譯工具 apktool 將 apk 文件反編譯后,得到的文件中有一份 AndroidManifest.xml。希望從這份文件中獲取到 apk 的包名(Package Name)。

首先,我需要確定每個 apk 反編譯后拿到的 AndroidManifest.xml 格式是否一致。所以,我選了 BAT 三家大廠的代表作品,通過 apktool 將它們的 apk 反編譯后,發現 AndroidManifest.xml 都是一樣的格式。並且包名就在首行。這下就好辦了。

鑒於它們三家的 AndroidManifest.xml 格式都一樣,我就隨便選了 QQ 的 AndroidManifest.xml 當作模版進行腳本編寫吧。

以下是編寫思路:
1、因為包名在首行,所以先把第一行字符給提取出來;

sed -n '1p' AndroidManifest.xml

2、包名所在列和其他幾列通過空格隔開的,那就可以把每一列轉成單獨的行;

sed -n '1p' AndroidManifest.xml | awk '{for(i=1;i<=NF;i++){print $i;}}'

3、因為只有包名這一列含有"package"一詞,所以可以過濾出這行;

sed -n '1p' AndroidManifest.xml | awk '{for(i=1;i<=NF;i++){print $i;}}' | grep "package"

4、過濾后的這行,包名包含在兩個雙引號之間,通過將雙引號作為截取字符即可將這行分為三部分,輸出第二部分即為包名。

sed -n '1p' AndroidManifest.xml | awk '{for(i=1;i<=NF;i++){print $i;}}' | grep "package" | awk -F '"' '{print $2}'

第四步結束,這個截取包名的腳本也就寫完了。


歡迎關注微信公眾號"測試開發Stack"


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM