0
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 脚本中,它并没有给我任何东西。

我已经尝试转义反斜杠,但它根本没有任何区别。我的代码有问题吗?

4

1 回答 1

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'

有关字符串转义如何在字符串文字中工作的更多信息,请参阅字符串文字文档。

于 2012-07-23T09:28:08.947 回答