當時正在研究如何uiautomator的源碼,看的頭疼。和朋友聊天,朋友說monkey不想敲命令,反正也無聊,就花了2個小時寫了個GUI。python
最終呈現的效果圖:shell
其實是藉助adb shell monkey的命令的拼接,須要的環境和依賴包安卓SDK自帶的adb,python3.6和pyqt5.這裏咱們先封裝一個monkey函數。app
#-*-coding:utf-8-*- ''' @Author:zhang yiqian ''' import os def monkey(**kwargs): command="adb shell monkey" try: command+=" -p "+kwargs["packageName"] except: print ("沒有指定包") command += " -v " try: command+=kwargs["count"] except: print("沒有指定次數") try: command += " -s " + kwargs["seed"] except: print ("沒有指定種子數") try: command += " --throttle " + kwargs["throttle"] if kwargs["random"]==True: command += " --randomize-throttle" else: pass except: print ("沒有指定時間間隔") #print (command) report=os.popen(command).read() return report
而後咱們去用pyqt5製做一個GUI,代碼以下dom
# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'monkey.ui' # # Created by: PyQt5 UI code generator 5.9.2 # # WARNING! All changes made in this file will be lost! from PyQt5 import QtCore, QtGui, QtWidgets from PyQt5 import QtCore, QtGui, QtWidgets from PyQt5.QtGui import * from PyQt5.QtCore import * from PyQt5.QtWidgets import * import sys,monkeyadb class Ui_Form(object): def setupUi(self, Form): Form.setObjectName("Form") Form.resize(346, 484) self.pushButton = QtWidgets.QPushButton(Form) self.pushButton.setGeometry(QtCore.QRect(260, 50, 71, 81)) self.pushButton.setObjectName("pushButton") self.lineEdit = QtWidgets.QLineEdit(Form) self.lineEdit.setGeometry(QtCore.QRect(90, 50, 171, 21)) self.lineEdit.setText("") self.lineEdit.setObjectName("lineEdit") self.lineEdit_2 = QtWidgets.QLineEdit(Form) self.lineEdit_2.setGeometry(QtCore.QRect(90, 90, 171, 21)) self.lineEdit_2.setObjectName("lineEdit_2") self.lineEdit_3 = QtWidgets.QLineEdit(Form) self.lineEdit_3.setGeometry(QtCore.QRect(90, 70, 171, 21)) self.lineEdit_3.setObjectName("lineEdit_3") self.lineEdit_4 = QtWidgets.QLineEdit(Form) self.lineEdit_4.setGeometry(QtCore.QRect(90, 110, 171, 21)) self.lineEdit_4.setObjectName("lineEdit_4") self.lineEdit_5 = QtWidgets.QLineEdit(Form) self.lineEdit_5.setGeometry(QtCore.QRect(30, 50, 61, 21)) self.lineEdit_5.setObjectName("lineEdit_5") self.lineEdit_6 = QtWidgets.QLineEdit(Form) self.lineEdit_6.setGeometry(QtCore.QRect(30, 70, 61, 21)) self.lineEdit_6.setObjectName("lineEdit_6") self.lineEdit_7 = QtWidgets.QLineEdit(Form) self.lineEdit_7.setGeometry(QtCore.QRect(30, 90, 61, 21)) self.lineEdit_7.setObjectName("lineEdit_7") self.lineEdit_8 = QtWidgets.QLineEdit(Form) self.lineEdit_8.setGeometry(QtCore.QRect(30, 110, 61, 21)) self.lineEdit_8.setObjectName("lineEdit_8") self.checkBox = QtWidgets.QCheckBox(Form) self.checkBox.setGeometry(QtCore.QRect(30, 130, 141, 31)) self.checkBox.setObjectName("checkBox") self.textBrowser = QtWidgets.QTextBrowser(Form) self.textBrowser.setGeometry(QtCore.QRect(35, 161, 291, 301)) self.textBrowser.setObjectName("textBrowser") self.retranslateUi(Form) self.pushButton.clicked.connect(self.startmonkey) QtCore.QMetaObject.connectSlotsByName(Form) #編寫本身的槽函數 def startmonkey(self): try: packageName=self.lineEdit.text() count=self.lineEdit_3.text() seed=self.lineEdit_2.text() throttle =self.lineEdit_4.text() random =self.checkBox.isChecked() report=monkeyadb.monkey(packageName=packageName,count=count,seed=seed,throttle=throttle,random=random) self.textBrowser.setText(report) except: print ("error") def retranslateUi(self, Form): _translate = QtCore.QCoreApplication.translate Form.setWindowTitle(_translate("Form", "Form")) self.pushButton.setText(_translate("Form", "執行")) self.lineEdit_5.setText(_translate("Form", "包名")) self.lineEdit_6.setText(_translate("Form", "事件次數")) self.lineEdit_7.setText(_translate("Form", "種子數")) self.lineEdit_8.setText(_translate("Form", "間隔時間")) self.checkBox.setText(_translate("Form", "間隔時間是否隨機")) if __name__ == "__main__": app = QApplication(sys.argv) ex = Ui_Form() w = QMainWindow() ex.setupUi(w) w.show() sys.exit(app.exec_())
編寫槽函數,經過信號和槽創建鏈接:函數
self.pushButton.clicked.connect(self.startmonkey) #編寫本身的槽函數 def startmonkey(self): try: packageName=self.lineEdit.text() count=self.lineEdit_3.text() seed=self.lineEdit_2.text() throttle =self.lineEdit_4.text() random =self.checkBox.isChecked() report=monkeyadb.monkey(packageName=packageName,count=count,seed=seed,throttle=throttle,random=random) self.textBrowser.setText(report) except: print ("error")
這樣咱們的monkey工具就完成了,而後由於朋友是妹子,不會裝python環境和pyqt5,我就把python文件打包成exe文件,這樣就只須要安卓SDK了。工具
一、使用pyinstallerui
step1:安裝pyinstaller,在cmd窗口使用pip install pyinstaller安裝this
step2:cd 到你的文件目錄cd E:\pj\monkeyspa
step3:運行pyinstaller -F monkey.py,注意-F是大寫code
step4:看結果,結果在新生成的文件夾dist下就有monkey.exe
補充一下後來發現的問題,運行pyinstaller -F monkey.py後的exe打開時老是先有一個cmd窗口出現,要去掉的話應該用運行pyinstaller -F -w monkey.py