【代码片段收集】Python解析AndroidManifest.xml

写在前面的话

这个好像只适合我自己看,感觉有的代码片段复用率很高,总是反复需要用到。所以就整理一下,方便自己查找。

# find the MainActivity and let the MainActivity become the first element in the list
for activity in activityList:

    if activity.toxml().find("android.intent.action.MAIN")>0 \
       and activity.toxml().find("android.intent.category.LAUNCHER")>0:
        MainActivity=activity.getAttribute('android:name')
        print MainActivity 
        tmp=activity
        activityList.remove(activity)
        activityList.insert(0,tmp)
        break





from xml.dom.minidom import parse
import xml.dom.minidom

import os


MANIFST="AndroidManifest.xml"


apkPath="/home/chicho/tools/apktool/2/"


manifestFilePath = os.path.join(apkPath,MANIFST)


actsDictionary = {}

packageName=""


dom=xml.dom.minidom.parse(manifestFilePath)


root=dom.documentElement

package=root.getAttribute('package')

activityList = root.getElementsByTagName('activity')

MainActivity=""

actCnt=len(activityList) # the number of activity


# find the MainActivity and let the MainActivity become the first element in the list
for activity in activityList:

    if activity.toxml().find("android.intent.action.MAIN")>0 \
       and activity.toxml().find("android.intent.category.LAUNCHER")>0:
        MainActivity=activity.getAttribute('android:name')
        print MainActivity 
        tmp=activity
        activityList.remove(activity)
        activityList.insert(0,tmp)
        break








这里写图片描述

你必须非常努力,才可以看起来毫不费力

我获取应用权限,弃用 从apk中获取,仅从xml获取,涉及的代码如下: def grant_app_all_permissions(self): """ 自动获取应用所有权限并授予(ADB + 弹窗处理) """ print(f"🔍 正在获取应用 {self.package} 的所有权限...") permissions = self.get_app_all_permissions() if not permissions: print("❌ 未找到任何权限声明,请检查 ADB 输出或手动提供权限列表") return print(f"🔑 检测到 {len(permissions)} 个权限,开始授予...") self._grant_permissions_via_adb(permissions) self._handle_runtime_permissions() def get_app_all_permissions(self): """ 获取应用权限(优先 dumpsys,失败后解析 APK) """ permissions = self._get_app_permissions_via_adb() if not permissions: print("⚠️ dumpsys 未找到权限,尝试解析 APK 中的 AndroidManifest.xml...") # permissions = self._get_permissions_from_apk() return permissions def _get_app_permissions_via_adb(self): """ 通过 ADB 解析应用声明的权限(兼容不同设备格式) """ cmd = f'adb shell pm dump {self.package}' try: result = subprocess.check_output(cmd, shell=True, text=True) permissions = set() # 匹配所有权限声明段(兼容大写和小写格式) for section in re.findall( r"(?:declared permissions:|requested permissions:|REQUESTED PERMISSIONS|GRANTED PERMISSIONS):\n(.*?)(?=\n\n|\Z)", result, re.DOTALL): for line in section.strip().split('\n'): perm_match = re.match(r"^\s*([^\s:]+)", line) if perm_match: perm = perm_match.group(1) if perm.startswith("android.permission.") or perm.startswith("com.baidu."): permissions.add(perm) return list(permissions) except Exception as e: print(f"❌ 获取权限列表失败: {e}") return [] 控制台打印信息如下: ❌ 获取权限列表失败: 'gbk' codec can't decode byte 0x93 in position 411680: illegal multibyte sequence ⚠️ dumpsys 未找到权限,尝试解析 APK 中的 AndroidManifest.xml... ❌ 未找到任何权限声明,请检查 ADB 输出或手动提供权限列表
08-12
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值