Python批量安裝卸載1000個(gè)apk的方法
都下載完了, 也驗(yàn)證了下載文件的版本號(hào)和MD5后,就要開(kāi)始批量安裝了,
然后開(kāi)始嘗試運(yùn)行打開(kāi)這個(gè)app, 做最基本的功能檢點(diǎn),最后就要考慮卸載App了。
本篇內(nèi)容主要介紹如何用Python來(lái)批量實(shí)現(xiàn)安裝apk,卸載apk。
備注:
一個(gè)手機(jī)不可能同時(shí)安裝1000個(gè)apk,需要考慮每50-100個(gè)作為一組,進(jìn)行安裝,驗(yàn)證后卸載測(cè)試。
準(zhǔn)備階段
1.adb install -d -r XXX.apk 是安裝apk的具體命令,
-d :downgrade的簡(jiǎn)稱,編碼出現(xiàn)提示說(shuō)系統(tǒng)里已經(jīng)有該app且其版本比當(dāng)前安裝的版本更高,即允許低版本的apk安裝
-r : reinstall的簡(jiǎn)稱,避免出現(xiàn)提示說(shuō)這個(gè)app已經(jīng)在系統(tǒng)里了而導(dǎo)致本次安裝失敗,即允許重裝apk
綜上:加了-d, -r就會(huì)更保險(xiǎn),確保apk最終能安裝成功。
adb shell pm list package -3 可以列出所有已安裝的第三方的App的包名。
何為第三方的App,即非系統(tǒng)自帶(built-in)的App,后續(xù)自行安裝的App都是屬于第三方App, 比如以下是自行安裝的百度地圖,酷狗音樂(lè),非系統(tǒng)App:
2.adb shell pm uninstall + App包名, 可以卸載指定的包名的App。
Python批處理腳本形式
記住批處理腳本的精髓:批量順序執(zhí)行語(yǔ)句,
以下是“安裝apk”腳本形式:
# coding=utf-8
import os
# 讀取downloaded_apk文件夾下的所有App文件,進(jìn)行批量安裝
curpath = os.getcwd()
apk_dir = os.path.join(curpath, "downloaded_apk")
apk_list = os.listdir(apk_dir)
for apk in apk_list:
print("正在安裝%s..." % apk)
apk_path = os.path.join(apk_dir, apk)
os.system("adb install -d -r %s" % apk_path)
print("所有App已經(jīng)安裝完畢!...")
os.system("pause")
以下是“卸載apk”腳本形式:
# coding=utf-8
import os
# 讀取第三方App列表并進(jìn)行卸載
s = os.popen("adb shell pm list package -3").read()
for line in s.splitlines():
if len(line) > 2:
appname = line.replace("package:", "")
print("正在卸載包名為%s的App" % appname)
os.system("adb shell pm uninstall %s" % appname)
print("所有App已經(jīng)卸載完畢!...")
os.system("pause")
Python面向過(guò)程函數(shù)形式
其實(shí)這個(gè)案例批處理形式的腳本實(shí)現(xiàn)即可,
如果硬要用面向過(guò)程函數(shù)形式,也是可以考慮簡(jiǎn)單的把代碼塊預(yù)計(jì)封裝下即可。
以下是“安裝apk”函數(shù)形式:
# coding=utf-8
import os
def install_apk():
'''讀取downloaded_apk文件夾下的所有App文件,進(jìn)行批量安裝'''
curpath = os.getcwd()
apk_dir = os.path.join(curpath, "downloaded_apk")
apk_list = os.listdir(apk_dir)
for apk in apk_list:
print("正在安裝%s..." % apk)
apk_path = os.path.join(apk_dir, apk)
os.system("adb install -d -r %s" % apk_path)
print("所有App已經(jīng)安裝完畢!...")
install_apk()
os.system("pause")
以下是“卸載apk”函數(shù)形式:
# coding=utf-8
import os
def uninstall_apk():
'''讀取第三方App列表并進(jìn)行卸載'''
s = os.popen("adb shell pm list package -3").read()
for line in s.splitlines():
if len(line) > 2:
appname = line.replace("package:", "")
print("正在卸載包名為%s的App" % appname)
os.system("adb shell pm uninstall %s" % appname)
print("所有App已經(jīng)卸載完畢!...")
uninstall_apk()
os.system("pause")
Python面向?qū)ο箢愋问?/strong>
其實(shí)這個(gè)案例批處理形式的腳本實(shí)現(xiàn)即可,
如果硬要用面向?qū)ο箢愋问?,也是可以考慮簡(jiǎn)單地用以下類來(lái)實(shí)現(xiàn)。
本次優(yōu)化,class 類名(object): 后續(xù)盡量加上object, 代表是父類,
類其最基本特征就是:繼承, 默認(rèn)如果我們不知道當(dāng)前類的父類是啥,
就直接用object, 代表是一切類的父類, 如果知道其父類啥,這類就要換成具體的父類類名了。
以下是“安裝apk”類形式:
# coding=utf-8
import os
class ApkInstaller(object):
'''用于安裝apk'''
def __init__(self):
pass
def install_apk(self):
'''讀取downloaded_apk文件夾下的所有App文件,進(jìn)行批量安裝'''
curpath = os.getcwd()
apk_dir = os.path.join(curpath, "downloaded_apk")
apk_list = os.listdir(apk_dir)
for apk in apk_list:
print("正在安裝%s..." % apk)
apk_path = os.path.join(apk_dir, apk)
os.system("adb install -d -r %s" % apk_path)
print("所有App已經(jīng)安裝完畢!...")
if __name__ == '__main__':
a_obj = ApkInstaller()
a_obj.install_apk()
os.system("pause")
以下是“卸載apk”類形式:
# coding=utf-8
import os
class ApkUnstaller(object):
'''用于卸載App'''
def __init__(self):
pass
def uninstall_apk(self):
'''讀取第三方App列表并進(jìn)行卸載'''
s = os.popen("adb shell pm list package -3").read()
for line in s.splitlines():
if len(line) > 2:
appname = line.replace("package:", "")
print("正在卸載包名為%s的App" % appname)
os.system("adb shell pm uninstall %s" % appname)
print("所有App已經(jīng)卸載完畢!...")
if __name__ == '__main__':
a_obj = ApkUnstaller()
a_obj.uninstall_apk()
os.system("pause")
運(yùn)行方式
確保Android設(shè)備通過(guò)USB線與電腦連接了,adb設(shè)備有效連接,
以上代碼的3種實(shí)現(xiàn)形式都可以直接運(yùn)行,
比如保存為install_app.py, uninstall_app.py并放在桌面,
建議python install_app.py, python uninstall_app.py運(yùn)行,當(dāng)然也可以雙擊運(yùn)行。
總結(jié)
到此這篇關(guān)于Python批量安裝卸載1000個(gè)apk的文章就介紹到這了,更多相關(guān)Python批量安裝卸載apk內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python使用xpath對(duì)解析內(nèi)容進(jìn)行數(shù)據(jù)提取
XPath 使用路徑表達(dá)式來(lái)選取HTML/ XML 文檔中的節(jié)點(diǎn)或節(jié)點(diǎn)集,節(jié)點(diǎn)是通過(guò)沿著路徑 (path) 或者步 (steps) 來(lái)選取的,本文將給大家介紹Python使用xpath對(duì)解析內(nèi)容進(jìn)行數(shù)據(jù)提取的方法,需要的朋友可以參考下2024-05-05
Python網(wǎng)絡(luò)爬蟲(chóng)實(shí)例講解
這篇文章主要為大家詳細(xì)介紹了Python網(wǎng)絡(luò)爬蟲(chóng)實(shí)例,爬蟲(chóng)的定義、主要框架等基礎(chǔ)概念,感興趣的小伙伴們可以參考一下2016-04-04
Python2.7環(huán)境Flask框架安裝簡(jiǎn)明教程【已測(cè)試】
這篇文章主要介紹了Python2.7環(huán)境Flask框架安裝方法,結(jié)合實(shí)例形式詳細(xì)分析了Python2.7環(huán)境下安裝Flask框架遇到的問(wèn)題與相關(guān)解決方法、注意事項(xiàng),并給出了一個(gè)基本的測(cè)試示例,需要的朋友可以參考下2018-07-07
keras讀取訓(xùn)練好的模型參數(shù)并把參數(shù)賦值給其它模型詳解
這篇文章主要介紹了keras讀取訓(xùn)練好的模型參數(shù)并把參數(shù)賦值給其它模型詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-06-06
python常用的各種排序算法原理與實(shí)現(xiàn)方法小結(jié)
這篇文章主要介紹了python常用的各種排序算法原理與實(shí)現(xiàn)方法,結(jié)合實(shí)例形式總結(jié)分析了冒泡排序、插入排序、選擇排序、快速排序等排序算法的相關(guān)原理與實(shí)現(xiàn)方法,需要的朋友可以參考下2023-04-04
一文了解python 3 字符串格式化 F-string 用法
本文介紹在python 3 編程中,如何進(jìn)行字符串格式化。介紹了F-string的用法,通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的工作或?qū)W習(xí)具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2020-03-03
Flask和pyecharts實(shí)現(xiàn)動(dòng)態(tài)數(shù)據(jù)可視化
這篇文章主要介紹了Flask和pyecharts實(shí)現(xiàn)動(dòng)態(tài)數(shù)據(jù)可視化,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02

