-
XML内容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
<? xml version = "1.0" encoding = "utf-8" standalone = "no" ?>
< manifest xmlns:android = "http://schemas.android.com/apk/res/android" package = "com.dongbao.wauoen.interappactivitytesting" platformBuildVersionCode = "23" platformBuildVersionName = "6.0-2704002" >
< uses-permission android:name = "android.permission.READ_EXTERNAL_STORAGE" />
< application android:allowBackup = "true" android:icon = "@mipmap/ic_launcher" android:label = "@string/app_name" android:supportsRtl = "true" android:theme = "@style/AppTheme" >
< activity android:exported = "true" android:name = "com.dongbao.wauoen.interappactivitytesting.MainActivity" >
< intent-filter >
< action android:name = "android.intent.action.MAIN" />
< category android:name = "android.intent.category.LAUNCHER" />
</ intent-filter >
</ activity >
< activity android:enabled = "@bool/use_activity" android:exported = "true" android:icon = "@drawable/ic_chooser" android:label = "@string/choose_file" android:name = "com.ipaulpro.afilechooser.FileChooserActivity" />
< activity android:exported = "true" android:name = "com.dongbao.wauoen.interappactivitytesting.ExampleActivity" android:permission = "android.permission.READ_EXTERNAL_STORAGE" />
</ application >
</ manifest >
|
2.解析过程:主要获取开放activity的信息,并保存到xml文件中
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
from ActivityInfo import ActivityInfo
try :
import xml.etree.cElementTree as ET
except ImportError:
import xml.etree.ElementTree as ET
import sys
# Manifest namespace namespace = '{http://schemas.android.com/apk/res/android}'
# Exported activities exported_activities = []
# XML analyze def __xml_analyze__():
tree = ET.parse(r "./app/AndroidManifest.xml" )
root = tree.getroot()
# print tree.namespace
# 1.get package name
packagename = root.attrib[ "package" ]
# 2.get exported activity
application = root.find( "application" )
__get_exported_activities__(application, packagename)
for activity in exported_activities:
print activity.__get_name__(), activity.__get_package_name__(), activity.__get_permission__()
# 3.save result to xml file
__save_result_to_xml__()
# get exported activities def __get_exported_activities__(application, packagename):
for activity in application:
# 2.1 MainActivity name
if __is_main_activity__(activity):
name = activity.attrib[namespace + 'name' ]
main_activtiy = ActivityInfo(name)
main_activtiy.__set_package_name__(packagename)
if activity.find(namespace + 'permission' ) is not None :
permission = activity.attrib[name + 'permission' ]
main_activtiy.__set_permission__(permission)
exported_activities.append(main_activtiy)
else :
# 2.1 exported activities except mainactivtiy
exported = activity.attrib[namespace + 'exported' ]
if exported:
activity_name = activity.attrib[namespace + 'name' ]
exported_activity = ActivityInfo(activity_name)
exported_activity.__set_package_name__(packagename)
permission = activity.attrib.get(namespace + 'permission' , None )
if permission is not None :
# permission = activity.attrib[name+'permission']
# print permission
exported_activity.__set_permission__(permission)
exported_activities.append(exported_activity)
# save result to xml file def __save_result_to_xml__():
tree = ET.ElementTree()
root = ET.Element( 'data' )
tree._setroot(root)
for activity in exported_activities:
node = ET.Element( 'activity' )
node. set ( 'name' , activity.__get_name__())
node. set ( 'packagename' , activity.__get_package_name__())
root.append(node)
if activity.__get_permission__() is not None :
node. set ( 'permission' , activity.__get_permission__())
tree.write( "output.xml" )
# the activity is or not MainActivity def __is_main_activity__(activity):
intent_filter = activity.find( "intent-filter" )
if intent_filter is not None :
action = intent_filter.find( 'action' )
category = intent_filter.find( 'category' )
if action is not None and category is not None \
and action.attrib[namespace + "name" ] = = 'android.intent.action.MAIN' \
and category.attrib[namespace + "name" ] = = 'android.intent.category.LAUNCHER' :
print 'this is main activity'
return True
return False
# main fun if __name__ = = "__main__" :
__xml_analyze__()
|
3.ActivityInfo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
class ActivityInfo:
def __init__( self , name):
self .name = name
self .package_name = ''
self .permission = ''
def __set_package_name__( self , package_name):
self .package_name = package_name
def __get_package_name__( self ):
return self .package_name
def __set_name__( self , name):
self .name = name
def __get_name__( self ):
return self .name
def __set_permission__( self , permission):
self .permission = permission
def __get_permission__( self ):
return self .permission
|
本文转自wauoen51CTO博客,原文链接: http://blog.51cto.com/7183397/1829345,如需转载请自行联系原作者