前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python——使用ElementTre

Python——使用ElementTre

作者头像
py3study
发布2020-01-09 14:23:30
4590
发布2020-01-09 14:23:30
举报
文章被收录于专栏:python3python3
  1. XML内容如下:
代码语言:javascript
复制
<?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文件中

代码语言:javascript
复制
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?

代码语言:javascript
复制
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
本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-08-26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com