MonkeyRunner 之如何获取APP的Package Name和Activity Name
MonkeyRunner 之如何获取APP的Package Name和Activity Name
最近尝试学习使用monkeyrunner进行Android自动化测试,一开始均是使用点击屏幕坐标的方法来运行应用程序,可是点击屏幕坐标的方法比较麻烦,且通用性差。通过度娘我知道可以使用device.startActivity("package name /activity")这个函数来直接启用安装在手机中的app,可是如何获得activity却成了关键,现将获取activity的方法总结如下:
方法1:
1.先把apk包安装到手机上,
2.在android手机或者模拟器上配置Python环境
1)下载和安装 Scripting Layer for Android (SL4A)
2)下载和安装 Python for android
3)打开Python for Android应用,在应用的最上方会有一个Install的按钮,点击该按钮,就会自动下载Python相关的文件并解压和安装,这个过程结束后,你的android手机上的Python开发环境就配置好了!
3.打开SL4A应用,会进入Python示例代码列表,基本上是对主要API的演示,部分示例可能由于偏老,运行时会提示方法过期或者运行异常的问题,这个至少修改少许代码即可,有机会的话,我会在后续课程中介绍这是示例以及修正的方法。
点Menu键,然后点击Add,选择Python2.6.2,就会新建一个Python脚本文件,将文件的名字命名为:HelloPythonInAndroid.py
点击屏幕进入脚本编辑区,开始输入如下内容:
import android
import pprint
droid=android.Android()
apps=droid.getLaunchableApplications()
pprint.pprint(apps.result)
print '-------------------------------------'
pacs=droid.getRunningPackages()
pprint.pprint(pacs.result)
4. 点击Menu,选择Save&Run,恭喜你,运行上面的代码,就可以获得应用程序的startActivity与package name
5.,通过下面的程序,测试apk
import sys
from com.android.monkeyrunner import MonkeyRunner,MonkeyDevice
device=MonkeyRunner.waitForConnection()
device.startActivity(component='package name/startActivity name')
方法2:
使用re-sign.jar工具,下载地址http://troido.de/downloads/category/1
1) 在cmd下使用java –jar D:\re-sign.jar 运行。
2) 把APK包拖进去,信息就出来了
方法3:
通过apktool获取apk package name(包名)以及activity name
1)下载apktool: http://code.google.com/p/android-apktool/
2)将解压的三个文件(apktool.jar, aapt.exe, apktool.bat) 拷贝到c: windows
现在,环境搭建完成。
3)cmd进入命令终端,执行 aapt dump badging your.apk
就会看到对应的Package名,Activity名。
方法4:
查看AndroidManifest.xml
1.使用apktool反编译app:apktool.bat d es3.apk E:\apk\es
2.打开AndroidManifest.xml
manifest节点的package属性值是应用的包名:<manifest package=”com.estrongs.android.pop”>
查找android.intent.action.MAIN和android.intent.category.LAUNCHER对应的activity,该activity对应的android:name属性既是入口activity名称,如下:
<activity android:theme=”@*android tyle/Theme.NoTitleBar” android:label=”@string/app_name” android:name=”com.estrongs.android.pop.view.FileExplorerActivity”>
<intent-filter>
<action android:name=”android.intent.action.MAIN” />
<category android:name=”android.intent.category.LAUNCHER” />
</intent-filter>
</activity>
android.intent.action.MAIN决定应用程序最先启动的Activity
android.intent.category.LAUNCHER决定应用程序是否显示在程序列表里
方法5:
打开手机log,然后运行目标程序,然后分析log,在log中也可以找到Activity名称。