我们如何使用python在AndroidManifest.xml中找到主要活动?

时间:2017-02-21 03:43:12

标签: android python xml-parsing

我是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来检查。我想创建一个对象来存储主要活动,意图,服务,权限。有人可以帮帮我吗?

2 个答案:

答案 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')