2017-02-21 51 views
0

我是Python新手,所以這可能是一個太簡單的問題。我正在嘗試解析AndroidManifest.xml文件以查找主要活動。我們如何使用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

「有以下意圖活動的主要活動」是不正確,可以有幾個類別爲啓動 –

+0

@NickCardoso謝謝!它應該是''? – funkadelic

+0

是 - 如果你需要它 - [其他幫助意圖](https://developer.android.com/guide/components/intents-filters.html)(對不起,我不知道任何python實際回答你) –

回答

0

這有助於查找主要活動。我如何添加到類而不是使用打印?

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') 
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') 
相關問題