import os
def getName(AAPTLocation, apkFile):
AAPTLocation = AAPTLocation.replace('\\','\\\\')
apkFile = apkFile.replace('\\','\\\\')
pname = ''
cmd = ' \"\"' + AAPTLocation + '\" dump badging \"' + apkFile + '\"\"'
p = os.popen(cmd)
while 1:
s = p.readline()
if s:
print s
if s.find('package') != -1 and s.find('name') != -1:
pname = s
if not s:
break
p.close()
return pname
AAPTLocation = 'C:\Program Files\Android\android-sdk\platform-tools\aapt.exe'
apkFile = 'C:\APKs\test.apk'
print getName(AAPTLocation, apkFile)
我需要运行aapt.exe,获取apk的包名并解析结果。
直接在命令行界面中运行“C:\ Program Files \ Android \ android-sdk \ platform-tools \ aapt.exe”转储标记“C:\ APKs \ test.apk”工作正常。但是在我上面粘贴的python脚本中,它并没有给我任何东西。
我已经尝试逃避反斜杠但它根本没有任何区别。我的代码有问题吗?。
答案 0 :(得分:0)
你需要加倍python文字中的斜杠,它们被解释为转义码的开头,否则:
>>> 'C:\Program Files\Android\android-sdk\platform-tools\aapt.exe'
'C:\\Program Files\\Android\x07ndroid-sdk\\platform-tools\x07apt.exe'
>>> 'C:\\Program Files\\Android\\android-sdk\\platform-tools\\aapt.exe'
'C:\\Program Files\\Android\\android-sdk\\platform-tools\\aapt.exe'
>>> print 'C:\\Program Files\\Android\\android-sdk\\platform-tools\\aapt.exe'
C:\Program Files\Android\android-sdk\platform-tools\aapt.exe
注意第一个例子(来自你的代码)python如何将\a
条目解释为十六进制07字符,而不是BELL的ASCII代码。
替代方法是使用原始python字符串文字,在其前面添加字母r
:
>>> r'C:\Program Files\Android\android-sdk\platform-tools\aapt.exe'
'C:\\Program Files\\Android\\android-sdk\\platform-tools\\aapt.exe'
有关字符串转义如何在字符串文字中起作用的详细信息,请参阅the string literals documentation。