我是Python新手,所以这可能是一个太简单的问题。我正在尝试解析AndroidManifest.xml文件以找到主要活动。
XML文件:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.heartrateapp">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".MonitorActivity" />
<activity android:name=".SubmitActivity" />
</application>
</manifest>
具有以下意图的活动是主要活动。
<action android:name="android.intent.action.MAIN" />
Python解析器:
from xml.dom.minidom import parseString
data = ''
with open('AndroidManifest.xml','r') as f:
data = f.read()
dom = parseString(data)
activities = dom.getElementsByTagName('activity')
perms = dom.getElementsByTagName('uses-permission')
for activity in activities:
print activity.getAttribute('android:name')
print activity.getElementsByTagName('intent-filter')
for perm in perms:
print perm.getAttribute('android:name')
如何找到主要活动?现在我用print来检查。我想创建一个对象来存储主要活动,意图,服务,权限。有人可以帮帮我吗?
答案 0 :(得分:1)
这适用于寻找主要活动。如何添加到类而不是使用print?
for activity in activities:
print activity.getAttribute('android:name')
intents = activity.getElementsByTagName('intent-filter')
for intent in intents:
actions = intent.getElementsByTagName('action')
for action in actions:
if action.getAttribute('android:name') == 'android.intent.action.MAIN':
print action.getAttribute('android:name')
答案 1 :(得分:0)
如上所述,您正在寻找包含<action android:name="android.intent.action.MAIN" />
意图过滤器的活动。
因为在清单中应该只有其中一个,你可以在找到第一个时停止。
因此,根据您的示例和我对其他语言的了解,我希望您的代码看起来像
from xml.dom.minidom import parseString
data = ''
with open('AndroidManifest.xml','r') as f:
data = f.read()
dom = parseString(data)
activities = dom.getElementsByTagName('activity')
perms = dom.getElementsByTagName('uses-permission')
mainactivity = None #or whatever python null is
for activity in activities:
filters = activity.getElementsByTagName('intent-filter')
for intent in filters:
if intent.getAttribute('android:name') == "android.intent.action.MAIN"
mainactivity = activity
break #end intent loop
if mainactivity
break #end activity loop
print mainactivity.getAttribute('android:name')