写在前面的话
这个是一篇水博客,因为我知道只要是个大二的小朋友就可以搞定,我大二就一天在搞这些事情,今天纯属吃饱了撑着,想敲键盘,等实验结果然后随便写写。我知道大家都会的,不会的小朋友随便看看然后自己回去搞定吧 ^_^
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了。
写在后面的话
哈哈哈,每天都过得非常幸福,非常开心
因为我每天都在变得越来越好,越来越努力,吼吼~~
就是那句话:
越努力越幸福
因为太专注了,所以没有什么事情能够使我分心
因为太认真所以会很静心
因为很静心,所以每天都在进步,我喜欢我现在的生活