一.什么是aapt:
aapt Android Asset Packaging Tool android的一個資源打包工具
二.配置aapt路徑:
aapt這個工具,在sdk的build-tools下,所以一般配置好sdk就可以使用該工具。
或者單獨下載aapt這個工具,在環境變量path中添加aapt的路徑。
aapt v查看aapt版本號,確認aapt是否配置好
三.aapt的使用
學習過程中沒有涉及到很深的aapt的具體使用
主要應用:
aapt l
簡單的羅列壓縮文件中每一項的內容
aapt l -v XXX.apk
列表方式詳細標識出壓縮文件中的每一項和很多參數
Length 原始文件參數
Date 日期
Time 時間
Name 名稱
Method壓縮方法,Deflate及Stored兩種,即該Zip目錄采用的算法是壓縮模式還是存儲模式
Ratio 壓縮率
Size 壓縮省掉的大小
CRC-32 循環冗余校驗 這個計算是特定的算法的
offset:zipfile中偏移量的意思
aapt l -a
詳細輸出壓縮文件中所有目錄的內容
aapt dump strings
打印apk中所有string資源表
aapt dump badging
查看apk中的配置信息
四.具體實現
通過aapt來完成對上傳的apk進行二次驗證,並提取對應的包名,版本號、版本名,icon圖標在apk中的地址等信息
1 def apkParseMessage(apkFilePath,apptResultPath): 2 apkMessage = {} 3 cmd = "D:/aapt d badging %s > %s"%(apkFilePath,apptResultPath) 4 os.popen(cmd) 5 time.sleep(1) 6 f = open(apptResultPath,"r",encoding = 'utf-8') 7 result =f.read() 8 #匹配packagename 9 parrenPackageName = re.compile("package: name='(.*?)'") 10 packageName = re.findall(parrenPackageName,result) 11 print(packageName) 12 apkMessage.setdefault("packageName",packageName[0]) 13 #匹配當前apk版本號 14 parrenVersionCode = re.compile("versionCode='(.*?)'") 15 versionCode = re.findall(parrenVersionCode,result) 16 apkMessage.setdefault("versionCode",versionCode[0]) 17 #匹配當前apk版本名 18 parrenVersionName = re.compile("versionName='(.*?)'") 19 versionName = re.findall(parrenVersionName,result) 20 apkMessage.setdefault("versionName",versionName[0]) 21 parrenName = re.compile("application-label:'(.*?)'") 22 apkName = re.findall(parrenName,result) 23 apkMessage.setdefault("Name",apkName[0]) 24 #parrenIcon = re.compile("application-icon-480:'(.*?)'") 25 #匹配當前apk的icon圖標存儲位置 26 parrenIcon = re.compile("icon='(.*?)'") 27 apkIcon = re.findall(parrenIcon,result) 28 apkMessage.setdefault("Icon",apkIcon[0]) 29 print(apkMessage) 30 f.close() 31 32 return apkMessage
再通過python的zipfile庫中的方法將icon圖標讀取出來,已被前台顯示。
1 def downLoadIcon(apkFilePath,saveIconPath,apkMessage): 2 IconPath = apkMessage['Icon'] 3 print(apkMessage['Icon']) 4 zip = zipfile.ZipFile(apkFilePath) 5 6 iconData = zip.read(IconPath) 7 with open(saveIconPath,'wb') as IconFile: 8 IconFile.write(iconData) 9 zip.close() 10 return IconFile