XML内容如下:

<?xmlversion="1.0"encoding="utf-8"standalone="no"?><manifestxmlns:android="http://schemas.android.com/apk/res/android"package="com.dongbao.wauoen.interappactivitytesting"platformBuildVersionCode="23"platformBuildVersionName="6.0-2704002"><uses-permissionandroid:name="android.permission.READ_EXTERNAL_STORAGE"/><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:supportsRtl="true"android:theme="@style/AppTheme"><activityandroid:exported="true"android:name="com.dongbao.wauoen.interappactivitytesting.MainActivity"><intent-filter><actionandroid:name="android.intent.action.MAIN"/><categoryandroid:name="android.intent.category.LAUNCHER"/></intent-filter></activity><activityandroid:enabled="@bool/use_activity"android:exported="true"android:icon="@drawable/ic_chooser"android:label="@string/choose_file"android:name="com.ipaulpro.afilechooser.FileChooserActivity"/><activityandroid:exported="true"android:name="com.dongbao.wauoen.interappactivitytesting.ExampleActivity"android:permission="android.permission.READ_EXTERNAL_STORAGE"/></application></manifest>

2.解析过程:主要获取开放activity的信息,并保存到xml文件中

fromActivityInfoimportActivityInfotry:importxml.etree.cElementTreeasETexceptImportError:importxml.etree.ElementTreeasETimportsys#Manifestnamespacenamespace='{http://schemas.android.com/apk/res/android}'#Exportedactivitiesexported_activities=[]#XMLanalyzedef__xml_analyze__():tree=ET.parse(r"./app/AndroidManifest.xml")root=tree.getroot()#printtree.namespace#1.getpackagenamepackagename=root.attrib["package"]#2.getexportedactivityapplication=root.find("application")__get_exported_activities__(application,packagename)foractivityinexported_activities:printactivity.__get_name__(),activity.__get_package_name__(),activity.__get_permission__()#3.saveresulttoxmlfile__save_result_to_xml__()#getexportedactivitiesdef__get_exported_activities__(application,packagename):foractivityinapplication:#2.1MainActivitynameif__is_main_activity__(activity):name=activity.attrib[namespace+'name']main_activtiy=ActivityInfo(name)main_activtiy.__set_package_name__(packagename)ifactivity.find(namespace+'permission')isnotNone:permission=activity.attrib[name+'permission']main_activtiy.__set_permission__(permission)exported_activities.append(main_activtiy)else:#2.1exportedactivitiesexceptmainactivtiyexported=activity.attrib[namespace+'exported']ifexported:activity_name=activity.attrib[namespace+'name']exported_activity=ActivityInfo(activity_name)exported_activity.__set_package_name__(packagename)permission=activity.attrib.get(namespace+'permission',None)ifpermissionisnotNone:#permission=activity.attrib[name+'permission']#printpermissionexported_activity.__set_permission__(permission)exported_activities.append(exported_activity)#saveresulttoxmlfiledef__save_result_to_xml__():tree=ET.ElementTree()root=ET.Element('data')tree._setroot(root)foractivityinexported_activities:node=ET.Element('activity')node.set('name',activity.__get_name__())node.set('packagename',activity.__get_package_name__())root.append(node)ifactivity.__get_permission__()isnotNone:node.set('permission',activity.__get_permission__())tree.write("output.xml")#theactivityisornotMainActivitydef__is_main_activity__(activity):intent_filter=activity.find("intent-filter")ifintent_filterisnotNone:action=intent_filter.find('action')category=intent_filter.find('category')ifactionisnotNoneandcategoryisnotNone\andaction.attrib[namespace+"name"]=='android.intent.action.MAIN'\andcategory.attrib[namespace+"name"]=='android.intent.category.LAUNCHER':print'thisismainactivity'returnTruereturnFalse#mainfunif__name__=="__main__":__xml_analyze__()

3.ActivityInfo

classActivityInfo:def__init__(self,name):self.name=nameself.package_name=''self.permission=''def__set_package_name__(self,package_name):self.package_name=package_namedef__get_package_name__(self):returnself.package_namedef__set_name__(self,name):self.name=namedef__get_name__(self):returnself.namedef__set_permission__(self,permission):self.permission=permissiondef__get_permission__(self):returnself.permission