Python编码实现获取APK文件信息

以下演示内容在window的操作系统

一、使用 Python 的 APK 包实现

from androguard.core.bytecodes.apk import APK

# 获取本地apk路径
apk_path = 'local_path/test.apk'

# 加载APK文件
apk = APK(apk_path)

# 获取包名(Package Name)
package_name = apk.get_package()

# 获取应用程序名称(Application Name)
application_name = apk.get_app_name()

# 获取应用程序版本名称(Version Name)
version_name = apk.get_androidversion_name()

# 获取应用程序版本号(Version Code)
version_code = apk.get_androidversion_code()

# 编译版本号(目标SDK版本)
target_sdk_version = apk.get_target_sdk_version()

# sha1_签名信息
sha1 = apk.get_certificate(apk.get_signature_name()).sha1_fingerprint

"""
APK架构信息
armeabi:基于ARM架构的32位设备,适用于较旧的ARM处理器。
armeabi-v7a:基于ARM架构的32位设备,适用于大多数ARMv7处理器及以上。
arm64-v8a:基于ARM架构的64位设备,适用于ARMv8处理器及以上。
x86:基于x86架构的32位设备,适用于x86处理器。
x86_64:基于x86架构的64位设备,适用于x86_64处理器。
"""
architecture = {
    "armeabi": False,
    "armeabi-v7a": False,
    "arm64-v8a": False,
    "x86": False,
    "x86_64": False
}

apk_files = apk.get_files()
for file in apk_files:
    for key, value in architecture.items():
        if value == False and file.startswith('lib/' + key + '/'):
            architecture[key] = True

print('application_name:', application_name)
print('package_name:', package_name)
print('version_code:', version_code)
print('version_name:', version_name)
print('target_sdk_version:', target_sdk_version)
print('architecture:', architecture)
print('SHA1:', sha1)

二、Python调用 aapt 命令实现

1、下载 aapt

下载完成后注意配置环境变量!!!
地址:https://www.mediafire.com/file/e8ww8wbgcowbti4/aapt

Python编码实现获取APK文件信息_第1张图片

2、代码实现

import os
import re
import subprocess

#获取当前操作系统
current_os = os.name

# 根据当前操作系统选择换行符
if current_os == 'nt':  # Windows系统
    line_break = '\r\n'
elif current_os == 'posix':  # Linux、Unix-like系统
    line_break = '\n'
else:  # 其他操作系统,默认使用换行符'\n'
    line_break = '\n'

# 使用aapt命令获取APK信息 (apk_path:替换为你的APK文件路径)
command = ['aapt', 'dump', 'badging', apk_path]
result = subprocess.run(command, capture_output=True)

# 解析输出以获取常见信息
output = result.stdout.decode('utf-8', 'ignore')
lines = output.split(line_break)

package_name = re.search(r"package: name='(.*?)'", lines[0]).group(1)
version_code = re.search(r"versionCode='(.*?)'", lines[0]).group(1)
version_name = re.search(r"versionName='(.*?)'", lines[0]).group(1)
sdk_version = re.search(r"sdkVersion:'(.*?)'", lines[1]).group(1)

is_arch32 = lines[len(lines)-2].find("armeabi-v7a") != -1
is_arch64 = lines[len(lines)-2].find("arm64-v8a") != -1

# 打印获取的信息
print("Package Name:", package_name)
print("Version Code:", version_code)
print("Version Name:", version_name)
print("SDK Version:", sdk_version)
print("是否支持32位:", is_arch32)
print("是否支持64位:", is_arch64)

运行结果:
Python编码实现获取APK文件信息_第2张图片

你可能感兴趣的:(工作成长,python,开发语言)