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:\ ProgramFiles \ Android \ android-sdk \ platform-tools \ aapt.exe」ダンプバッジ「C:\ APKs\test.apk」を実行すると正常に機能します。ただし、上に貼り付けたPythonスクリプトでは、何も表示されません。

すでにバックスラッシュをエスケープしようとしましたが、まったく違いはありません。私のコードに何か問題がありますか?

4

1 に答える 1

0

Pythonリテラルのスラッシュを2倍にする必要があります。それ以外の場合は、エスケープコードの開始として解釈されます。

>>> '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エントリを代わりに16進数の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 に答える