用Python解析AndroidManifest.xml文件找MainActivity

写在前面的话

这个是一篇水博客,因为我知道只要是个大二的小朋友就可以搞定,我大二就一天在搞这些事情,今天纯属吃饱了撑着,想敲键盘,等实验结果然后随便写写。我知道大家都会的,不会的小朋友随便看看然后自己回去搞定吧 ^_^


1.基本概念

什么是MainActivity,就是一个Android的APP 如果它有Activity的话,那么最开始启动的那个Activity就是MainActivity。

每一个组件,包括Activity都必须要在AndroidManifest.xml文件中申明。

如果是MainActivity的话,那么就会有下面这两个特征:
我们随便找了两个APP的AndroidManifest.xml文件看一看

这里写图片描述

这里写图片描述

<intent-filter>
  <action android:name="android.intent.action.MAIN"/>
  <category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>

在MainActivity下面都会声明一个有intent启动这个Activity的通知,这个intent传递的消息是由我们的系统发出的。这两个缺一不可,第一个action 说明这是第一个启动的Activity的,
没有了 category android:name=”android.intent.category.LAUNCHER”这个选项就找不到启动的界面。

所以我们要在一堆Activity里面找谁是MainActivity,只需要遍历一下XML文件,然后找到这两个特征我们就可以知道谁是MainActivity。

Python中已经提供很多强大的轮子(模块,库)来帮我们解析XML文件,现在我们就用这些轮子找到我们的MainActivity。

import xml.dom.minidom


for act in actList:
    if act.toxml().find("android.intent.action.MAIN")>0 \
and act.toxml().find("android.intent.category.LAUNCHER")>0:
            print act.getAttribute("android:name")
            break

找到就会返回一个大于0的数,否则就是-1

这里写图片描述

搞定


2. 代码区

思路差不多讲完了,现在我们开始撸代码了。

#!/usr/bin/env python
# coding=utf-8
# date      :  2016-10-12
# author    :  Chicho
# function  :  1.parse the AndroidManifest.xml file
#              2.get the main activity from the manifest file

# 我们用dom来解析xml文件,dom是把这个xml文件按照树的形式保存在内存中
# 加载的时候真个加载进去,所以占内存,效率不高
#但是我喜欢用dom因为简单容易理解
from xml.dom.minidom import parse
import xml.dom.minidom

import os


MANIFST="AndroidManifest.xml"


apkPath="/home/chicho/tools/apktool/apk/" 


manifestFilePath = os.path.join(apkPath,MANIFST)
#这个存放的是AndroidManifest.xml文件



packageName=""

#加载真个文件到内存
dom=xml.dom.minidom.parse(manifestFilePath)

#得到根元素<manifest> Element
# <tag attribut><-这样形式的是一个Element
root=dom.documentElement

#得到包名
package=root.getAttribute('package')

#得到所有的Activity,存放在一个List中
activityList = root.getElementsByTagName('activity')

MainActivity=""

actCnt=len(activityList) # the number of activity


# find the MainActivity and let the MainActivity become the first element in the list
for activity in activityList:

    if activity.toxml().find("android.intent.action.MAIN")>0 \
       and activity.toxml().find("android.intent.category.LAUNCHER")>0:
        MainActivity=activity.getAttribute('android:name')
        print MainActivity 

这样我们就可以得到我们的MainActivity了。










写在后面的话
哈哈哈,每天都过得非常幸福,非常开心
因为我每天都在变得越来越好,越来越努力,吼吼~~
就是那句话:
越努力越幸福

因为太专注了,所以没有什么事情能够使我分心
因为太认真所以会很静心
因为很静心,所以每天都在进步,我喜欢我现在的生活

这里写图片描述


版权声明:本文为Grace_0642原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。