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

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介:
  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,如需转载请自行联系原作者



相关文章
|
20天前
|
安全 Linux 数据安全/隐私保护
python知识点100篇系列(15)-加密python源代码为pyd文件
【10月更文挑战第5天】为了保护Python源码不被查看,可将其编译成二进制文件(Windows下为.pyd,Linux下为.so)。以Python3.8为例,通过Cython工具,先写好Python代码并加入`# cython: language_level=3`指令,安装easycython库后,使用`easycython *.py`命令编译源文件,最终生成.pyd文件供直接导入使用。
python知识点100篇系列(15)-加密python源代码为pyd文件
|
3天前
|
开发者 Python
Python中__init__.py文件的作用
`__init__.py`文件在Python包管理中扮演着重要角色,通过标识目录为包、初始化包、控制导入行为、支持递归包结构以及定义包的命名空间,`__init__.py`文件为组织和管理Python代码提供了强大支持。理解并正确使用 `__init__.py`文件,可以帮助开发者更好地组织代码,提高代码的可维护性和可读性。
8 2
|
10天前
|
测试技术 开发者 Python
深入浅出:Python中的装饰器解析与应用###
【10月更文挑战第22天】 本文将带你走进Python装饰器的世界,揭示其背后的魔法。我们将一起探索装饰器的定义、工作原理、常见用法以及如何自定义装饰器,让你的代码更加简洁高效。无论你是Python新手还是有一定经验的开发者,相信这篇文章都能为你带来新的启发和收获。 ###
9 1
|
10天前
|
设计模式 测试技术 开发者
Python中的装饰器深度解析
【10月更文挑战第24天】在Python的世界中,装饰器是那些能够为函数或类“添彩”的魔法工具。本文将带你深入理解装饰器的概念、工作原理以及如何自定义装饰器,让你的代码更加优雅和高效。
|
19天前
|
Java Python
> python知识点100篇系列(19)-使用python下载文件的几种方式
【10月更文挑战第7天】本文介绍了使用Python下载文件的五种方法,包括使用requests、wget、线程池、urllib3和asyncio模块。每种方法适用于不同的场景,如单文件下载、多文件并发下载等,提供了丰富的选择。
|
20天前
|
XML 前端开发 数据格式
Beautiful Soup 解析html | python小知识
在数据驱动的时代,网页数据是非常宝贵的资源。很多时候我们需要从网页上提取数据,进行分析和处理。Beautiful Soup 是一个非常流行的 Python 库,可以帮助我们轻松地解析和提取网页中的数据。本文将详细介绍 Beautiful Soup 的基础知识和常用操作,帮助初学者快速入门和精通这一强大的工具。【10月更文挑战第11天】
51 2
|
19天前
|
数据安全/隐私保护 流计算 开发者
python知识点100篇系列(18)-解析m3u8文件的下载视频
【10月更文挑战第6天】m3u8是苹果公司推出的一种视频播放标准,采用UTF-8编码,主要用于记录视频的网络地址。HLS(Http Live Streaming)是苹果公司提出的一种基于HTTP的流媒体传输协议,通过m3u8索引文件按序访问ts文件,实现音视频播放。本文介绍了如何通过浏览器找到m3u8文件,解析m3u8文件获取ts文件地址,下载ts文件并解密(如有必要),最后使用ffmpeg合并ts文件为mp4文件。
|
22天前
|
Web App开发 SQL 数据库
使用 Python 解析火狐浏览器的 SQLite3 数据库
本文介绍如何使用 Python 解析火狐浏览器的 SQLite3 数据库,包括书签、历史记录和下载记录等。通过安装 Python 和 SQLite3,定位火狐数据库文件路径,编写 Python 脚本连接数据库并执行 SQL 查询,最终输出最近访问的网站历史记录。
|
23天前
|
机器学习/深度学习 算法 Python
深度解析机器学习中过拟合与欠拟合现象:理解模型偏差背后的原因及其解决方案,附带Python示例代码助你轻松掌握平衡技巧
【10月更文挑战第10天】机器学习模型旨在从数据中学习规律并预测新数据。训练过程中常遇过拟合和欠拟合问题。过拟合指模型在训练集上表现优异但泛化能力差,欠拟合则指模型未能充分学习数据规律,两者均影响模型效果。解决方法包括正则化、增加训练数据和特征选择等。示例代码展示了如何使用Python和Scikit-learn进行线性回归建模,并观察不同情况下的表现。
196 3
|
24天前
|
XML Web App开发 JavaScript
XML DOM 解析器
XML DOM 解析器