介绍
自己的写的一个程序 WSA_APKInstallTool,可以给WSA安装apk,也可以为别的安卓模拟器安装。
端口修改:修改config.txt下的port参数
注意:安装apk时会存在程序未响应(切勿关闭),安装结束即可恢复正常
代码
Github地址:https://github.com/sfjdx1144/WSA_APKInstallTool
import tkinter
from tkinter import *
import os
import ctypes
from tkinter import ttk
from tkinter.messagebox import showinfo
import windnd
from tkinter import filedialog
import time
from win32.win32api import GetSystemMetrics
import subprocess
st=subprocess.STARTUPINFO()
st.dwFlags=subprocess.STARTF_USESHOWWINDOW
st.wShowWindow=subprocess.SW_HIDE
workplace=os.path.dirname(os.path.abspath(__file__))
config=eval(open(\'./config.json\',\'r\',encoding=\'utf-8\').read())
port=config[\'port\']
global apk_file
apk_file=\'\'
global connectFlag
connectFlag=False
def connect_adb():
url=\'127.0.0.1:\'+port
cmd=workplace+\'/adb.exe connect "\'+ url+\'"\'
result = subprocess.Popen(cmd,stdout=subprocess.PIPE,startupinfo=st)
res = result.stdout.readline().decode(\'utf-8\')
r=\'\'
for line in res.splitlines():
r+=line+\'\n\'
if \'already connected to\' in r:
global connectFlag
connectFlag=True
connect_adb()
def TimeStampToTime(timestamp):
timeStruct = time.localtime(timestamp)
return time.strftime(\'%Y-%m-%d %H:%M:%S\',timeStruct)
def get_FileSize(filePath):
fsize = os.path.getsize(filePath)
fsize = fsize/float(1024*1024)
return str(round(fsize,2))
def get_FileCreateTime(filePath):
t = os.path.getctime(filePath)
return TimeStampToTime(t)
root = tkinter.Tk()
ctypes.windll.shcore.SetProcessDpiAwareness(1)
ScaleFactor=ctypes.windll.shcore.GetScaleFactorForDevice(0)
root.tk.call(\'tk\', \'scaling\', ScaleFactor/72)
root.title(\'apkInstallTool\')
root.iconbitmap(\'icon.ico\')
T1 = Text(root,relief=\'solid\',bd=1, font=(\'Arial\', 10))
T1.place(relx=0.05,rely=0.05,relwidth=0.9,relheight=0.72)
if connectFlag:
T1.insert(1.0,\'The APK file can be dragged here.\')
else:
T1.insert(1.0,\'Connecting adb failed, please check whether WSA is running, and restart the app.\')
T1.config(state=DISABLED)
screen_width=GetSystemMetrics(0)
screen_height=GetSystemMetrics(1)
form_width=int(screen_width/4)
form_height=int(screen_height/4)
root.config(bg=\'white\')
root.geometry(\'%dx%d+%d+%d\' % (form_width, form_height, (screen_width-form_width)/2,(0.95*screen_height-form_height)/2))
s = ttk.Style()
s.configure(\'TButton\', font=(\'Arial\', 10),activebackground=\'black\')
def draf_file(files):
T1.config(state=NORMAL)
T1.delete(1.0,tkinter.END)
global apk_file
apk_file=\'\'
file=files[0].decode()
apk_file=file
if \'apk\' != file.split(\'.\')[-1]:
showinfo(\'Info\',\'Please drag "Android application package(.apk)" file!\')
else:
FileSize=get_FileSize(file)
FileCreateTime=get_FileCreateTime(file)
T1.insert(1.0,\'File Path: \'+file+\'\n\nFile Size: \'+FileSize+\'Mb\n\nCreated Time: \'+FileCreateTime)
T1.config(state=DISABLED)
def get_file():
global apk_file
apk_file=\'\'
file = filedialog.askopenfilename(title=u\'Choose File\', filetypes=[(\'Android application package\', \'*.apk\')])
apk_file=file
if file:
T1.config(state=NORMAL)
T1.delete(1.0,tkinter.END)
FileSize=get_FileSize(file)
FileCreateTime=get_FileCreateTime(file)
T1.insert(1.0,\'File Path: \'+file+\'\n\nFile Size: \'+FileSize+\'Mb\n\nCreated Time: \'+FileCreateTime)
T1.config(state=DISABLED)
def installapk():
T1.config(state=NORMAL)
global apk_file
if apk_file:
cmd=workplace+\'/adb.exe install "\'+ apk_file+\'"\'
result = subprocess.Popen(cmd,stdout=subprocess.PIPE,startupinfo=st)
res = result.stdout.readline().decode(\'utf-8\')
r=\'\'
for line in res.splitlines():
r+=line+\'\n\'
r+=\'\nCurrent File: \'+ apk_file
T1.delete(1.0,tkinter.END)
T1.insert(1.0,r)
else:
showinfo(\'Info\',\'No file selected!\')
T1.config(state=DISABLED)
def connect_adb_button():
T1.config(state=NORMAL)
url=\'127.0.0.1:\'+port
cmd=workplace+\'/adb.exe connect "\'+ url+\'"\'
result = subprocess.Popen(cmd,stdout=subprocess.PIPE,startupinfo=st)
res = result.stdout.readline().decode(\'utf-8\')
r=\'\'
for line in res.splitlines():
r+=line+\'\n\'
if \'already connected to\' not in r:
showinfo(\'Info\',\'Connecting adb failed, please check whether WSA is running.\')
else:
T1.delete(1.0,tkinter.END)
showinfo(\'Info\',\'Success!\')
T1.insert(1.0,\'The APK file can be dragged here.\')
T1.config(state=DISABLED)
B0 = ttk.Button(root,text=\'Connect\',command=connect_adb_button)
B0.place(relx=0.1,rely=0.82,relwidth=0.2,relheight=0.1)
B1 = ttk.Button(root,text=\'Open\',command=get_file)
B1.place(relx=0.4,rely=0.82,relwidth=0.2,relheight=0.1)
B2 = ttk.Button(root,text=\'Install\',command=installapk)
B2.place(relx=0.7,rely=0.82,relwidth=0.2,relheight=0.1)
windnd.hook_dropfiles(root,func=draf_file)
root.mainloop()