Shell脚本 | 截取包名

之前写 shell 脚本的几篇文章都是先大致介绍脚本的功能和写法,然后一股脑的给出完整的代码。并没有细致入微的解释脚本中的每一行是如何思考如何编写的。

今天反其道而行之,只介绍一行代码。争取能讲的清楚明白,让大家了解我在写这行代码时的思路。

说说这行代码的作用吧:通过反编译工具 apktool 将 apk 文件反编译后,得到的文件中有一份 AndroidManifest.xml。希望从这份文件中获取到 apk 的包名(Package Name)。

首先,我需要确定每个 apk 反编译后拿到的 AndroidManifest.xml 格式是否一致。所以,我选了 BAT 三家大厂的代表作品,通过 apktool 将它们的 apk 反编译后,发现 AndroidManifest.xml 都是一样的格式。并且包名就在首行。这下就好办了。
999948-20190412122653085-1682548287.png

鉴于它们三家的 AndroidManifest.xml 格式都一样,我就随便选了 QQ 的 AndroidManifest.xml 当作模版进行脚本编写吧。
999948-20190412122708186-2102170644.png

以下是编写思路:
1、因为包名在首行,所以先把第一行字符给提取出来;

sed -n '1p' AndroidManifest.xml

999948-20190412122734103-1302263518.png

2、包名所在列和其他几列通过空格隔开的,那就可以把每一列转成单独的行;

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

999948-20190412122751090-1252435429.png

3、因为只有包名这一列含有"package"一词,所以可以过滤出这行;

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

999948-20190412122804719-144138124.png

4、过滤后的这行,包名包含在两个双引号之间,通过将双引号作为截取字符即可将这行分为三部分,输出第二部分即为包名。

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

999948-20190412122820579-1615912432.png

第四步结束,这个截取包名的脚本也就写完了。


欢迎关注微信公众号"测试开发Stack"

转载于:https://www.cnblogs.com/liushengchieh/p/10695308.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值