-
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,如需转载请自行联系原作者