from
ActivityInfo
import
ActivityInfo
try
:
import
xml.etree.cElementTree as ET
except
ImportError:
import
xml.etree.ElementTree as ET
import
sys
namespace
=
'{http://schemas.android.com/apk/res/android}'
exported_activities
=
[]
def
__xml_analyze__():
tree
=
ET.parse(r
"./app/AndroidManifest.xml"
)
root
=
tree.getroot()
packagename
=
root.attrib[
"package"
]
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__()
__save_result_to_xml__()
def
__get_exported_activities__(application, packagename):
for
activity
in
application:
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
:
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
:
exported_activity.__set_permission__(permission)
exported_activities.append(exported_activity)
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"
)
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
if
__name__
=
=
"__main__"
:
__xml_analyze__()