Python——使用ElementTree解析AndroidManifest.xml文件

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



相关文章
|
3天前
|
Python
Python代码扫描目录下的文件并获取路径
【5月更文挑战第12天】Python代码扫描目录下的文件并获取路径
20 1
|
3天前
|
存储 JSON 数据库
Python中列表数据的保存与读取:以txt文件为例
Python中列表数据的保存与读取:以txt文件为例
16 2
|
3天前
|
存储 NoSQL MongoDB
MongoDB数据库转换为表格文件的Python实现
MongoDB数据库转换为表格文件的Python实现
32 0
|
3天前
|
Shell Python
Python Stock guess_indicators_daily_job.py文件的调整
Python Stock guess_indicators_daily_job.py文件的调整
16 1
|
3天前
|
XML 前端开发 数据格式
BeautifulSoup 是一个 Python 库,用于从 HTML 和 XML 文件中提取数据
【5月更文挑战第10天】BeautifulSoup 是 Python 的一个库,用于解析 HTML 和 XML 文件,即使在格式不规范的情况下也能有效工作。通过创建 BeautifulSoup 对象并使用方法如 find_all 和 get,可以方便地提取和查找文档中的信息。以下是一段示例代码,展示如何安装库、解析 HTML 数据以及打印段落、链接和特定类名的元素。BeautifulSoup 还支持更复杂的查询和文档修改功能。
22 1
|
1天前
|
Python
Python办公自动化|自动整理文件,一键完成!
Python办公自动化|自动整理文件,一键完成!
|
2天前
|
XML Web App开发 JavaScript
XML DOM 解析器
XML解析器将XML转换为JavaScript可操作的DOM对象,使得浏览器(大多内置此解析器)能读取和处理XML。通过XMLHttpRequest对象,可以加载XML文档,如示例所示,创建HTTP请求获取&quot;books.xml&quot;,然后将响应转化为DOM对象以进行访问和操作。
|
2天前
|
Python
Python知识点——文件和数据格式化
Python知识点——文件和数据格式化
6 0
|
3天前
|
存储 JSON 安全
Python中的文件操作与文件IO操作
【5月更文挑战第14天】在Python中,文件操作是常见任务,包括读取、写入和处理文件内容。`open()`函数是核心,接受文件路径和模式(如&#39;r&#39;、&#39;w&#39;、&#39;a&#39;、&#39;b&#39;和&#39;+&#39;)参数。本文详细讨论了文件操作基础,如读写模式,以及文件IO操作,如读取、写入和移动指针。异常处理是关键,使用`try-except`捕获`FileNotFoundError`和`PermissionError`等异常。进阶技巧涉及`with`语句、`readline()`、`os`和`shutil`模块。数据序列化与反序列化方面,介绍了
16 0
|
3天前
|
XML Web App开发 JavaScript
XML DOM 解析器
浏览器内置XML解析器,用于读取和操作XML。它将XML转化为XML DOM,允许JavaScript访问、修改节点。以下JS代码示例加载&quot;books.xml&quot;到DOM对象:检查浏览器支持,创建XMLHttpRequest或ActiveXObject,打开GET请求,发送并获取响应,将响应转换为XML DOM。

推荐镜像

更多