批量解析apk的AndroidManifest.xml获得Pagename(Python)

来源:互联网 发布:ubuntu网页加载慢 编辑:程序博客网 时间:2024/06/05 06:54

今天工作的时候需要在Sdklancher中将待安装的APP的Pagename显示出来.批量在N多个APP的apk文件中去找Pagename太麻烦了,就用python写了一个批量脚本,虽然很烂但也勉强能使用.

# Author by Acidsweet# Version 0.01# Require OS:*unix#                                                     How To Use It#                                 Use "python <self.name>.py <the-dir-where-your-apks-in>"# Tips:Remenber to put the AXMLPrinter2.jar and <self.name>.py in the same dir#      Remenber to install the java and make sure it in the PATH#      <the-dir-where-your-apks-in> must end with '/'#      The result will in the result.txt which in <the-dir-where-your-apks-in>import os,sysfrom xml.dom import minidomdef unPack(pathdir,packname):apkfile=pathdir+packname+'.apk'filename=pathdir+packnameos.system('unzip '+apkfile+' -d '+filename)#-----------------------------------------------------------------------def getTarget(pathdir):xmldoc=minidom.parse(pathdir+'XML.xml')activitylist=xmldoc.getElementsByTagName('activity')Activity=getActivity(activitylist)return Activity.attributes['android:name'].value#-----------------------------------------------------------------------def getActivity(lst):inTern=u'android.intent.action.MAIN'for j in lst:actionlist=j.getElementsByTagName('action')for i in actionlist:if i.attributes['android:name'].value==inTern:return jreturn None#-----------------------------------------------------------------------def getPageName(pathdir):os.system('java -jar AXMLPrinter2.jar '+pathdir+'AndroidManifest.xml > '+pathdir+'XML.xml')#Binary.xml to Origin.xmlreturn getTarget(pathdir)#-----------------------------------------------------------------------def begin():pathdir=sys.argv[1]lst=os.listdir(pathdir)results={}packname=''for i in lst:packname=os.path.splitext(i)[0]suffix=os.path.splitext(i)[1]if suffix=='.apk':unPack(pathdir,packname)pagename=getPageName(pathdir+packname+'/')results[packname]=pagenamepackname=''#os.system('rm -rf '+pathdir+packname+'/')if os.path.exists(pathdir+'result.txt'):os.system('rm '+pathdir+'result.txt')targetfile=open(pathdir+'result.txt','a')for k in results.keys():targetfile.write(k+':'+results[k]+'\n')targetfile.close()#-----------------------------------------------------------------------if __name__=="__main__":begin()


这个版本还有很多问题,也无鲁棒性,聊胜于无吧.

这个脚本需要使用"AXMLPrinter2.jar",大家自行下载吧,网上很容易下载到,放到.py文件同文件夹下即可

原创粉丝点击