获取apk包中,文件包名和启动名

在App自动化中,启动app时,需要输入启动信息,其中包含设备信息和apk包信息。

这次就是实测,通过apk获取包名和包的版本号等信息。

步骤:

  1. 通过aapt工具获取包的所有数据
  2. 通过正则表达式,获取所需数据

第一步:通过aapt工具获取包的所有数据

  • 配置aapt变量,以MAC电脑为例:aapt工具存在已经安装的Android插件下:/Users/Wayne/Library/Android/sdk/build-tools。配置aapt环境变量:终端执行命令:sudo -s vim ~/.bash_profile

    Wayne@192 30.0.3 % sudo -s vim ~/.bash_profile

    输入#aapt export
    PATH=${PATH}:/Users/wayne/Library/Android/sdk/build- tools/30.0.3/aapt/usr/local/bin

    生效环境变量:source ~/.bash_profile

    Wayne@192 30.0.3 % source ~/.bash_profile

    终端中执行查看具体目录下apk包数据:aapt dump badging XXX.apk

    Wayne@192 30.0.3 % aapt dump badging
    /Users/wangshuguang11/JD-work/install-app/wallet.apk

    wayne@192 30.0.3 % aapt dump badging

    得到类似以下数据:🔽

    /Users/Wayne/JD-work/install-app/wallet.apk package:
    name=‘com.cjdfintech.wallet’ versionCode=‘1234’ versionName=‘2.7.0’
    compileSdkVersion=‘29’ compileSdkVersionCodename=‘10’ sdkVersion:‘21’
    targetSdkVersion:‘29’ uses-permission:
    name=‘com.huawei.permission.SECURITY_DIAGNOSE’ uses-permission:
    name=‘android.permission.WRITE_SETTINGS’ uses-permission:

    使用python进行调用,执行aapt,使用os模块执行:

    aapt_path1 = "/Users/wangshuguang11/Library/Android/sdk/build-tools/30.0.3/aapt"  # 解析工具aapt.exe&MAC电脑照片没喝过aapt可执行地址
    apk_path1 = "/Users/wangshuguang11/JD-work/install-app/wallet.apk"  # apk地址
    data = os.popen("%s dump badging %s" % (aapt_path1, apk_path1)).read()#os.popen方式必须使用read模式进行读取数据
    #必须使用这种方式(全路径获取aapt可执行文件),直接使用aapt命令出现错误,原因还没确定,郁闷中。
    

第二步:通过aapt工具获取包的所有数据

output = re.compile("launchable-activity: name='(\S+)'").search(data)
#获取到"launchable-activity: name=' 开头的字符串。此处使用serch。如果是整个字符串的第一部分。name可以使用match
data_output= output.group(1)#获取字符串后数据。
print(data)

以下代码为完整的方法调用,其中获取的具体字段可自定义获取。

# -*-coding:utf-8-*-
import os,re
import subprocess
def getAppBaseInfo(parm_aapt_path, parm_apk_path):
    get_info_command = "%s dump badging %s" % (parm_aapt_path, parm_apk_path)   #使用命令获取版本信息  aapt命令介绍可以相关博客
    output = os.popen(get_info_command).read()  #执行命令,并将结果以字符串方式返回
    matchname = re.compile("package: name='(\S+)' versionCode='(\d+)' versionName='(\S+)'").match(output) #通过正则匹配,获取包名,版本号,版本名称
    # matchname2 = re.compile("launchable-activity: name='(\S+)'").search(output)#为获取非开头部分数据。按照需要自定义修改
    if not matchname:
        print (output)
        raise Exception("can't get packageinfo")

    packagename = matchname.group(1)
    versionCode = matchname.group(2)
    versionName = matchname.group(3)
    print (u" 包名:%s \n 版本号:%s \n 版本名称:%s " % (packagename, versionCode, versionName))

if __name__=='__main__':
    # path = os.path.abspath(os.path.dirname(__file__)) + "\\"
    aapt_path = "/Users/wangshuguang11/Library/Android/sdk/build-tools/30.0.3/aapt"  #解析工具aapt.exe&MAC电脑照片没喝过aapt可执行地址
    apk_path = "/Users/wangshuguang11/JD-work/install-app/wallet.apk"   #apk地址
    getAppBaseInfo(aapt_path, apk_path)


返回结果:

/usr/bin/python3
/Users/wangshuguang11/Advances/Apptest/auto_sys/auto_app/test-driver.py
包名:com.cjdfintech.wallet 版本号:1234 版本名称:2.7.0

Process finished with exit code 0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值