使用bat脚本调用py文件直接获取应用的包名和targetversion

背景:

在上一篇已经介绍过如何利用python调用aapt获取包名

https://www.cnblogs.com/reseelei-despair/p/11078750.html

但是因为每次都要修改py文件内的安装包所在路径,感觉不是很方便,所以想办法用bat脚本实现直接将文件拖入bat文件直接运行获取到相关信息

思路:

批处理脚本直接运行py文件,修改py文件,导入sys模块,直接在cmd中将安装包路径传入py后运行

代码:

bat脚本代码如下

@echo off
COLOR 2
set "getname=%1"
echo %getname%
python D:\Pyexerice\aapt_badging.py %getname%
pause

使用方法:创建一个txt文件,代码复制进去,保存后退出,将文件后缀名修改成bat即可

python代码修改部分

# -*- coding: utf-8 -*-
import re
import subprocess
import os
import sys#导入sys模块
class ApkInfo:
    def __init__(self, apk_path):
        self.apkPath = apk_path
        self.aapt_path = self.get_aapt()

    @staticmethod
    def get_aapt():
        if "ANDROID_HOME" in os.environ:
            root_dir = os.path.join(os.environ["ANDROID_HOME"], "build-tools")
            for path, subdir, files in os.walk(root_dir):
                if "aapt.exe" in files:
                    return os.path.join(path, "aapt.exe")
        else:
            return "ANDROID_HOME not exist"

    def get_apk_base_info(self):
        p = subprocess.Popen(self.aapt_path + " dump badging %s" % self.apkPath, stdout=subprocess.PIPE,
                             stderr=subprocess.PIPE,
                             stdin=subprocess.PIPE, shell=True)
        (output, err) = p.communicate()
        match = re.compile("package: name=‘(\S+)‘").match(output.decode())
        if not match:
            raise Exception("can‘t get packageinfo")
        package_name = match.group(1)
        return package_name

    def get_apk_activity(self):
        p = subprocess.Popen(self.aapt_path + " dump badging %s" % self.apkPath, stdout=subprocess.PIPE,
                             stderr=subprocess.PIPE,
                             stdin=subprocess.PIPE, shell=True)
        (output, err) = p.communicate()
        match = re.compile("launchable-activity: name=‘(\S+)‘").search(output.decode())
        if match is not None:
            return match.group(1)

    def get_apk_sdkVersion(self):
        p = subprocess.Popen(self.aapt_path + " dump badging %s" % self.apkPath, stdout=subprocess.PIPE,
                             stderr=subprocess.PIPE,
                             stdin=subprocess.PIPE, shell=True)
        (output, err) = p.communicate()
        match = re.compile("sdkVersion:‘(\S+)‘").search(output.decode())
        return match.group(1)

    def get_apk_targetSdkVersion(self):
        p = subprocess.Popen(self.aapt_path + " dump badging %s" % self.apkPath, stdout=subprocess.PIPE,
                             stderr=subprocess.PIPE,
                             stdin=subprocess.PIPE, shell=True)
        (output, err) = p.communicate()
        match = re.compile("targetSdkVersion:‘(\S+)‘").search(output.decode())
        return match.group(1)

if __name__ == ‘__main__‘:
    apk_info = ApkInfo(sys.argv[1])#直接将cmd中给的参数引用至此
    print("Activity:%s"%apk_info.get_apk_activity())
    print("apkName:%s"%apk_info.get_apk_base_info())
    print("sdkVersion:%s"%apk_info.get_apk_sdkVersion())
    print("targetSdkVersion:%s"%apk_info.get_apk_targetSdkVersion())

效果:

将文件拖入

运行结果如下

原文地址:https://www.cnblogs.com/reseelei-despair/p/11082060.html

时间: 2024-11-03 16:20:05

使用bat脚本调用py文件直接获取应用的包名和targetversion的相关文章

Python脚本随笔-py文件间的调用

脚本运行过程中可能由某个py文件调用另一个py文件,不同于import,调用py文件相当于直接去执行另一个py文件 py文件的调用需要使用sys库和os库 调用并传参数:调用py文件可以使用os.system(file)语句,file为被调用py文件的绝对路径,os.system语句规则如下: os.system格式为os.system(command % (%s,%i ...))command 为字符串格式的命令语句,如果需要传递参数,以%s或%i等取代具体参数如下:%s    字符串 (采用

通过上传的APK文件,解析APK文件内容,获取应用权限包名等

通过上传的APK文件,解析APK文件内容,获取应用权限包名等 1工具导入: 下载aapt.exe反编译执行程序,放入Java工程资源文件夹下(具体路径自己可定义) 2编写ApkUtil类,获取apk文件信息 public class ApkUtil { public static final String VERSION_CODE = "versionCode"; public static final String VERSION_NAME = "versionName&q

纯JAVA环境获取APK信息(包名,版本,版本号,大小,权限...),纯JAVA语言编写PC端获取APK信息

纯JAVA环境获取APK信息:包名,版本,版本号,大小,权限... 纯Java环境获取APK信息需要两个包:AXMLPrinter2.jar 跟jdom.jar,用于反编译XML和解析XML的 项目目录 这个类是获取APK信息的 public class ApkUtil { private static final Namespace NS = Namespace.getNamespace("http://schemas.android.com/apk/res/android"); @

在程序中使用命令行的方式来调用py文件

做这个主要是程序可以做到直接调用一个脚本,而不是从脚本中把类或者函数import出来这样调用,比如我们写的python命令行文件,让java来调用,让c++来调用,都是可以的.这样不需要整个语言都用py,否则什么都自己做加大了工作量. 做这个需要两点内容就行,一个是写一个接受命令行参数的脚本. 另外一个是写一个执行cmd命令的代码并获取控制台的结果. 以爬房天下网站的二手房为例,传入城市名和房屋名称就能搜到信息.可能有些人觉得为什么不去官网查,要做这个是不是多次一举,不是这样的,做这个是需要提供

JSFinder 一个从JS文件中获取url和子域名的工具

关于 JSFinder JSFinder is a tool for quickly extracting URLs and subdomains from JS files on a website. JSFinder是一款用作快速在网站的js文件中提取URL,子域名的工具. 提取URL的正则部分使用的是LinkFinder By : Threezh1 Blog: https://threezh1.github.io/ https://threezh1.com/2019/06/10/JSFin

如何获取app 的包名和activity 名

我们在进行手机自动化测试时经常要知道app 的包名和Activiy 名称,好多同仁刚学习时不知从哪去找,其实有好多种方法可以获取这些值 以下是针对无源码的情形,更适合于初学同仁 方法一 用重签名工具,这个在Robotium  中用得比较多 另外一种方式用命令方获取 Aapt dumpbadging xxxx.apk 第一个框为包名 第二个框为主Activity名 如果取包名与Activity在命令行中不方例还可以用以下方式获取 Aapt dumpbadging xxxx.apk  >c:\apk

monkeyrunner_获取apk的包名和activity名

一.使用adb获取单个apk的包名和Activity名称: 1.配置adb环境 a. 我的电脑点击右键-属性-高级-环境变量; b.  环境变量中新建PATH,变量值输入adb.exe工具所在目录; c.  检查是否成功,启动命令行,输入adb; 2.  手机连接电脑,开启USB调试,打开app,输入命令:adb devices,查看手机是否连接到电脑: 3.  doc窗口输入命令行:adb shell dumpsys activity | find "mFocusedActivity"

[uiautomator篇] 如何获取apk的包名 博客模板

Android自动化学习笔记:获取APK包名的几种方法 ---------------------------------------------------------------------------------------------------------------------------- 小记:自学过程中,经常需要用得到一个APK的包名,总结一下得到包名的几种方式. ********************** 2017-16-23:初版 ********************

获取APK的包名,和启动窗口类

第一个,下载APK文件. 第二步:下载     AXMLPrinter2.jar   文件.用于解析 AndroidManifest.xml 第三步: 解压缩APK文件得到 AndroidManifest.xml. 第四步: 运行 java -jar AXMLPrinter2.jar AndroidManifest.xml > AndroidManifest.txt 查看 AndroidManifest  得到包名 原文地址:https://www.cnblogs.com/hui41302707