Appium系列分享
前言
在前面我们是通过AAPT获取包的包名和启动的activity,那么能不能通过自动化方式去获取呢。本文就带你去揭秘其中的奥秘。
方式
我们可以使用androguard来获取。安装方式如下:
pip install androguard
那么我们应该怎么使用呢
from androguard.core.bytecodes.apk import APK
先导入我们要使用的类。接着我们去获取下包名。
def get_apkname(apk): a = APK(apk, False, "r") return a.get_package()
if __name__=="__main__": apkname=get_apkname("/Users/lileilei/Downloads/com.tencent.mobileqq_8.5.0_1596.apk") print(apkname)
结果如下
我们如何获取activity呢,也很简单
def get_apk_lautc(apk): a = APK(apk, False, "r") return a.get_main_activity()
接下来,我们去获取下。
if __name__=="__main__": apkname=get_apk_lautc("/Users/lileilei/Downloads/com.tencent.mobileqq_8.5.0_1596.apk") print(apkname)
结果如下:
代码展示
最后我们去把这里的自动化脚本直接打包到我们的上次分享的如何启动app。那么我们应该如何做呢,其实很简单
from appium import webdriverfrom androguard.core.bytecodes.apk import APKdef get_apkname(apk): a = APK(apk, False, "r") return a.get_package()def get_apk_lautc(apk): a = APK(apk, False, "r") return a.get_main_activity()desired_caps = { 'platformName': 'Android', 'deviceName': '59e14df4',#adb deivces 'platformVersion': '10', #从设置中可以获取 'appPackage': get_apkname("/Users/lileilei/Downloads/com.tencent.mobileqq_8.5.0_1596.apk"),#包名 'appActivity': get_apk_lautc("/Users/lileilei/Downloads/com.tencent.mobileqq_8.5.0_1596.apk") ,# apk的launcherActivity 'skipServerInstallation':True }driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
这样,我们就可以不用通过AAPT获取了,直接通过脚本获取即可。这样就更加自动化了。后续还会分享一些其他的内容。
很多人都可能会问,这个库是怎么实现的呢,其实我们看下方法即可。对应方法如下。
里面的获取是通过AndroidManifest.xml来获取的。
我们可以看下如何获取的。可以直接搜索下这个方法。
这里面代码是通过从AndroidManifest.xml获取。