您的位置:首页 > 编程语言 > Python开发

用Python解析AndroidManifest.xml文件找MainActivity

2016-10-17 23:46 471 查看

写在前面的话

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

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了。

写在后面的话

哈哈哈,每天都过得非常幸福,非常开心

因为我每天都在变得越来越好,越来越努力,吼吼~~

就是那句话:

越努力越幸福

因为太专注了,所以没有什么事情能够使我分心

因为太认真所以会很静心

因为很静心,所以每天都在进步,我喜欢我现在的生活

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: