可通过 aapt dump xmltree appfile AndroidManifest.xml 命令获取该app所有的activit,所以我的思路是通过命令保存为文本,然后再获取以E: activity 开头的行数,然后依照保存的行数for循环去获取该行的下一行或者下下行,假如该行有name字符串,那么获取该行并处理保存到列表内。
linecache.getline 模块是用来读取文本的方法,可通过行来读取。
def get_activit(file):
activit = []
# 保存为test.txt
os.popen(rf"aapt dump xmltree {file} AndroidManifest.xml >./test.txt")
# 获取以E: activity 开头的行数
test = str(
os.popen(
rf'aapt dump xmltree {file} AndroidManifest.xml |findstr /n "^E: activity" ').read()).splitlines()
for i in test:
# 显示行数
# print((i[:4]).replace(":",""))
sun_i = int((i[:4]).replace(":", ""))
# 清除缓存
linecache.clearcache()
jsq = 1
while True:
# 从该行的下一行查找是否有name字符,如果有截取Activity
if "name" in linecache.getline("./test.txt", sun_i + jsq):
# 添加到列表内
activit.append(str(linecache.getline("./test.txt", sun_i + jsq)).split('Raw: "')[-1].split('")')[0])
# 显示要添加的元素
print(str(linecache.getline("./test.txt", sun_i + jsq)).split('Raw: "')[-1].split('")')[0])
break
# 如果下3行都没有找到那么退出
elif jsq > 3:
print("未找到")
break
jsq += 1
print("activit已获取并添加到列表内")
return activit