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



相关文章
|
9天前
|
XML JSON 数据处理
超越JSON:Python结构化数据处理模块全解析
本文深入解析Python中12个核心数据处理模块,涵盖csv、pandas、pickle、shelve、struct、configparser、xml、numpy、array、sqlite3和msgpack,覆盖表格处理、序列化、配置管理、科学计算等六大场景,结合真实案例与决策树,助你高效应对各类数据挑战。(238字)
66 0
|
21天前
|
数据采集 存储 JavaScript
解析Python爬虫中的Cookies和Session管理
Cookies与Session是Python爬虫中实现状态保持的核心。Cookies由服务器发送、客户端存储,用于标识用户;Session则通过唯一ID在服务端记录会话信息。二者协同实现登录模拟与数据持久化。
|
30天前
|
监控 机器人 编译器
如何将python代码打包成exe文件---PyInstaller打包之神
PyInstaller可将Python程序打包为独立可执行文件,无需用户安装Python环境。它自动分析代码依赖,整合解释器、库及资源,支持一键生成exe,方便分发。使用pip安装后,通过简单命令即可完成打包,适合各类项目部署。
|
2月前
|
JSON 缓存 开发者
淘宝商品详情接口(item_get)企业级全解析:参数配置、签名机制与 Python 代码实战
本文详解淘宝开放平台taobao.item_get接口对接全流程,涵盖参数配置、MD5签名生成、Python企业级代码实现及高频问题排查,提供可落地的实战方案,助你高效稳定获取商品数据。
|
2月前
|
存储 大数据 Unix
Python生成器 vs 迭代器:从内存到代码的深度解析
在Python中,处理大数据或无限序列时,迭代器与生成器可避免内存溢出。迭代器通过`__iter__`和`__next__`手动实现,控制灵活;生成器用`yield`自动实现,代码简洁、内存高效。生成器适合大文件读取、惰性计算等场景,是性能优化的关键工具。
188 2
|
2月前
|
机器学习/深度学习 文字识别 Java
Python实现PDF图片OCR识别:从原理到实战的全流程解析
本文详解2025年Python实现扫描PDF文本提取的四大OCR方案(Tesseract、EasyOCR、PaddleOCR、OCRmyPDF),涵盖环境配置、图像预处理、核心识别与性能优化,结合财务票据、古籍数字化等实战场景,助力高效构建自动化文档处理系统。
420 0
|
2月前
|
机器学习/深度学习 JSON Java
Java调用Python的5种实用方案:从简单到进阶的全场景解析
在机器学习与大数据融合背景下,Java与Python协同开发成为企业常见需求。本文通过真实案例解析5种主流调用方案,涵盖脚本调用到微服务架构,助力开发者根据业务场景选择最优方案,提升开发效率与系统性能。
473 0
机器学习/深度学习 算法 自动驾驶
294 0
|
2月前
|
算法 安全 数据安全/隐私保护
Python随机数函数全解析:5个核心工具的实战指南
Python的random模块不仅包含基础的随机数生成函数,还提供了如randint()、choice()、shuffle()和sample()等实用工具,适用于游戏开发、密码学、统计模拟等多个领域。本文深入解析这些函数的用法、底层原理及最佳实践,帮助开发者高效利用随机数,提升代码质量与安全性。
316 0
|
2月前
|
数据可视化 Linux iOS开发
Python脚本转EXE文件实战指南:从原理到操作全解析
本教程详解如何将Python脚本打包为EXE文件,涵盖PyInstaller、auto-py-to-exe和cx_Freeze三种工具,包含实战案例与常见问题解决方案,助你轻松发布独立运行的Python程序。
698 2

热门文章

最新文章

推荐镜像

更多
  • DNS
  • 下一篇
    开通oss服务