forked from Autotest/uengine-runner
1.4.3
This commit is contained in:
parent
8057f2a596
commit
d105f85510
13
README.md
13
README.md
|
@ -1,12 +1,21 @@
|
||||||
# uengine 运行器 1.4.0
|
# uengine 运行器 1.4.3
|
||||||
|
|
||||||
### 介绍
|
### 介绍
|
||||||
新版本Deepin/UOS发布后,可以在应用商店安装部分官方已适配的安卓应用,对爱好者来说,不能自己安装APK软件包始终差点意思,本程序可以为Deepin/UOS上的UEngine安卓运行环境安装自定义APK软件包,并能发送安装的APK包启动菜单到桌面或系统菜单。
|
新版本Deepin/UOS发布后,可以在应用商店安装部分官方已适配的安卓应用,对爱好者来说,不能自己安装APK软件包始终差点意思,本程序可以为Deepin/UOS上的UEngine安卓运行环境安装自定义APK软件包,并能发送安装的APK包启动菜单到桌面或系统菜单。
|
||||||
![1.4.2](https://storage.deepin.org/thread/202108301750554993_截图_选择区域_20210830134502.png)
|
![1.4.3](https://storage.deepin.org/thread/202109111635389828_截图_选择区域_20210911163449.png)
|
||||||
(测试平台:UOS 家庭版,deepin 20.2.2,UOS 专业版 1040)
|
(测试平台:UOS 家庭版,deepin 20.2.2,UOS 专业版 1040)
|
||||||
(自己美术功底太差,图标直接用 anbox 的了)
|
(自己美术功底太差,图标直接用 anbox 的了)
|
||||||
|
|
||||||
### 更新内容
|
### 更新内容
|
||||||
|
#### V1.4.3(2021-09-11,开学第一版):
|
||||||
|
此版本在受伤宅家期间写的![表情](https://bbs.deepin.org/assets/image/raccoon/[sad].gif)
|
||||||
|
**※1、支持打包器打包的包名带前缀“uengine-dc”**
|
||||||
|
**※2、修复了两种情况可能导致程序卡住/出错无法继续运行的情况(配置文件夹不齐全和获取版本信息卡住两种情况)**
|
||||||
|
**※3、修改了 UEngine 打包器打包的应用包名可能有大写的情况**
|
||||||
|
4、支持一键使用 Scrcpy 连接 UEngine(①先安装 adb 破解补丁;②请确保是使用snap安装的 Scrcpy【目前只支持 snap 安装的 Scrcpy 进行连接】)
|
||||||
|
5、支持右键打包 apk
|
||||||
|
![1.4.3](https://storage.deepin.org/thread/202109111635389828_截图_选择区域_20210911163449.png)
|
||||||
|
|
||||||
#### V1.4.2(2021-08-30,快开学了):
|
#### V1.4.2(2021-08-30,快开学了):
|
||||||
**※1、添加adb破解补丁(用于可以让adb连接UEngine)并支持adb的部分操作;**
|
**※1、添加adb破解补丁(用于可以让adb连接UEngine)并支持adb的部分操作;**
|
||||||
2、菜单栏的项目添加以及外观优化;
|
2、菜单栏的项目添加以及外观优化;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
Package: spark-uengine-runner
|
Package: spark-uengine-runner
|
||||||
Version: 1.4.2
|
Version: 1.4.3
|
||||||
Maintainer: gfdgd xi <3025613752@qq.com>, actionchen<917981399@qq.com>
|
Maintainer: gfdgd xi <3025613752@qq.com>, actionchen<917981399@qq.com>
|
||||||
Homepage: [https://gitee.com/gfdgd-xi/uengine-runner, https://github.com/gfdgd-xi/uengine-runner]
|
Homepage: [https://gitee.com/gfdgd-xi/uengine-runner, https://github.com/gfdgd-xi/uengine-runner]
|
||||||
Architecture: all
|
Architecture: all
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
"https://gitee.com/gfdgd-xi/uengine-runner",
|
"https://gitee.com/gfdgd-xi/uengine-runner",
|
||||||
"https://github.com/gfdgd-xi/uengine-runner"
|
"https://github.com/gfdgd-xi/uengine-runner"
|
||||||
],
|
],
|
||||||
"Version": "1.4.2",
|
"Version": "1.4.3",
|
||||||
"System": "Linux(deepin/UOS)",
|
"System": "Linux(deepin/UOS)",
|
||||||
"Tips": [
|
"Tips": [
|
||||||
"更多可见:https://gitee.com/gfdgd-xi/uengine-runner/wikis",
|
"更多可见:https://gitee.com/gfdgd-xi/uengine-runner/wikis",
|
||||||
|
@ -26,6 +26,13 @@
|
||||||
"4、如果想要使用adb连接UEngine或其他手机,请使用 1.2.0 以前的版本。(如需连接UEngine请安装adb补丁)"
|
"4、如果想要使用adb连接UEngine或其他手机,请使用 1.2.0 以前的版本。(如需连接UEngine请安装adb补丁)"
|
||||||
],
|
],
|
||||||
"Update": [
|
"Update": [
|
||||||
|
"V1.4.3:",
|
||||||
|
"※1、支持打包器打包的包名带前缀“uengine-dc”",
|
||||||
|
"※2、修复了两种情况可能导致程序卡住/出错无法继续运行的情况(配置文件夹不齐全和获取版本信息卡住两种情况)",
|
||||||
|
"※3、修改了 UEngine 打包器打包的应用包名可能有大写的情况",
|
||||||
|
"4、支持一键使用 Scrcpy 连接 UEngine(①先安装 adb 破解补丁;②请确保是使用snap安装的 Scrcpy【目前只支持 snap 安装的 Scrcpy 进行连接】)",
|
||||||
|
"5、支持右键打包 apk",
|
||||||
|
"",
|
||||||
"V1.4.2:",
|
"V1.4.2:",
|
||||||
"※1、添加adb破解补丁(用于可以让adb连接UEngine)并支持adb的部分操作;",
|
"※1、添加adb破解补丁(用于可以让adb连接UEngine)并支持adb的部分操作;",
|
||||||
"2、菜单栏的项目添加以及外观优化;",
|
"2、菜单栏的项目添加以及外观优化;",
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"Package": "spark-uengine-runner",
|
"Package": "spark-uengine-runner",
|
||||||
"Update": true,
|
"Update": true,
|
||||||
"Version": "1.4.2",
|
"Version": "1.4.3",
|
||||||
"Url": "https://gfdgd-xi.github.io/update-program/data/UpdateInformation.json"
|
"Url": "https://gfdgd-xi.github.io/update-program/data/UpdateInformation.json"
|
||||||
|
|
||||||
}
|
}
|
|
@ -187,6 +187,7 @@ def DisabledAndEnbled(choose):
|
||||||
userChoose = {True: tk.DISABLED, False: tk.NORMAL}
|
userChoose = {True: tk.DISABLED, False: tk.NORMAL}
|
||||||
a = userChoose[choose]
|
a = userChoose[choose]
|
||||||
combobox1.configure(state=a)
|
combobox1.configure(state=a)
|
||||||
|
check.configure(state=a)
|
||||||
button2.configure(state=a)
|
button2.configure(state=a)
|
||||||
button3.configure(state=a)
|
button3.configure(state=a)
|
||||||
|
|
||||||
|
@ -256,6 +257,7 @@ def GetApkActivityName(apkFilePath):
|
||||||
return line
|
return line
|
||||||
|
|
||||||
def GetApkPackageName(apkFilePath):
|
def GetApkPackageName(apkFilePath):
|
||||||
|
# 提示:此函数有被为此程序适配而调整,如果需要最原始(无调整的)请使用主程序(此为附属组件)里的函数
|
||||||
info = GetApkInformation(apkFilePath)
|
info = GetApkInformation(apkFilePath)
|
||||||
for line in info.split('\n'):
|
for line in info.split('\n'):
|
||||||
if "package:" in line:
|
if "package:" in line:
|
||||||
|
@ -264,7 +266,10 @@ def GetApkPackageName(apkFilePath):
|
||||||
line = line.replace("name=", "")
|
line = line.replace("name=", "")
|
||||||
line = line.replace("'", "")
|
line = line.replace("'", "")
|
||||||
line = line.replace(" ", "")
|
line = line.replace(" ", "")
|
||||||
return line
|
# 此较为特殊,因为需要判断用户是否要添加前缀
|
||||||
|
if qianZhui.get() == True:
|
||||||
|
return "uengine-dc-{}".format(line).lower()
|
||||||
|
return line.lower()
|
||||||
|
|
||||||
def GetApkVersion(apkFilePath):
|
def GetApkVersion(apkFilePath):
|
||||||
info = GetApkInformation(apkFilePath)
|
info = GetApkInformation(apkFilePath)
|
||||||
|
@ -381,7 +386,7 @@ iconPath = "{}/icon.png".format(os.path.split(os.path.realpath(__file__))[0])
|
||||||
# 加载配置
|
# 加载配置
|
||||||
###########################
|
###########################
|
||||||
if not os.path.exists(get_home() + "/.config/uengine-runner"): # 如果没有配置文件夹
|
if not os.path.exists(get_home() + "/.config/uengine-runner"): # 如果没有配置文件夹
|
||||||
os.mkdir(get_home() + "/.config/uengine-runner") # 创建配置文件夹
|
os.makedirs(get_home() + "/.config/uengine-runner") # 创建配置文件夹
|
||||||
if not os.path.exists(get_home() + "/.config/uengine-runner/FindApkBuildHistory.json"): # 如果没有配置文件
|
if not os.path.exists(get_home() + "/.config/uengine-runner/FindApkBuildHistory.json"): # 如果没有配置文件
|
||||||
write_txt(get_home() + "/.config/uengine-runner/FindApkBuildHistory.json", json.dumps({})) # 创建配置文件
|
write_txt(get_home() + "/.config/uengine-runner/FindApkBuildHistory.json", json.dumps({})) # 创建配置文件
|
||||||
if not os.path.exists(get_home() + "/.config/uengine-runner/FindApkBuild.json"): # 如果没有配置文件
|
if not os.path.exists(get_home() + "/.config/uengine-runner/FindApkBuild.json"): # 如果没有配置文件
|
||||||
|
@ -396,34 +401,43 @@ findApkHistory = list(json.loads(readtxt(get_home() + "/.config/uengine-runner/F
|
||||||
# 窗口创建
|
# 窗口创建
|
||||||
###########################
|
###########################
|
||||||
win = tk.Tk()
|
win = tk.Tk()
|
||||||
|
|
||||||
|
qianZhui = tk.BooleanVar()
|
||||||
|
|
||||||
window = ttk.Frame(win)
|
window = ttk.Frame(win)
|
||||||
style = ttkthemes.ThemedStyle(win)
|
|
||||||
style.set_theme("breeze")
|
|
||||||
win.attributes('-alpha', 0.5)
|
|
||||||
win.title(title)
|
|
||||||
win.resizable(0, 0)
|
|
||||||
win.iconphoto(False, tk.PhotoImage(file=iconPath))
|
|
||||||
frame2 = ttk.Frame(window)
|
frame2 = ttk.Frame(window)
|
||||||
label1 = ttk.Label(window, text="要打包的 apk 路径:")
|
label1 = ttk.Label(window, text="要打包的 apk 路径:")
|
||||||
combobox1 = ttk.Combobox(window, width=100)
|
combobox1 = ttk.Combobox(window, width=100)
|
||||||
button2 = ttk.Button(window, text="浏览", command=FindApk)
|
button2 = ttk.Button(window, text="浏览", command=FindApk)
|
||||||
button3 = ttk.Button(frame2, text="打包", command=BuildDeb)
|
button3 = ttk.Button(frame2, text="打包", command=BuildDeb)
|
||||||
|
check = ttk.Checkbutton(frame2, variable=qianZhui,text="使用前缀“uengine-dc”")
|
||||||
textbox1 = tk.Text(window, width=100)
|
textbox1 = tk.Text(window, width=100)
|
||||||
menu = tk.Menu(window, background="white") # 设置菜单栏
|
menu = tk.Menu(window, background="white") # 设置菜单栏
|
||||||
programmenu = tk.Menu(menu, tearoff=0, background="white") # 设置“程序”菜单栏
|
programmenu = tk.Menu(menu, tearoff=0, background="white") # 设置“程序”菜单栏
|
||||||
|
|
||||||
menu.add_cascade(label="程序", menu=programmenu)
|
menu.add_cascade(label="程序", menu=programmenu)
|
||||||
programmenu.add_command(label="退出程序", command=window.quit) # 设置“退出程序”项
|
programmenu.add_command(label="退出程序", command=window.quit) # 设置“退出程序”项
|
||||||
# 设置控件
|
# 设置控件
|
||||||
combobox1['value'] = findApkHistory
|
combobox1['value'] = findApkHistory
|
||||||
textbox1.configure(state=tk.DISABLED)
|
textbox1.configure(state=tk.DISABLED)
|
||||||
textbox1.config(foreground='white', background='black')
|
textbox1.config(foreground='white', background='black')
|
||||||
|
# 如果有参数
|
||||||
|
if len(sys.argv) > 1:
|
||||||
|
combobox1.set(sys.argv[1])
|
||||||
|
# 设置窗口
|
||||||
|
style = ttkthemes.ThemedStyle(win)
|
||||||
|
style.set_theme("breeze")
|
||||||
|
win.attributes('-alpha', 0.5)
|
||||||
|
win.title(title)
|
||||||
|
win.resizable(0, 0)
|
||||||
|
win.iconphoto(False, tk.PhotoImage(file=iconPath))
|
||||||
#
|
#
|
||||||
win.config(menu=menu) # 显示菜单栏
|
win.config(menu=menu) # 显示菜单栏
|
||||||
label1.grid(row=2, column=0)
|
label1.grid(row=2, column=0)
|
||||||
combobox1.grid(row=2, column=1)
|
combobox1.grid(row=2, column=1)
|
||||||
#button1.grid(column=0, row=0)
|
|
||||||
button2.grid(row=2, column=2)
|
button2.grid(row=2, column=2)
|
||||||
button3.grid(row=0, column=0)
|
button3.grid(row=0, column=1)
|
||||||
|
check.grid(row=0, column=0)
|
||||||
frame2.grid(row=3, columnspa=3)
|
frame2.grid(row=3, columnspa=3)
|
||||||
textbox1.grid(row=4, columnspa=3)
|
textbox1.grid(row=4, columnspa=3)
|
||||||
window.pack()
|
window.pack()
|
||||||
|
|
|
@ -2,8 +2,8 @@
|
||||||
# 使用系统默认的 python3 运行
|
# 使用系统默认的 python3 运行
|
||||||
###########################################################################################
|
###########################################################################################
|
||||||
# 作者:gfdgd xi<3025613752@qq.com>
|
# 作者:gfdgd xi<3025613752@qq.com>
|
||||||
# 版本:1.4.0
|
# 版本:1.4.3
|
||||||
# 更新时间:2021年8月26日
|
# 更新时间:2021年9月11日(开学了)
|
||||||
# 感谢:anbox、deepin 和 UOS
|
# 感谢:anbox、deepin 和 UOS
|
||||||
# 基于 Python3 的 tkinter 构建
|
# 基于 Python3 的 tkinter 构建
|
||||||
# 更新:actionchen<917981399@qq.com>
|
# 更新:actionchen<917981399@qq.com>
|
||||||
|
@ -99,7 +99,7 @@ def InstallApk(path: "apk 路径", quit: "是否静默安装" = False):
|
||||||
try:
|
try:
|
||||||
if not os.path.exists("{}/.local/share/applications/uengine/".format(get_home())):
|
if not os.path.exists("{}/.local/share/applications/uengine/".format(get_home())):
|
||||||
print("Mkdir")
|
print("Mkdir")
|
||||||
os.mkdir("{}/.local/share/applications/uengine/".format(get_home()))
|
os.makedirs("{}/.local/share/applications/uengine/".format(get_home()))
|
||||||
print("start install apk")
|
print("start install apk")
|
||||||
global findApkHistory
|
global findApkHistory
|
||||||
commandReturn = GetCommandReturn("pkexec /usr/bin/uengine-session-launch-helper -- uengine install --apk='{}'".format(path))
|
commandReturn = GetCommandReturn("pkexec /usr/bin/uengine-session-launch-helper -- uengine install --apk='{}'".format(path))
|
||||||
|
@ -454,61 +454,19 @@ def UengineRestart()->"重启 uengine 服务":
|
||||||
os.system("systemctl restart uengine*")
|
os.system("systemctl restart uengine*")
|
||||||
DisabledAndEnbled(False)
|
DisabledAndEnbled(False)
|
||||||
|
|
||||||
# 运行命令的窗口
|
def ScrcpyConnectUengine():
|
||||||
class InstallWindow():
|
if os.path.exists("/snap/bin/scrcpy"):
|
||||||
# 显示窗口
|
threading.Thread(target=os.system, args=["/snap/bin/scrcpy -s '192.168.250.2:5555'"]).start()
|
||||||
def ShowWindows(command):
|
return
|
||||||
global message
|
if messagebox.askyesno(title="提示", message="你没有安装Scrcpy(指使用Snap安装),\n如果你使用了其他方法安装了Scrcpy,可以输入命令“scrcpy -s '192.168.250.2:5555'”,\n是否现在要使用Snap安装Scrcpy?"):
|
||||||
global text
|
if not os.path.exists("/tmp/uengine-runner"):
|
||||||
global installTipsText
|
os.makedirs("/tmp/uengine-runner")
|
||||||
global progressbar
|
write_txt("/tmp/uengine-runner/InstallScrcpy.sh", '''#!/bin/bash
|
||||||
message = tk.Toplevel()
|
sudo apt install snapd -y
|
||||||
message.iconphoto(False, tk.PhotoImage(file=iconPath))
|
sudo snap refresh
|
||||||
messageFrame = ttk.Frame(message)
|
sudo snap install scrcpy''')
|
||||||
installTipsText = tk.StringVar()
|
threading.Thread(target=InstallWindow.ShowWindows, args=["chmod 777 /tmp/uengine-runner/InstallScrcpy.sh -Rv && pkexec /tmp/uengine-runner/InstallScrcpy.sh"]).start()
|
||||||
message.title("正在操作……")
|
return
|
||||||
installTipsText.set("正在操作……")
|
|
||||||
installTips = ttk.Label(messageFrame, textvariable=installTipsText)
|
|
||||||
progressbar = ttk.Progressbar(messageFrame, length=500, mode='indeterminate')
|
|
||||||
text = tk.Text(messageFrame)
|
|
||||||
text.config(background="black", foreground="white")
|
|
||||||
installTips.pack()
|
|
||||||
progressbar.pack(fill="x")
|
|
||||||
text.pack(expand='yes', fill='both')
|
|
||||||
messageFrame.pack(expand='yes', fill='both')
|
|
||||||
print("Run!")
|
|
||||||
threading.Thread(target=InstallWindow.RunCommand, args=[command]).start()
|
|
||||||
message.mainloop()
|
|
||||||
|
|
||||||
# 运行命令并显示
|
|
||||||
def RunCommand(command):
|
|
||||||
global message
|
|
||||||
global text
|
|
||||||
global progressbar
|
|
||||||
global installTipsText
|
|
||||||
InstallWindow.AddText("$>" + command + "\n")
|
|
||||||
progressbar.start()
|
|
||||||
result = subprocess.getoutput(command)
|
|
||||||
InstallWindow.AddText(result)
|
|
||||||
messagebox.showinfo(title="提示", message="操作完毕!")
|
|
||||||
installTipsText.set("操作完毕!")
|
|
||||||
message.title("操作完毕!")
|
|
||||||
progressbar.stop()
|
|
||||||
progressbar["value"] = 100
|
|
||||||
# 特意添加!
|
|
||||||
DisabledAndEnbled(False)
|
|
||||||
print("Clean!")
|
|
||||||
if messagebox.askyesno(title="提示", message="清空完毕,将会在重启后生效,是否要重启?"):
|
|
||||||
print("reboot")
|
|
||||||
os.system("reboot")
|
|
||||||
|
|
||||||
# 添加文本
|
|
||||||
def AddText(things):
|
|
||||||
global text
|
|
||||||
text.configure(state=tk.NORMAL)
|
|
||||||
text.insert("end", things)
|
|
||||||
text.configure(state=tk.DISABLED)
|
|
||||||
|
|
||||||
|
|
||||||
# 获取用户桌面目录
|
# 获取用户桌面目录
|
||||||
def get_desktop_path()->"获取用户桌面目录":
|
def get_desktop_path()->"获取用户桌面目录":
|
||||||
|
@ -554,7 +512,7 @@ def CleanAllUengineDesktopLink():
|
||||||
if messagebox.askokcancel(title="提示", message="你确定要删除所有的 UEngine 应用快捷方式吗?"):
|
if messagebox.askokcancel(title="提示", message="你确定要删除所有的 UEngine 应用快捷方式吗?"):
|
||||||
try:
|
try:
|
||||||
shutil.rmtree("{}/.local/share/applications/uengine".format(get_home()))
|
shutil.rmtree("{}/.local/share/applications/uengine".format(get_home()))
|
||||||
os.mkdir("{}/.local/share/applications/uengine".format(get_home()))
|
os.makedirs("{}/.local/share/applications/uengine".format(get_home()))
|
||||||
messagebox.showinfo(title="提示", message="删除完毕!")
|
messagebox.showinfo(title="提示", message="删除完毕!")
|
||||||
except:
|
except:
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
|
@ -632,6 +590,124 @@ def AdbAndroidInstallAppList():
|
||||||
subprocess.getoutput("adb -s 192.168.250.2:5555 shell pm list package -3"),
|
subprocess.getoutput("adb -s 192.168.250.2:5555 shell pm list package -3"),
|
||||||
subprocess.getoutput("adb -s 192.168.250.2:5555 shell pm list packages -f")))
|
subprocess.getoutput("adb -s 192.168.250.2:5555 shell pm list packages -f")))
|
||||||
|
|
||||||
|
class AdbChangeUengineDisplaySize():
|
||||||
|
def ShowWindows():
|
||||||
|
global displayX
|
||||||
|
global displayY
|
||||||
|
global displaySize
|
||||||
|
message = tk.Toplevel()
|
||||||
|
messageFrame = ttk.Frame(message)
|
||||||
|
|
||||||
|
displaySize = tk.StringVar()
|
||||||
|
displaySize.set("当前 UEngine 屏幕分辨率:正在获取")
|
||||||
|
|
||||||
|
displaySizeLabel = ttk.Label(messageFrame, textvariable=displaySize)
|
||||||
|
|
||||||
|
input = ttk.Frame(messageFrame)
|
||||||
|
displayX = ttk.Entry(input)
|
||||||
|
displayY = ttk.Entry(input)
|
||||||
|
|
||||||
|
settingBUtton = ttk.Button(messageFrame, text="设置分辨率", command=AdbChangeUengineDisplaySize.SettingDisplaySize)
|
||||||
|
|
||||||
|
message.title("修改 UEngine 分辨率")
|
||||||
|
message.resizable(0, 0)
|
||||||
|
message.iconphoto(False, tk.PhotoImage(file=iconPath))
|
||||||
|
# get screen width and height
|
||||||
|
screen_width = message.winfo_screenwidth()
|
||||||
|
screen_height = message.winfo_screenheight()
|
||||||
|
# calculate position x and y coordinates 假设主窗口大小固定 570x236像素 ,设置窗口位置为屏幕中心。
|
||||||
|
winwith=570
|
||||||
|
winhigh=236
|
||||||
|
x = (screen_width/2) - (winwith/2)
|
||||||
|
y = (screen_height/2) - (winhigh/2)
|
||||||
|
message.geometry("+{}+{}".format(int(x), int(y)))
|
||||||
|
|
||||||
|
displayX.grid(row=0, column=0)
|
||||||
|
displayY.grid(row=0, column=1)
|
||||||
|
|
||||||
|
displaySizeLabel.grid(row=0, column=0)
|
||||||
|
input.grid(row=1, column=0)
|
||||||
|
settingBUtton.grid(row=2, column=0)
|
||||||
|
|
||||||
|
messageFrame.pack()
|
||||||
|
threading.Thread(target=AdbChangeUengineDisplaySize.GetUengineDisplaySize).start()
|
||||||
|
message.mainloop()
|
||||||
|
|
||||||
|
def GetUengineDisplaySize():
|
||||||
|
global displaySize
|
||||||
|
displaySize.set("当前 UEngine 屏幕分辨率:\n" + subprocess.getoutput("adb -s '192.168.250.2:5555' shell wm size"))
|
||||||
|
#displaySize.set(subprocess.getoutput("adb -s '192.168.250.2:5555' shell wm size"))
|
||||||
|
|
||||||
|
def SettingDisplaySize():
|
||||||
|
global displayX
|
||||||
|
global displayY
|
||||||
|
try:
|
||||||
|
int(displayX.get())
|
||||||
|
int(displayY.get())
|
||||||
|
except:
|
||||||
|
messagebox.showerror(title="错误", message="你输入的数值不正确!")
|
||||||
|
return
|
||||||
|
os.system("adb -s '192.168.250.2:5555' shell wm size {}x{}".format(displayX.get(), displayY.get()))
|
||||||
|
AdbChangeUengineDisplaySize.GetUengineDisplaySize()
|
||||||
|
messagebox.showinfo(title="提示", message="执行完毕!")
|
||||||
|
|
||||||
|
# 运行命令的窗口
|
||||||
|
class InstallWindow():
|
||||||
|
# 显示窗口
|
||||||
|
def ShowWindows(command):
|
||||||
|
global message
|
||||||
|
global text
|
||||||
|
global installTipsText
|
||||||
|
global progressbar
|
||||||
|
global runCommand
|
||||||
|
message = tk.Toplevel()
|
||||||
|
message.iconphoto(False, tk.PhotoImage(file=iconPath))
|
||||||
|
messageFrame = ttk.Frame(message)
|
||||||
|
installTipsText = tk.StringVar()
|
||||||
|
message.title("正在操作……")
|
||||||
|
installTipsText.set("正在操作……")
|
||||||
|
installTips = ttk.Label(messageFrame, textvariable=installTipsText)
|
||||||
|
progressbar = ttk.Progressbar(messageFrame, length=500, mode='indeterminate')
|
||||||
|
text = tk.Text(messageFrame)
|
||||||
|
text.config(background="black", foreground="white")
|
||||||
|
installTips.pack()
|
||||||
|
progressbar.pack(fill="x")
|
||||||
|
text.pack(expand='yes', fill='both')
|
||||||
|
messageFrame.pack(expand='yes', fill='both')
|
||||||
|
print("Run!")
|
||||||
|
threading.Thread(target=InstallWindow.RunCommand, args=[command]).start()
|
||||||
|
message.mainloop()
|
||||||
|
|
||||||
|
# 运行命令并显示
|
||||||
|
def RunCommand(command):
|
||||||
|
global message
|
||||||
|
global text
|
||||||
|
global progressbar
|
||||||
|
global installTipsText
|
||||||
|
InstallWindow.AddText("$>" + command + "\n")
|
||||||
|
progressbar.start()
|
||||||
|
result = subprocess.getoutput(command)
|
||||||
|
InstallWindow.AddText(result)
|
||||||
|
messagebox.showinfo(title="提示", message="操作完毕!")
|
||||||
|
installTipsText.set("操作完毕!")
|
||||||
|
message.title("操作完毕!")
|
||||||
|
progressbar.stop()
|
||||||
|
progressbar["value"] = 100
|
||||||
|
# 特意添加!
|
||||||
|
DisabledAndEnbled(False)
|
||||||
|
if command == "pkexec rm -rfv /data/uengine":
|
||||||
|
print("Clean!")
|
||||||
|
if messagebox.askyesno(title="提示", message="清空完毕,将会在重启后生效,是否要重启?"):
|
||||||
|
print("reboot")
|
||||||
|
os.system("reboot")
|
||||||
|
|
||||||
|
# 添加文本
|
||||||
|
def AddText(things):
|
||||||
|
global text
|
||||||
|
text.configure(state=tk.NORMAL)
|
||||||
|
text.insert("end", things)
|
||||||
|
text.configure(state=tk.DISABLED)
|
||||||
|
|
||||||
class ShowTextTipsWindow():
|
class ShowTextTipsWindow():
|
||||||
def ShowWindow(things):
|
def ShowWindow(things):
|
||||||
message = tk.Toplevel()
|
message = tk.Toplevel()
|
||||||
|
@ -749,6 +825,27 @@ class AddNewUengineDesktopLink():
|
||||||
activityName.set(GetApkActivityName(path))
|
activityName.set(GetApkActivityName(path))
|
||||||
write_txt(get_home() + "/.config/uengine-runner/FindApkName.json", json.dumps({"path": os.path.dirname(path)})) # 写入配置文件
|
write_txt(get_home() + "/.config/uengine-runner/FindApkName.json", json.dumps({"path": os.path.dirname(path)})) # 写入配置文件
|
||||||
|
|
||||||
|
def UseProgram():
|
||||||
|
global useProgram
|
||||||
|
useProgram = '''1、UEngine:{}
|
||||||
|
2、python3:{}
|
||||||
|
3、tkinter:{}
|
||||||
|
4、aapt:{}
|
||||||
|
5、dpkg:{}
|
||||||
|
6、mkdir:{}
|
||||||
|
7、echo
|
||||||
|
8、chmod:{}
|
||||||
|
9、adb:{}
|
||||||
|
10、deepin 终端:{}'''.format(subprocess.getoutput("uengine version"),
|
||||||
|
subprocess.getoutput("python3 --version"),
|
||||||
|
tk.TkVersion,
|
||||||
|
subprocess.getoutput("aapt version"),
|
||||||
|
subprocess.getoutput("dpkg --version"),
|
||||||
|
subprocess.getoutput("mkdir --version"),
|
||||||
|
subprocess.getoutput("chmod --version"),
|
||||||
|
subprocess.getoutput("adb version"),
|
||||||
|
subprocess.getoutput("deepin-terminal -v"))
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# 程序信息
|
# 程序信息
|
||||||
###########################
|
###########################
|
||||||
|
@ -776,33 +873,16 @@ iconPath = "{}/icon.png".format(os.path.split(os.path.realpath(__file__))[0])
|
||||||
desktop = programPath + "/UengineAndroidProgramList.desktop"
|
desktop = programPath + "/UengineAndroidProgramList.desktop"
|
||||||
desktopName = "UengineAndroidProgramList.desktop"
|
desktopName = "UengineAndroidProgramList.desktop"
|
||||||
contribute = "\n".join(information["Contribute"])
|
contribute = "\n".join(information["Contribute"])
|
||||||
useProgram = '''1、UEngine:{}
|
useProgram = ""
|
||||||
2、python3:{}
|
threading.Thread(target=UseProgram).start()
|
||||||
3、tkinter:{}
|
|
||||||
4、aapt:{}
|
|
||||||
5、dpkg:{}
|
|
||||||
6、mkdir:{}
|
|
||||||
7、echo
|
|
||||||
8、chmod:{}
|
|
||||||
9、adb:{}
|
|
||||||
10、deepin 终端:{}'''.format(subprocess.getoutput("uengine version"),
|
|
||||||
subprocess.getoutput("python3 --version"),
|
|
||||||
tk.TkVersion,
|
|
||||||
subprocess.getoutput("aapt version"),
|
|
||||||
subprocess.getoutput("dpkg --version"),
|
|
||||||
subprocess.getoutput("mkdir --version"),
|
|
||||||
subprocess.getoutput("chmod --version"),
|
|
||||||
subprocess.getoutput("adb version"),
|
|
||||||
subprocess.getoutput("deepin-terminal -v"))
|
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# 加载配置
|
# 加载配置
|
||||||
###########################
|
###########################
|
||||||
if not os.path.exists("{}/.local/share/applications/uengine/".format(get_home())):
|
if not os.path.exists("{}/.local/share/applications/uengine/".format(get_home())):
|
||||||
os.mkdir("{}/.local/share/applications/uengine/".format(get_home()))
|
os.makedirs("{}/.local/share/applications/uengine/".format(get_home()))
|
||||||
if not os.path.exists(get_home() + "/.config/uengine-runner"): # 如果没有配置文件夹
|
if not os.path.exists(get_home() + "/.config/uengine-runner"): # 如果没有配置文件夹
|
||||||
os.mkdir(get_home() + "/.config/uengine-runner") # 创建配置文件夹
|
os.makedirs(get_home() + "/.config/uengine-runner") # 创建配置文件夹
|
||||||
if not os.path.exists(get_home() + "/.config/uengine-runner/FindApkHistory.json"): # 如果没有配置文件
|
if not os.path.exists(get_home() + "/.config/uengine-runner/FindApkHistory.json"): # 如果没有配置文件
|
||||||
write_txt(get_home() + "/.config/uengine-runner/FindApkHistory.json", json.dumps({})) # 创建配置文件
|
write_txt(get_home() + "/.config/uengine-runner/FindApkHistory.json", json.dumps({})) # 创建配置文件
|
||||||
if not os.path.exists(get_home() + "/.config/uengine-runner/FindApkNameHistory.json"): # 如果没有配置文件
|
if not os.path.exists(get_home() + "/.config/uengine-runner/FindApkNameHistory.json"): # 如果没有配置文件
|
||||||
|
@ -885,6 +965,9 @@ def showhelp():
|
||||||
def ChgAbout():
|
def ChgAbout():
|
||||||
HelpStr.set(about)
|
HelpStr.set(about)
|
||||||
def ChgDep():
|
def ChgDep():
|
||||||
|
if useProgram == "":
|
||||||
|
BtnZujian.configure(state=tk.DISABLED)
|
||||||
|
return
|
||||||
HelpStr.set(useProgram)
|
HelpStr.set(useProgram)
|
||||||
def ChgCon():
|
def ChgCon():
|
||||||
HelpStr.set(contribute)
|
HelpStr.set(contribute)
|
||||||
|
@ -987,9 +1070,11 @@ adb.add_separator()
|
||||||
adb.add_cascade(label="adb 服务", menu=adbServer)
|
adb.add_cascade(label="adb 服务", menu=adbServer)
|
||||||
adb.add_command(label="显示 adb 连接的设备", command=AdbConnectDeviceShow)
|
adb.add_command(label="显示 adb 连接的设备", command=AdbConnectDeviceShow)
|
||||||
adb.add_separator()
|
adb.add_separator()
|
||||||
|
adb.add_command(label="adb 修改 UEngine 分辨率", command=AdbChangeUengineDisplaySize.ShowWindows)
|
||||||
adb.add_command(label="adb 查看 UEngine 应用列表", command=AdbAndroidInstallAppList)
|
adb.add_command(label="adb 查看 UEngine 应用列表", command=AdbAndroidInstallAppList)
|
||||||
adb.add_command(label="adb 查看 UEngine 资源使用情况", command=AdbCPUAndRAWShowInTer)
|
adb.add_command(label="adb 查看 UEngine 资源使用情况", command=AdbCPUAndRAWShowInTer)
|
||||||
adb.add_command(label="打开 adb 连接 UEngine 的终端", command=AdbShellShowInTer)
|
adb.add_command(label="打开 adb 连接 UEngine 的终端", command=AdbShellShowInTer)
|
||||||
|
adb.add_command(label="使用 Scrcpy 连接 UEngine(只支持使用snap安装的Scrcpy)", command=ScrcpyConnectUengine)
|
||||||
adb.add_separator()
|
adb.add_separator()
|
||||||
adb.add_cascade(label="UEngine 使用 adb", menu=uengineUseAdb)
|
adb.add_cascade(label="UEngine 使用 adb", menu=uengineUseAdb)
|
||||||
|
|
||||||
|
|
|
@ -2,8 +2,8 @@
|
||||||
# 使用系统默认的 python3 运行
|
# 使用系统默认的 python3 运行
|
||||||
###########################################################################################
|
###########################################################################################
|
||||||
# 作者:gfdgd xi
|
# 作者:gfdgd xi
|
||||||
# 版本:1.4.2
|
# 版本:1.4.3
|
||||||
# 更新时间:2021年8月30日
|
# 更新时间:2021年9月11日
|
||||||
# 感谢:anbox、deepin 和 统信
|
# 感谢:anbox、deepin 和 统信
|
||||||
# 基于 Python3 的 tkinter 构建
|
# 基于 Python3 的 tkinter 构建
|
||||||
###########################################################################################
|
###########################################################################################
|
||||||
|
@ -11,6 +11,7 @@
|
||||||
# 引入所需的库
|
# 引入所需的库
|
||||||
#################
|
#################
|
||||||
import os
|
import os
|
||||||
|
import threading
|
||||||
import time
|
import time
|
||||||
import json
|
import json
|
||||||
import ttkthemes
|
import ttkthemes
|
||||||
|
@ -52,7 +53,16 @@ iconPath = "{}/icon.png".format(os.path.split(os.path.realpath(__file__))[0])
|
||||||
desktop = "/opt/apps/uengine-runner/UengineAndroidProgramList.desktop"
|
desktop = "/opt/apps/uengine-runner/UengineAndroidProgramList.desktop"
|
||||||
desktopName = "UengineAndroidProgramList.desktop"
|
desktopName = "UengineAndroidProgramList.desktop"
|
||||||
contribute = "\n".join(information["Contribute"])
|
contribute = "\n".join(information["Contribute"])
|
||||||
useProgram = '''1、UEngine:{}
|
useProgram = ""
|
||||||
|
threading.Thread(target=useProgram).start()
|
||||||
|
|
||||||
|
# add sub window
|
||||||
|
#添加窗口开启关闭开关,防止重复开启
|
||||||
|
windowflag = "close"
|
||||||
|
|
||||||
|
def UseProgram():
|
||||||
|
global useProgram
|
||||||
|
useProgram = '''1、UEngine:{}
|
||||||
2、python3:{}
|
2、python3:{}
|
||||||
3、tkinter:{}
|
3、tkinter:{}
|
||||||
4、aapt:{}
|
4、aapt:{}
|
||||||
|
@ -71,10 +81,6 @@ useProgram = '''1、UEngine:{}
|
||||||
subprocess.getoutput("adb version"),
|
subprocess.getoutput("adb version"),
|
||||||
subprocess.getoutput("deepin-terminal -v"))
|
subprocess.getoutput("deepin-terminal -v"))
|
||||||
|
|
||||||
# add sub window
|
|
||||||
#添加窗口开启关闭开关,防止重复开启
|
|
||||||
windowflag = "close"
|
|
||||||
|
|
||||||
def showhelp():
|
def showhelp():
|
||||||
|
|
||||||
#define window and frame and button label
|
#define window and frame and button label
|
||||||
|
@ -127,6 +133,9 @@ def showhelp():
|
||||||
def ChgAbout():
|
def ChgAbout():
|
||||||
HelpStr.set(about)
|
HelpStr.set(about)
|
||||||
def ChgDep():
|
def ChgDep():
|
||||||
|
if useProgram == "":
|
||||||
|
BtnZujian.configure(state=tk.DISABLED)
|
||||||
|
return
|
||||||
HelpStr.set(useProgram)
|
HelpStr.set(useProgram)
|
||||||
def ChgCon():
|
def ChgCon():
|
||||||
HelpStr.set(contribute)
|
HelpStr.set(contribute)
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
[Desktop Entry]
|
||||||
|
Type=Application
|
||||||
|
Encoding=UTF-8
|
||||||
|
Categories=System;
|
||||||
|
Terminal=false
|
||||||
|
Exec=/usr/bin/uengine-apk-builder %F
|
||||||
|
Icon=/opt/apps/uengine-runner/icon.png
|
||||||
|
Name=Build Apk To Deb(UEngine Runner)
|
||||||
|
Comment=Build Apk To Deb(UEngine Runner)
|
||||||
|
Comment[zh]=打包 deb(UEngine 运行器)
|
||||||
|
Name[zh]=打包 deb(UEngine 运行器)
|
||||||
|
StartupNotify=true
|
||||||
|
Hidden=false
|
||||||
|
NoDisplay=true
|
||||||
|
MimeType=application/vnd.android.package-archive
|
|
@ -0,0 +1,12 @@
|
||||||
|
[Desktop Entry]
|
||||||
|
Type=Application
|
||||||
|
Encoding=UTF-8
|
||||||
|
Categories=System;
|
||||||
|
Terminal=false
|
||||||
|
Exec=/usr/bin/uengine-apk-builder %F
|
||||||
|
Icon=/opt/apps/uengine-runner/icon.png
|
||||||
|
Name=uengine Apk Builder
|
||||||
|
Comment=UEngine Apk Builder
|
||||||
|
Comment[zh]=UEngine 应用打包器
|
||||||
|
Name[zh]=UEngine 应用打包器
|
||||||
|
StartupNotify=true
|
|
@ -0,0 +1,21 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE policyconfig PUBLIC
|
||||||
|
"-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
|
||||||
|
"http://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd">
|
||||||
|
<policyconfig>
|
||||||
|
<vendor>gfdgd xi</vendor>
|
||||||
|
<vendor_url>https://gitee.com/gfdgd-xi/uengine-runner/</vendor_url>
|
||||||
|
<action id="com.deepin.pkexec.installscrcpy">
|
||||||
|
<message>Authentication is required to Install Scrcpy</message>
|
||||||
|
<message xml:lang="zh_CN">安装 Scrcpy 需要输入密码</message>
|
||||||
|
<icon_name>preferences-system</icon_name>
|
||||||
|
<defaults>
|
||||||
|
<allow_any>no</allow_any>
|
||||||
|
<allow_inactive>no</allow_inactive>
|
||||||
|
<allow_active>auth_admin_keep</allow_active>
|
||||||
|
</defaults>
|
||||||
|
<annotate key="org.freedesktop.policykit.exec.path">/tmp/uengine-runner/InstallScrcpy.sh</annotate>
|
||||||
|
<annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate>
|
||||||
|
</action>
|
||||||
|
|
||||||
|
</policyconfig>
|
Binary file not shown.
|
@ -26,6 +26,13 @@
|
||||||
"4、如果想要使用adb连接UEngine或其他手机,请使用 1.2.0 以前的版本。(如需连接UEngine请安装adb补丁)"
|
"4、如果想要使用adb连接UEngine或其他手机,请使用 1.2.0 以前的版本。(如需连接UEngine请安装adb补丁)"
|
||||||
],
|
],
|
||||||
"Update": [
|
"Update": [
|
||||||
|
"V1.4.3:",
|
||||||
|
"※1、支持打包器打包的包名带前缀“uengine-dc”",
|
||||||
|
"※2、修复了两种情况可能导致程序卡住/出错无法继续运行的情况(配置文件夹不齐全和获取版本信息卡住两种情况)",
|
||||||
|
"※3、修改了 UEngine 打包器打包的应用包名可能有大写的情况",
|
||||||
|
"4、支持一键使用 Scrcpy 连接 UEngine(①先安装 adb 破解补丁;②请确保是使用snap安装的 Scrcpy【目前只支持 snap 安装的 Scrcpy 进行连接】)",
|
||||||
|
"5、支持右键打包 apk",
|
||||||
|
"",
|
||||||
"V1.4.2:",
|
"V1.4.2:",
|
||||||
"※1、添加adb破解补丁(用于可以让adb连接UEngine)并支持adb的部分操作;",
|
"※1、添加adb破解补丁(用于可以让adb连接UEngine)并支持adb的部分操作;",
|
||||||
"2、菜单栏的项目添加以及外观优化;",
|
"2、菜单栏的项目添加以及外观优化;",
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
Package: com.gitee.uengine.runner.spark
|
Package: com.gitee.uengine.runner.spark
|
||||||
Source: com.gitee.uengine.runner.spark
|
Source: com.gitee.uengine.runner.spark
|
||||||
Version: 1.4.2
|
Version: 1.4.3
|
||||||
Architecture: all
|
Architecture: all
|
||||||
Maintainer: gfdgd xi <3025613752@qq.com>, actionchen<917981399@qq.com>
|
Maintainer: gfdgd xi <3025613752@qq.com>, actionchen<917981399@qq.com>
|
||||||
Depends: deepin-elf-verify (>= 0.0.16.7-1), python3, python3-tk, python3-pip, aapt, adb, python3-pil, python3-setuptools, uengine, deepin-terminal
|
Depends: deepin-elf-verify (>= 0.0.16.7-1), python3, python3-tk, python3-pip, aapt, adb, python3-pil, python3-setuptools, uengine, deepin-terminal
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
[Desktop Entry]
|
||||||
|
Type=Application
|
||||||
|
Encoding=UTF-8
|
||||||
|
Categories=System;
|
||||||
|
Terminal=false
|
||||||
|
Exec=/usr/bin/uengine-apk-builder %F
|
||||||
|
Icon=/opt/apps/com.gitee.uengine.runner.spark/files/icon.png
|
||||||
|
Name=Build Apk To Deb(UEngine Runner)
|
||||||
|
Comment=Build Apk To Deb(UEngine Runner)
|
||||||
|
Comment[zh]=打包 deb(UEngine 运行器)
|
||||||
|
Name[zh]=打包 deb(UEngine 运行器)
|
||||||
|
StartupNotify=true
|
||||||
|
Hidden=false
|
||||||
|
NoDisplay=true
|
||||||
|
MimeType=application/vnd.android.package-archive
|
|
@ -0,0 +1,12 @@
|
||||||
|
[Desktop Entry]
|
||||||
|
Type=Application
|
||||||
|
Encoding=UTF-8
|
||||||
|
Categories=System;
|
||||||
|
Terminal=false
|
||||||
|
Exec=/usr/bin/uengine-apk-builder %F
|
||||||
|
Icon=/opt/apps/com.gitee.uengine.runner.spark/files/icon.png
|
||||||
|
Name=uengine Apk Builder
|
||||||
|
Comment=UEngine Apk Builder
|
||||||
|
Comment[zh]=UEngine 应用打包器
|
||||||
|
Name[zh]=UEngine 应用打包器
|
||||||
|
StartupNotify=true
|
|
@ -3,7 +3,7 @@
|
||||||
"https://gitee.com/gfdgd-xi/uengine-runner",
|
"https://gitee.com/gfdgd-xi/uengine-runner",
|
||||||
"https://github.com/gfdgd-xi/uengine-runner"
|
"https://github.com/gfdgd-xi/uengine-runner"
|
||||||
],
|
],
|
||||||
"Version": "1.4.2",
|
"Version": "1.4.3",
|
||||||
"System": "Linux(deepin/UOS)",
|
"System": "Linux(deepin/UOS)",
|
||||||
"Tips": [
|
"Tips": [
|
||||||
"更多可见:https://gitee.com/gfdgd-xi/uengine-runner/wikis",
|
"更多可见:https://gitee.com/gfdgd-xi/uengine-runner/wikis",
|
||||||
|
@ -26,6 +26,13 @@
|
||||||
"4、如果想要使用adb连接UEngine或其他手机,请使用 1.2.0 以前的版本。(如需连接UEngine请安装adb补丁)"
|
"4、如果想要使用adb连接UEngine或其他手机,请使用 1.2.0 以前的版本。(如需连接UEngine请安装adb补丁)"
|
||||||
],
|
],
|
||||||
"Update": [
|
"Update": [
|
||||||
|
"V1.4.3:",
|
||||||
|
"※1、支持打包器打包的包名带前缀“uengine-dc”",
|
||||||
|
"※2、修复了两种情况可能导致程序卡住/出错无法继续运行的情况(配置文件夹不齐全和获取版本信息卡住两种情况)",
|
||||||
|
"※3、修改了 UEngine 打包器打包的应用包名可能有大写的情况",
|
||||||
|
"4、支持一键使用 Scrcpy 连接 UEngine(①先安装 adb 破解补丁;②请确保是使用snap安装的 Scrcpy【目前只支持 snap 安装的 Scrcpy 进行连接】)",
|
||||||
|
"5、支持右键打包 apk",
|
||||||
|
"",
|
||||||
"V1.4.2:",
|
"V1.4.2:",
|
||||||
"※1、添加adb破解补丁(用于可以让adb连接UEngine)并支持adb的部分操作;",
|
"※1、添加adb破解补丁(用于可以让adb连接UEngine)并支持adb的部分操作;",
|
||||||
"2、菜单栏的项目添加以及外观优化;",
|
"2、菜单栏的项目添加以及外观优化;",
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"Package": "com.gitee.uengine.runner.spark",
|
"Package": "com.gitee.uengine.runner.spark",
|
||||||
"Update": true,
|
"Update": true,
|
||||||
"Version": "1.4.2",
|
"Version": "1.4.3",
|
||||||
"Url": "https://gfdgd-xi.github.io/update-program/data/UpdateInformation.json"
|
"Url": "https://gfdgd-xi.github.io/update-program/data/UpdateInformation.json"
|
||||||
}
|
}
|
|
@ -187,6 +187,7 @@ def DisabledAndEnbled(choose):
|
||||||
userChoose = {True: tk.DISABLED, False: tk.NORMAL}
|
userChoose = {True: tk.DISABLED, False: tk.NORMAL}
|
||||||
a = userChoose[choose]
|
a = userChoose[choose]
|
||||||
combobox1.configure(state=a)
|
combobox1.configure(state=a)
|
||||||
|
check.configure(state=a)
|
||||||
button2.configure(state=a)
|
button2.configure(state=a)
|
||||||
button3.configure(state=a)
|
button3.configure(state=a)
|
||||||
|
|
||||||
|
@ -256,6 +257,7 @@ def GetApkActivityName(apkFilePath):
|
||||||
return line
|
return line
|
||||||
|
|
||||||
def GetApkPackageName(apkFilePath):
|
def GetApkPackageName(apkFilePath):
|
||||||
|
# 提示:此函数有被为此程序适配而调整,如果需要最原始(无调整的)请使用主程序(此为附属组件)里的函数
|
||||||
info = GetApkInformation(apkFilePath)
|
info = GetApkInformation(apkFilePath)
|
||||||
for line in info.split('\n'):
|
for line in info.split('\n'):
|
||||||
if "package:" in line:
|
if "package:" in line:
|
||||||
|
@ -264,7 +266,10 @@ def GetApkPackageName(apkFilePath):
|
||||||
line = line.replace("name=", "")
|
line = line.replace("name=", "")
|
||||||
line = line.replace("'", "")
|
line = line.replace("'", "")
|
||||||
line = line.replace(" ", "")
|
line = line.replace(" ", "")
|
||||||
return line
|
# 此较为特殊,因为需要判断用户是否要添加前缀
|
||||||
|
if qianZhui.get() == True:
|
||||||
|
return "uengine-dc-{}".format(line).lower()
|
||||||
|
return line.lower()
|
||||||
|
|
||||||
def GetApkVersion(apkFilePath):
|
def GetApkVersion(apkFilePath):
|
||||||
info = GetApkInformation(apkFilePath)
|
info = GetApkInformation(apkFilePath)
|
||||||
|
@ -381,7 +386,7 @@ iconPath = "{}/icon.png".format(os.path.split(os.path.realpath(__file__))[0])
|
||||||
# 加载配置
|
# 加载配置
|
||||||
###########################
|
###########################
|
||||||
if not os.path.exists(get_home() + "/.config/uengine-runner"): # 如果没有配置文件夹
|
if not os.path.exists(get_home() + "/.config/uengine-runner"): # 如果没有配置文件夹
|
||||||
os.mkdir(get_home() + "/.config/uengine-runner") # 创建配置文件夹
|
os.makedirs(get_home() + "/.config/uengine-runner") # 创建配置文件夹
|
||||||
if not os.path.exists(get_home() + "/.config/uengine-runner/FindApkBuildHistory.json"): # 如果没有配置文件
|
if not os.path.exists(get_home() + "/.config/uengine-runner/FindApkBuildHistory.json"): # 如果没有配置文件
|
||||||
write_txt(get_home() + "/.config/uengine-runner/FindApkBuildHistory.json", json.dumps({})) # 创建配置文件
|
write_txt(get_home() + "/.config/uengine-runner/FindApkBuildHistory.json", json.dumps({})) # 创建配置文件
|
||||||
if not os.path.exists(get_home() + "/.config/uengine-runner/FindApkBuild.json"): # 如果没有配置文件
|
if not os.path.exists(get_home() + "/.config/uengine-runner/FindApkBuild.json"): # 如果没有配置文件
|
||||||
|
@ -396,34 +401,43 @@ findApkHistory = list(json.loads(readtxt(get_home() + "/.config/uengine-runner/F
|
||||||
# 窗口创建
|
# 窗口创建
|
||||||
###########################
|
###########################
|
||||||
win = tk.Tk()
|
win = tk.Tk()
|
||||||
|
|
||||||
|
qianZhui = tk.BooleanVar()
|
||||||
|
|
||||||
window = ttk.Frame(win)
|
window = ttk.Frame(win)
|
||||||
style = ttkthemes.ThemedStyle(win)
|
|
||||||
style.set_theme("breeze")
|
|
||||||
win.attributes('-alpha', 0.5)
|
|
||||||
win.title(title)
|
|
||||||
win.resizable(0, 0)
|
|
||||||
win.iconphoto(False, tk.PhotoImage(file=iconPath))
|
|
||||||
frame2 = ttk.Frame(window)
|
frame2 = ttk.Frame(window)
|
||||||
label1 = ttk.Label(window, text="要打包的 apk 路径:")
|
label1 = ttk.Label(window, text="要打包的 apk 路径:")
|
||||||
combobox1 = ttk.Combobox(window, width=100)
|
combobox1 = ttk.Combobox(window, width=100)
|
||||||
button2 = ttk.Button(window, text="浏览", command=FindApk)
|
button2 = ttk.Button(window, text="浏览", command=FindApk)
|
||||||
button3 = ttk.Button(frame2, text="打包", command=BuildDeb)
|
button3 = ttk.Button(frame2, text="打包", command=BuildDeb)
|
||||||
|
check = ttk.Checkbutton(frame2, variable=qianZhui,text="使用前缀“uengine-dc”")
|
||||||
textbox1 = tk.Text(window, width=100)
|
textbox1 = tk.Text(window, width=100)
|
||||||
menu = tk.Menu(window, background="white") # 设置菜单栏
|
menu = tk.Menu(window, background="white") # 设置菜单栏
|
||||||
programmenu = tk.Menu(menu, tearoff=0, background="white") # 设置“程序”菜单栏
|
programmenu = tk.Menu(menu, tearoff=0, background="white") # 设置“程序”菜单栏
|
||||||
|
|
||||||
menu.add_cascade(label="程序", menu=programmenu)
|
menu.add_cascade(label="程序", menu=programmenu)
|
||||||
programmenu.add_command(label="退出程序", command=window.quit) # 设置“退出程序”项
|
programmenu.add_command(label="退出程序", command=window.quit) # 设置“退出程序”项
|
||||||
# 设置控件
|
# 设置控件
|
||||||
combobox1['value'] = findApkHistory
|
combobox1['value'] = findApkHistory
|
||||||
textbox1.configure(state=tk.DISABLED)
|
textbox1.configure(state=tk.DISABLED)
|
||||||
textbox1.config(foreground='white', background='black')
|
textbox1.config(foreground='white', background='black')
|
||||||
|
# 如果有参数
|
||||||
|
if len(sys.argv) > 1:
|
||||||
|
combobox1.set(sys.argv[1])
|
||||||
|
# 设置窗口
|
||||||
|
style = ttkthemes.ThemedStyle(win)
|
||||||
|
style.set_theme("breeze")
|
||||||
|
win.attributes('-alpha', 0.5)
|
||||||
|
win.title(title)
|
||||||
|
win.resizable(0, 0)
|
||||||
|
win.iconphoto(False, tk.PhotoImage(file=iconPath))
|
||||||
#
|
#
|
||||||
win.config(menu=menu) # 显示菜单栏
|
win.config(menu=menu) # 显示菜单栏
|
||||||
label1.grid(row=2, column=0)
|
label1.grid(row=2, column=0)
|
||||||
combobox1.grid(row=2, column=1)
|
combobox1.grid(row=2, column=1)
|
||||||
#button1.grid(column=0, row=0)
|
|
||||||
button2.grid(row=2, column=2)
|
button2.grid(row=2, column=2)
|
||||||
button3.grid(row=0, column=0)
|
button3.grid(row=0, column=1)
|
||||||
|
check.grid(row=0, column=0)
|
||||||
frame2.grid(row=3, columnspa=3)
|
frame2.grid(row=3, columnspa=3)
|
||||||
textbox1.grid(row=4, columnspa=3)
|
textbox1.grid(row=4, columnspa=3)
|
||||||
window.pack()
|
window.pack()
|
||||||
|
|
|
@ -2,8 +2,8 @@
|
||||||
# 使用系统默认的 python3 运行
|
# 使用系统默认的 python3 运行
|
||||||
###########################################################################################
|
###########################################################################################
|
||||||
# 作者:gfdgd xi<3025613752@qq.com>
|
# 作者:gfdgd xi<3025613752@qq.com>
|
||||||
# 版本:1.4.0
|
# 版本:1.4.3
|
||||||
# 更新时间:2021年8月26日
|
# 更新时间:2021年9月11日(开学了)
|
||||||
# 感谢:anbox、deepin 和 UOS
|
# 感谢:anbox、deepin 和 UOS
|
||||||
# 基于 Python3 的 tkinter 构建
|
# 基于 Python3 的 tkinter 构建
|
||||||
# 更新:actionchen<917981399@qq.com>
|
# 更新:actionchen<917981399@qq.com>
|
||||||
|
@ -11,7 +11,6 @@
|
||||||
#################
|
#################
|
||||||
# 引入所需的库
|
# 引入所需的库
|
||||||
#################
|
#################
|
||||||
from genericpath import exists
|
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
import time
|
import time
|
||||||
|
@ -29,7 +28,7 @@ import tkinter.messagebox as messagebox
|
||||||
import tkinter.filedialog as filedialog
|
import tkinter.filedialog as filedialog
|
||||||
import tkinter.simpledialog as simpledialog
|
import tkinter.simpledialog as simpledialog
|
||||||
from getxmlimg import getsavexml
|
from getxmlimg import getsavexml
|
||||||
from tkinter.constants import TOP
|
|
||||||
|
|
||||||
# 卸载程序
|
# 卸载程序
|
||||||
def UninstallProgram(package: "apk 包名")->"卸载程序":
|
def UninstallProgram(package: "apk 包名")->"卸载程序":
|
||||||
|
@ -100,7 +99,7 @@ def InstallApk(path: "apk 路径", quit: "是否静默安装" = False):
|
||||||
try:
|
try:
|
||||||
if not os.path.exists("{}/.local/share/applications/uengine/".format(get_home())):
|
if not os.path.exists("{}/.local/share/applications/uengine/".format(get_home())):
|
||||||
print("Mkdir")
|
print("Mkdir")
|
||||||
os.mkdir("{}/.local/share/applications/uengine/".format(get_home()))
|
os.makedirs("{}/.local/share/applications/uengine/".format(get_home()))
|
||||||
print("start install apk")
|
print("start install apk")
|
||||||
global findApkHistory
|
global findApkHistory
|
||||||
commandReturn = GetCommandReturn("pkexec /usr/bin/uengine-session-launch-helper -- uengine install --apk='{}'".format(path))
|
commandReturn = GetCommandReturn("pkexec /usr/bin/uengine-session-launch-helper -- uengine install --apk='{}'".format(path))
|
||||||
|
@ -455,61 +454,19 @@ def UengineRestart()->"重启 uengine 服务":
|
||||||
os.system("systemctl restart uengine*")
|
os.system("systemctl restart uengine*")
|
||||||
DisabledAndEnbled(False)
|
DisabledAndEnbled(False)
|
||||||
|
|
||||||
# 运行命令的窗口
|
def ScrcpyConnectUengine():
|
||||||
class InstallWindow():
|
if os.path.exists("/snap/bin/scrcpy"):
|
||||||
# 显示窗口
|
threading.Thread(target=os.system, args=["/snap/bin/scrcpy -s '192.168.250.2:5555'"]).start()
|
||||||
def ShowWindows(command):
|
return
|
||||||
global message
|
if messagebox.askyesno(title="提示", message="你没有安装Scrcpy(指使用Snap安装),\n如果你使用了其他方法安装了Scrcpy,可以输入命令“scrcpy -s '192.168.250.2:5555'”,\n是否现在要使用Snap安装Scrcpy?"):
|
||||||
global text
|
if not os.path.exists("/tmp/uengine-runner"):
|
||||||
global installTipsText
|
os.makedirs("/tmp/uengine-runner")
|
||||||
global progressbar
|
write_txt("/tmp/uengine-runner/InstallScrcpy.sh", '''#!/bin/bash
|
||||||
message = tk.Toplevel()
|
sudo apt install snapd -y
|
||||||
message.iconphoto(False, tk.PhotoImage(file=iconPath))
|
sudo snap refresh
|
||||||
messageFrame = ttk.Frame(message)
|
sudo snap install scrcpy''')
|
||||||
installTipsText = tk.StringVar()
|
threading.Thread(target=InstallWindow.ShowWindows, args=["chmod 777 /tmp/uengine-runner/InstallScrcpy.sh -Rv && pkexec /tmp/uengine-runner/InstallScrcpy.sh"]).start()
|
||||||
message.title("正在操作……")
|
return
|
||||||
installTipsText.set("正在操作……")
|
|
||||||
installTips = ttk.Label(messageFrame, textvariable=installTipsText)
|
|
||||||
progressbar = ttk.Progressbar(messageFrame, length=500, mode='indeterminate')
|
|
||||||
text = tk.Text(messageFrame)
|
|
||||||
text.config(background="black", foreground="white")
|
|
||||||
installTips.pack()
|
|
||||||
progressbar.pack(fill="x")
|
|
||||||
text.pack(expand='yes', fill='both')
|
|
||||||
messageFrame.pack(expand='yes', fill='both')
|
|
||||||
print("Run!")
|
|
||||||
threading.Thread(target=InstallWindow.RunCommand, args=[command]).start()
|
|
||||||
message.mainloop()
|
|
||||||
|
|
||||||
# 运行命令并显示
|
|
||||||
def RunCommand(command):
|
|
||||||
global message
|
|
||||||
global text
|
|
||||||
global progressbar
|
|
||||||
global installTipsText
|
|
||||||
InstallWindow.AddText("$>" + command + "\n")
|
|
||||||
progressbar.start()
|
|
||||||
result = subprocess.getoutput(command)
|
|
||||||
InstallWindow.AddText(result)
|
|
||||||
messagebox.showinfo(title="提示", message="操作完毕!")
|
|
||||||
installTipsText.set("操作完毕!")
|
|
||||||
message.title("操作完毕!")
|
|
||||||
progressbar.stop()
|
|
||||||
progressbar["value"] = 100
|
|
||||||
# 特意添加!
|
|
||||||
DisabledAndEnbled(False)
|
|
||||||
print("Clean!")
|
|
||||||
if messagebox.askyesno(title="提示", message="清空完毕,将会在重启后生效,是否要重启?"):
|
|
||||||
print("reboot")
|
|
||||||
os.system("reboot")
|
|
||||||
|
|
||||||
# 添加文本
|
|
||||||
def AddText(things):
|
|
||||||
global text
|
|
||||||
text.configure(state=tk.NORMAL)
|
|
||||||
text.insert("end", things)
|
|
||||||
text.configure(state=tk.DISABLED)
|
|
||||||
|
|
||||||
|
|
||||||
# 获取用户桌面目录
|
# 获取用户桌面目录
|
||||||
def get_desktop_path()->"获取用户桌面目录":
|
def get_desktop_path()->"获取用户桌面目录":
|
||||||
|
@ -552,10 +509,10 @@ def get_home()->"获取用户主目录":
|
||||||
|
|
||||||
# 删除所有的 uengine 应用快捷方式
|
# 删除所有的 uengine 应用快捷方式
|
||||||
def CleanAllUengineDesktopLink():
|
def CleanAllUengineDesktopLink():
|
||||||
if messagebox.askokcancel(title="提示", message="你确定要删除所有的 uengine 应用快捷方式吗?"):
|
if messagebox.askokcancel(title="提示", message="你确定要删除所有的 UEngine 应用快捷方式吗?"):
|
||||||
try:
|
try:
|
||||||
shutil.rmtree("{}/.local/share/applications/uengine".format(get_home()))
|
shutil.rmtree("{}/.local/share/applications/uengine".format(get_home()))
|
||||||
os.mkdir("{}/.local/share/applications/uengine".format(get_home()))
|
os.makedirs("{}/.local/share/applications/uengine".format(get_home()))
|
||||||
messagebox.showinfo(title="提示", message="删除完毕!")
|
messagebox.showinfo(title="提示", message="删除完毕!")
|
||||||
except:
|
except:
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
|
@ -573,6 +530,202 @@ def OpenUengineRootData():
|
||||||
def OpenUengineUserData():
|
def OpenUengineUserData():
|
||||||
threading.Thread(target=os.system, args=["xdg-open ~/安卓应用文件"]).start()
|
threading.Thread(target=os.system, args=["xdg-open ~/安卓应用文件"]).start()
|
||||||
|
|
||||||
|
# 终端显示 adb 命令行
|
||||||
|
def AdbShellShowInTer():
|
||||||
|
os.system("adb connect 192.168.250.2:5555")
|
||||||
|
threading.Thread(target=os.system, args=["deepin-terminal -w ~ -e 'adb -s 192.168.250.2:5555 shell'"]).start()
|
||||||
|
|
||||||
|
# 终端显示 adb top
|
||||||
|
def AdbCPUAndRAWShowInTer():
|
||||||
|
os.system("adb connect 192.168.250.2:5555")
|
||||||
|
threading.Thread(target=os.system, args=["deepin-terminal -w ~ -e 'adb -s 192.168.250.2:5555 shell top'"]).start()
|
||||||
|
|
||||||
|
def UengineSettingShow():
|
||||||
|
threading.Thread(target=os.system, args=["/usr/bin/uengine-launch.sh --action=android.intent.action.MAIN --package=com.android.settings --component=com.android.settings.Settings"]).start()
|
||||||
|
|
||||||
|
# 杀死 adb 进程
|
||||||
|
def AdbKillAdbProgress():
|
||||||
|
os.system("killall adb")
|
||||||
|
messagebox.showinfo(title="提示", message="完成!")
|
||||||
|
|
||||||
|
# 关闭 adb 服务
|
||||||
|
def AdbStopServer():
|
||||||
|
os.system("adb kill-server")
|
||||||
|
messagebox.showinfo(title="提示", message="完成!")
|
||||||
|
|
||||||
|
# 开启 adb 服务
|
||||||
|
def AdbStartServer():
|
||||||
|
os.system("adb start-server")
|
||||||
|
messagebox.showinfo(title="提示", message="完成!")
|
||||||
|
|
||||||
|
# 使用 adb 连接 uengine
|
||||||
|
def UengineConnectAdb():
|
||||||
|
messagebox.showinfo(title="提示", message=subprocess.getoutput("adb connect 192.168.250.2:5555"))
|
||||||
|
|
||||||
|
# 允许用户使用 adb
|
||||||
|
def UengineUseAdb():
|
||||||
|
# 因为需要 root,所以需要开二号程序
|
||||||
|
os.system("adb start-server") # 保证有生成文件
|
||||||
|
os.system("pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY {}/uengine-useadb 0 '{}'".format(programPath, "{}/.android/adbkey.pub".format(get_home()))) # 写入配置
|
||||||
|
if messagebox.askyesno(title="提示", message="是否要连接到 UEngine?"):
|
||||||
|
UengineConnectAdb()
|
||||||
|
|
||||||
|
def UengineDoNotUseAdb():
|
||||||
|
# 因为需要 root,所以需要开二号程序
|
||||||
|
if not os.path.exists("/data/uengine/data/data/misc/adb/adb_keys"):
|
||||||
|
messagebox.showinfo(title="提示", message="你的 uengine 在设置前已经禁用 adb 连接,无需重复设置")
|
||||||
|
return
|
||||||
|
threading.Thread(target=os.system, args=["pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY {}/uengine-useadb 1".format(programPath)]).start()
|
||||||
|
|
||||||
|
def AdbConnectDeviceShow():
|
||||||
|
ShowTextTipsWindow.ShowWindow(subprocess.getoutput("adb devices -l"))
|
||||||
|
|
||||||
|
def AdbAndroidInstallAppList():
|
||||||
|
ShowTextTipsWindow.ShowWindow('''系统应用:
|
||||||
|
{}
|
||||||
|
第三方应用:
|
||||||
|
{}
|
||||||
|
全部应用以及apk所在路径:
|
||||||
|
{}'''.format(subprocess.getoutput("adb -s 192.168.250.2:5555 shell pm list packages -s"),
|
||||||
|
subprocess.getoutput("adb -s 192.168.250.2:5555 shell pm list package -3"),
|
||||||
|
subprocess.getoutput("adb -s 192.168.250.2:5555 shell pm list packages -f")))
|
||||||
|
|
||||||
|
class AdbChangeUengineDisplaySize():
|
||||||
|
def ShowWindows():
|
||||||
|
global displayX
|
||||||
|
global displayY
|
||||||
|
global displaySize
|
||||||
|
message = tk.Toplevel()
|
||||||
|
messageFrame = ttk.Frame(message)
|
||||||
|
|
||||||
|
displaySize = tk.StringVar()
|
||||||
|
displaySize.set("当前 UEngine 屏幕分辨率:正在获取")
|
||||||
|
|
||||||
|
displaySizeLabel = ttk.Label(messageFrame, textvariable=displaySize)
|
||||||
|
|
||||||
|
input = ttk.Frame(messageFrame)
|
||||||
|
displayX = ttk.Entry(input)
|
||||||
|
displayY = ttk.Entry(input)
|
||||||
|
|
||||||
|
settingBUtton = ttk.Button(messageFrame, text="设置分辨率", command=AdbChangeUengineDisplaySize.SettingDisplaySize)
|
||||||
|
|
||||||
|
message.title("修改 UEngine 分辨率")
|
||||||
|
message.resizable(0, 0)
|
||||||
|
message.iconphoto(False, tk.PhotoImage(file=iconPath))
|
||||||
|
# get screen width and height
|
||||||
|
screen_width = message.winfo_screenwidth()
|
||||||
|
screen_height = message.winfo_screenheight()
|
||||||
|
# calculate position x and y coordinates 假设主窗口大小固定 570x236像素 ,设置窗口位置为屏幕中心。
|
||||||
|
winwith=570
|
||||||
|
winhigh=236
|
||||||
|
x = (screen_width/2) - (winwith/2)
|
||||||
|
y = (screen_height/2) - (winhigh/2)
|
||||||
|
message.geometry("+{}+{}".format(int(x), int(y)))
|
||||||
|
|
||||||
|
displayX.grid(row=0, column=0)
|
||||||
|
displayY.grid(row=0, column=1)
|
||||||
|
|
||||||
|
displaySizeLabel.grid(row=0, column=0)
|
||||||
|
input.grid(row=1, column=0)
|
||||||
|
settingBUtton.grid(row=2, column=0)
|
||||||
|
|
||||||
|
messageFrame.pack()
|
||||||
|
threading.Thread(target=AdbChangeUengineDisplaySize.GetUengineDisplaySize).start()
|
||||||
|
message.mainloop()
|
||||||
|
|
||||||
|
def GetUengineDisplaySize():
|
||||||
|
global displaySize
|
||||||
|
displaySize.set("当前 UEngine 屏幕分辨率:\n" + subprocess.getoutput("adb -s '192.168.250.2:5555' shell wm size"))
|
||||||
|
#displaySize.set(subprocess.getoutput("adb -s '192.168.250.2:5555' shell wm size"))
|
||||||
|
|
||||||
|
def SettingDisplaySize():
|
||||||
|
global displayX
|
||||||
|
global displayY
|
||||||
|
try:
|
||||||
|
int(displayX.get())
|
||||||
|
int(displayY.get())
|
||||||
|
except:
|
||||||
|
messagebox.showerror(title="错误", message="你输入的数值不正确!")
|
||||||
|
return
|
||||||
|
os.system("adb -s '192.168.250.2:5555' shell wm size {}x{}".format(displayX.get(), displayY.get()))
|
||||||
|
AdbChangeUengineDisplaySize.GetUengineDisplaySize()
|
||||||
|
messagebox.showinfo(title="提示", message="执行完毕!")
|
||||||
|
|
||||||
|
# 运行命令的窗口
|
||||||
|
class InstallWindow():
|
||||||
|
# 显示窗口
|
||||||
|
def ShowWindows(command):
|
||||||
|
global message
|
||||||
|
global text
|
||||||
|
global installTipsText
|
||||||
|
global progressbar
|
||||||
|
global runCommand
|
||||||
|
message = tk.Toplevel()
|
||||||
|
message.iconphoto(False, tk.PhotoImage(file=iconPath))
|
||||||
|
messageFrame = ttk.Frame(message)
|
||||||
|
installTipsText = tk.StringVar()
|
||||||
|
message.title("正在操作……")
|
||||||
|
installTipsText.set("正在操作……")
|
||||||
|
installTips = ttk.Label(messageFrame, textvariable=installTipsText)
|
||||||
|
progressbar = ttk.Progressbar(messageFrame, length=500, mode='indeterminate')
|
||||||
|
text = tk.Text(messageFrame)
|
||||||
|
text.config(background="black", foreground="white")
|
||||||
|
installTips.pack()
|
||||||
|
progressbar.pack(fill="x")
|
||||||
|
text.pack(expand='yes', fill='both')
|
||||||
|
messageFrame.pack(expand='yes', fill='both')
|
||||||
|
print("Run!")
|
||||||
|
threading.Thread(target=InstallWindow.RunCommand, args=[command]).start()
|
||||||
|
message.mainloop()
|
||||||
|
|
||||||
|
# 运行命令并显示
|
||||||
|
def RunCommand(command):
|
||||||
|
global message
|
||||||
|
global text
|
||||||
|
global progressbar
|
||||||
|
global installTipsText
|
||||||
|
InstallWindow.AddText("$>" + command + "\n")
|
||||||
|
progressbar.start()
|
||||||
|
result = subprocess.getoutput(command)
|
||||||
|
InstallWindow.AddText(result)
|
||||||
|
messagebox.showinfo(title="提示", message="操作完毕!")
|
||||||
|
installTipsText.set("操作完毕!")
|
||||||
|
message.title("操作完毕!")
|
||||||
|
progressbar.stop()
|
||||||
|
progressbar["value"] = 100
|
||||||
|
# 特意添加!
|
||||||
|
DisabledAndEnbled(False)
|
||||||
|
if command == "pkexec rm -rfv /data/uengine":
|
||||||
|
print("Clean!")
|
||||||
|
if messagebox.askyesno(title="提示", message="清空完毕,将会在重启后生效,是否要重启?"):
|
||||||
|
print("reboot")
|
||||||
|
os.system("reboot")
|
||||||
|
|
||||||
|
# 添加文本
|
||||||
|
def AddText(things):
|
||||||
|
global text
|
||||||
|
text.configure(state=tk.NORMAL)
|
||||||
|
text.insert("end", things)
|
||||||
|
text.configure(state=tk.DISABLED)
|
||||||
|
|
||||||
|
class ShowTextTipsWindow():
|
||||||
|
def ShowWindow(things):
|
||||||
|
message = tk.Toplevel()
|
||||||
|
|
||||||
|
message.title("提示")
|
||||||
|
message.iconphoto(False, tk.PhotoImage(file=iconPath))
|
||||||
|
|
||||||
|
text = tk.Text(message)
|
||||||
|
quitButton = ttk.Button(message, text="确定", command=message.destroy)
|
||||||
|
|
||||||
|
text.insert("end", things)
|
||||||
|
text.configure(state=tk.DISABLED)
|
||||||
|
|
||||||
|
text.pack(fill="both", expand="yes")
|
||||||
|
quitButton.pack()
|
||||||
|
|
||||||
|
message.mainloop()
|
||||||
|
|
||||||
# 添加/删除 uengine 应用快捷方式
|
# 添加/删除 uengine 应用快捷方式
|
||||||
class AddNewUengineDesktopLink():
|
class AddNewUengineDesktopLink():
|
||||||
addTips = '''可以输入app的包名和Activity或通过浏览apk文件来获取包名和Activity
|
addTips = '''可以输入app的包名和Activity或通过浏览apk文件来获取包名和Activity
|
||||||
|
@ -591,8 +744,9 @@ class AddNewUengineDesktopLink():
|
||||||
saveButton = ttk.Button(controlFrame, text="写入", command=AddNewUengineDesktopLink.SaveDesktopLink)
|
saveButton = ttk.Button(controlFrame, text="写入", command=AddNewUengineDesktopLink.SaveDesktopLink)
|
||||||
delButton = ttk.Button(controlFrame, text="删除", command=AddNewUengineDesktopLink.DelDesktopLink)
|
delButton = ttk.Button(controlFrame, text="删除", command=AddNewUengineDesktopLink.DelDesktopLink)
|
||||||
|
|
||||||
message.title("添加/删除 uengine 图标")
|
message.title("添加/删除 UEngine 图标")
|
||||||
message.resizable(0, 0)
|
message.resizable(0, 0)
|
||||||
|
message.iconphoto(False, tk.PhotoImage(file=iconPath))
|
||||||
# get screen width and height
|
# get screen width and height
|
||||||
screen_width = message.winfo_screenwidth()
|
screen_width = message.winfo_screenwidth()
|
||||||
screen_height = message.winfo_screenheight()
|
screen_height = message.winfo_screenheight()
|
||||||
|
@ -636,7 +790,7 @@ class AddNewUengineDesktopLink():
|
||||||
def DelDesktopLink():
|
def DelDesktopLink():
|
||||||
global packageName
|
global packageName
|
||||||
if not os.path.exists("{}/.local/share/applications/uengine/{}.desktop".format(get_home(), packageName.get())):
|
if not os.path.exists("{}/.local/share/applications/uengine/{}.desktop".format(get_home(), packageName.get())):
|
||||||
messagebox.showerror(title="错误", message="此包名对应的uengine桌面快捷方式不存在!")
|
messagebox.showerror(title="错误", message="此包名对应的 UEngine 桌面快捷方式不存在!")
|
||||||
return
|
return
|
||||||
if not messagebox.askyesno(title="提示", message="你确定要删除吗?删除后将无法恢复!"):
|
if not messagebox.askyesno(title="提示", message="你确定要删除吗?删除后将无法恢复!"):
|
||||||
return
|
return
|
||||||
|
@ -671,6 +825,27 @@ class AddNewUengineDesktopLink():
|
||||||
activityName.set(GetApkActivityName(path))
|
activityName.set(GetApkActivityName(path))
|
||||||
write_txt(get_home() + "/.config/uengine-runner/FindApkName.json", json.dumps({"path": os.path.dirname(path)})) # 写入配置文件
|
write_txt(get_home() + "/.config/uengine-runner/FindApkName.json", json.dumps({"path": os.path.dirname(path)})) # 写入配置文件
|
||||||
|
|
||||||
|
def UseProgram():
|
||||||
|
global useProgram
|
||||||
|
useProgram = '''1、UEngine:{}
|
||||||
|
2、python3:{}
|
||||||
|
3、tkinter:{}
|
||||||
|
4、aapt:{}
|
||||||
|
5、dpkg:{}
|
||||||
|
6、mkdir:{}
|
||||||
|
7、echo
|
||||||
|
8、chmod:{}
|
||||||
|
9、adb:{}
|
||||||
|
10、deepin 终端:{}'''.format(subprocess.getoutput("uengine version"),
|
||||||
|
subprocess.getoutput("python3 --version"),
|
||||||
|
tk.TkVersion,
|
||||||
|
subprocess.getoutput("aapt version"),
|
||||||
|
subprocess.getoutput("dpkg --version"),
|
||||||
|
subprocess.getoutput("mkdir --version"),
|
||||||
|
subprocess.getoutput("chmod --version"),
|
||||||
|
subprocess.getoutput("adb version"),
|
||||||
|
subprocess.getoutput("deepin-terminal -v"))
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# 程序信息
|
# 程序信息
|
||||||
###########################
|
###########################
|
||||||
|
@ -680,38 +855,34 @@ programUrl = information["Url"][0]
|
||||||
version = information["Version"]
|
version = information["Version"]
|
||||||
goodRunSystem = information["System"]
|
goodRunSystem = information["System"]
|
||||||
aaptVersion = GetCommandReturn("aapt version")
|
aaptVersion = GetCommandReturn("aapt version")
|
||||||
about = ''' 一个基于 Python3 的 tkinter 制作的 uengine APK 运行器
|
about = '''介绍 :一个基于 Python3 的 tkinter 制作的 UEngine 运行器,在新版本Deepin/UOS发布后,可以在应用商店安装部分官方已适配的安卓应用,对爱好者来说,不能自己安装APK软件包始终差点意思,本程序可以为Deepin/UOS上的UEngine安卓运行环境安装自定义APK软件包,并能发送安装的APK包启动菜单到桌面或系统菜单。
|
||||||
|
|
||||||
版本 :{}
|
版本 :{}
|
||||||
|
|
||||||
适用平台 :{}
|
适用平台 :{}
|
||||||
|
|
||||||
tkinter版本:{}
|
|
||||||
|
|
||||||
aapt 版本 :{}
|
|
||||||
|
|
||||||
程序官网 :{}
|
程序官网 :{}
|
||||||
|
|
||||||
©2021-{}'''.format(version, goodRunSystem, tk.TkVersion, aaptVersion,programUrl, time.strftime("%Y"))
|
©2021-{}'''.format(version, goodRunSystem, tk.TkVersion, programUrl, time.strftime("%Y"))
|
||||||
tips = "\n".join(information["Tips"])
|
tips = "\n".join(information["Tips"])
|
||||||
updateThingsString = "\n".join(information["Update"])
|
updateThingsString = "\n".join(information["Update"])
|
||||||
title = "uengine 运行器 {}".format(version)
|
title = "UEngine 运行器 {}".format(version)
|
||||||
updateTime = information["Time"]
|
updateTime = information["Time"]
|
||||||
updateThings = "{} 更新内容:\n{}\n更新时间:{}".format(version, updateThingsString, updateTime, time.strftime("%Y"))
|
updateThings = "{} 更新内容:\n{}\n更新时间:{}".format(version, updateThingsString, updateTime, time.strftime("%Y"))
|
||||||
iconPath = "{}/icon.png".format(os.path.split(os.path.realpath(__file__))[0])
|
iconPath = "{}/icon.png".format(os.path.split(os.path.realpath(__file__))[0])
|
||||||
desktop = programPath + "/UengineAndroidProgramList.desktop"
|
desktop = programPath + "/UengineAndroidProgramList.desktop"
|
||||||
desktopName = "UengineAndroidProgramList.desktop"
|
desktopName = "UengineAndroidProgramList.desktop"
|
||||||
contribute = "\n".join(information["Contribute"])
|
contribute = "\n".join(information["Contribute"])
|
||||||
useProgram = "\n".join(information["Use"])
|
useProgram = ""
|
||||||
|
threading.Thread(target=UseProgram).start()
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# 加载配置
|
# 加载配置
|
||||||
###########################
|
###########################
|
||||||
if not os.path.exists("{}/.local/share/applications/uengine/".format(get_home())):
|
if not os.path.exists("{}/.local/share/applications/uengine/".format(get_home())):
|
||||||
os.mkdir("{}/.local/share/applications/uengine/".format(get_home()))
|
os.makedirs("{}/.local/share/applications/uengine/".format(get_home()))
|
||||||
if not os.path.exists(get_home() + "/.config/uengine-runner"): # 如果没有配置文件夹
|
if not os.path.exists(get_home() + "/.config/uengine-runner"): # 如果没有配置文件夹
|
||||||
os.mkdir(get_home() + "/.config/uengine-runner") # 创建配置文件夹
|
os.makedirs(get_home() + "/.config/uengine-runner") # 创建配置文件夹
|
||||||
if not os.path.exists(get_home() + "/.config/uengine-runner/FindApkHistory.json"): # 如果没有配置文件
|
if not os.path.exists(get_home() + "/.config/uengine-runner/FindApkHistory.json"): # 如果没有配置文件
|
||||||
write_txt(get_home() + "/.config/uengine-runner/FindApkHistory.json", json.dumps({})) # 创建配置文件
|
write_txt(get_home() + "/.config/uengine-runner/FindApkHistory.json", json.dumps({})) # 创建配置文件
|
||||||
if not os.path.exists(get_home() + "/.config/uengine-runner/FindApkNameHistory.json"): # 如果没有配置文件
|
if not os.path.exists(get_home() + "/.config/uengine-runner/FindApkNameHistory.json"): # 如果没有配置文件
|
||||||
|
@ -752,7 +923,7 @@ def showhelp():
|
||||||
helpwindow=tk.Toplevel()
|
helpwindow=tk.Toplevel()
|
||||||
helpwindow.resizable(0, 0)
|
helpwindow.resizable(0, 0)
|
||||||
helpwindow.title("帮助")
|
helpwindow.title("帮助")
|
||||||
|
helpwindow.iconphoto(False, tk.PhotoImage(file=iconPath))
|
||||||
|
|
||||||
# get screen width and height
|
# get screen width and height
|
||||||
screen_width = helpwindow.winfo_screenwidth()
|
screen_width = helpwindow.winfo_screenwidth()
|
||||||
|
@ -794,6 +965,9 @@ def showhelp():
|
||||||
def ChgAbout():
|
def ChgAbout():
|
||||||
HelpStr.set(about)
|
HelpStr.set(about)
|
||||||
def ChgDep():
|
def ChgDep():
|
||||||
|
if useProgram == "":
|
||||||
|
BtnZujian.configure(state=tk.DISABLED)
|
||||||
|
return
|
||||||
HelpStr.set(useProgram)
|
HelpStr.set(useProgram)
|
||||||
def ChgCon():
|
def ChgCon():
|
||||||
HelpStr.set(contribute)
|
HelpStr.set(contribute)
|
||||||
|
@ -861,7 +1035,7 @@ ComboInstallPath = ttk.Combobox(window, width=50)
|
||||||
ComboUninstallPath = ttk.Combobox(window, width=50)
|
ComboUninstallPath = ttk.Combobox(window, width=50)
|
||||||
BtnFindApk = ttk.Button(FrmInstall, text="浏览", command=FindApk)
|
BtnFindApk = ttk.Button(FrmInstall, text="浏览", command=FindApk)
|
||||||
BtnInstall = ttk.Button(FrmInstall, text="安装", command=Button3Install)
|
BtnInstall = ttk.Button(FrmInstall, text="安装", command=Button3Install)
|
||||||
BtnShowUengineApp = ttk.Button(window, text="打开 uengine 应用列表", command=Button5Click)
|
BtnShowUengineApp = ttk.Button(window, text="打开 UEngine 应用列表", command=Button5Click)
|
||||||
BtnUninstallApkBrowser = ttk.Button(FrmUninstall, text="浏览", command=BtnFindUninstallApkClk)
|
BtnUninstallApkBrowser = ttk.Button(FrmUninstall, text="浏览", command=BtnFindUninstallApkClk)
|
||||||
BtnUninstall = ttk.Button(FrmUninstall, text="卸载", command=ButtonClick8)
|
BtnUninstall = ttk.Button(FrmUninstall, text="卸载", command=ButtonClick8)
|
||||||
Btngeticon = ttk.Button(FrmInstall, text="保存图标", command=SaveIconToOtherPath)
|
Btngeticon = ttk.Button(FrmInstall, text="保存图标", command=SaveIconToOtherPath)
|
||||||
|
@ -870,61 +1044,93 @@ BtnSaveApk = ttk.Button(FrmInstall, text="保存apk", command=SaveInstallUengine
|
||||||
menu = tk.Menu(window, background="white")
|
menu = tk.Menu(window, background="white")
|
||||||
|
|
||||||
programmenu = tk.Menu(menu, tearoff=0, background="white") # 设置“程序”菜单栏
|
programmenu = tk.Menu(menu, tearoff=0, background="white") # 设置“程序”菜单栏
|
||||||
|
adb = tk.Menu(menu, tearoff=0, background="white")
|
||||||
uengine = tk.Menu(menu, tearoff=0, background="white")
|
uengine = tk.Menu(menu, tearoff=0, background="white")
|
||||||
help = tk.Menu(menu, tearoff=0, background="white") # 设置“帮助”菜单栏
|
help = tk.Menu(menu, tearoff=0, background="white") # 设置“帮助”菜单栏
|
||||||
|
|
||||||
uengineService = tk.Menu(uengine)
|
adbServer = tk.Menu(adb, tearoff=0, background="white")
|
||||||
uengineInternet = tk.Menu(uengine)
|
|
||||||
uengineIcon = tk.Menu(uengine)
|
uengineService = tk.Menu(uengine, tearoff=0, background="white")
|
||||||
uengineData = tk.Menu(uengine)
|
uengineInternet = tk.Menu(uengine, tearoff=0, background="white")
|
||||||
|
uengineIcon = tk.Menu(uengine, tearoff=0, background="white")
|
||||||
|
uengineUseAdb = tk.Menu(uengine, tearoff=0, background="white")
|
||||||
|
uengineData = tk.Menu(uengine, tearoff=0, background="white")
|
||||||
|
|
||||||
menu.add_cascade(label="程序", menu=programmenu)
|
menu.add_cascade(label="程序", menu=programmenu)
|
||||||
menu.add_cascade(label="uengine", menu=uengine)
|
menu.add_cascade(label="adb", menu=adb)
|
||||||
|
menu.add_cascade(label="UEngine", menu=uengine)
|
||||||
menu.add_cascade(label="关于", menu=help)
|
menu.add_cascade(label="关于", menu=help)
|
||||||
|
|
||||||
programmenu.add_command(label="清空软件历史记录", command=CleanProgramHistory)
|
programmenu.add_command(label="清空软件历史记录", command=CleanProgramHistory)
|
||||||
programmenu.add_separator() # 设置分界线
|
programmenu.add_separator() # 设置分界线
|
||||||
programmenu.add_command(label="退出程序", command=window.quit) # 设置“退出程序”
|
programmenu.add_command(label="退出程序", command=window.quit) # 设置“退出程序”
|
||||||
|
|
||||||
uengine.add_command(label="uengine 应用打包", command=OpenUengineDebBuilder)
|
adb.add_command(label="adb 连接 UEngine", command=UengineConnectAdb)
|
||||||
uengine.add_command(label="uengine 键盘映射", command=KeyboardToMouse)
|
adb.add_separator()
|
||||||
uengine.add_cascade(label="uengine 服务", menu=uengineService)
|
adb.add_cascade(label="adb 服务", menu=adbServer)
|
||||||
uengine.add_cascade(label="uengine 网络桥接", menu=uengineInternet)
|
adb.add_command(label="显示 adb 连接的设备", command=AdbConnectDeviceShow)
|
||||||
uengine.add_cascade(label="uengine 快捷方式", menu=uengineIcon)
|
adb.add_separator()
|
||||||
uengine.add_cascade(label="uengine 数据", menu=uengineData)
|
adb.add_command(label="adb 修改 UEngine 分辨率", command=AdbChangeUengineDisplaySize.ShowWindows)
|
||||||
|
adb.add_command(label="adb 查看 UEngine 应用列表", command=AdbAndroidInstallAppList)
|
||||||
|
adb.add_command(label="adb 查看 UEngine 资源使用情况", command=AdbCPUAndRAWShowInTer)
|
||||||
|
adb.add_command(label="打开 adb 连接 UEngine 的终端", command=AdbShellShowInTer)
|
||||||
|
adb.add_command(label="使用 Scrcpy 连接 UEngine(只支持使用snap安装的Scrcpy)", command=ScrcpyConnectUengine)
|
||||||
|
adb.add_separator()
|
||||||
|
adb.add_cascade(label="UEngine 使用 adb", menu=uengineUseAdb)
|
||||||
|
|
||||||
|
adbServer.add_command(label="开启 adb 服务", command=AdbStartServer)
|
||||||
|
adbServer.add_command(label="关闭 adb 服务", command=AdbStopServer)
|
||||||
|
adbServer.add_command(label="杀死 adb 进程", command=AdbKillAdbProgress)
|
||||||
|
|
||||||
|
uengine.add_command(label="UEngine 系统设置", command=UengineSettingShow)
|
||||||
|
uengine.add_command(label="UEngine 应用打包", command=OpenUengineDebBuilder)
|
||||||
|
#uengine.add_command(label="UEngine 键盘映射", command=KeyboardToMouse)
|
||||||
|
uengine.add_cascade(label="UEngine 服务", menu=uengineService)
|
||||||
|
uengine.add_cascade(label="UEngine 网络桥接", menu=uengineInternet)
|
||||||
|
uengine.add_cascade(label="UEngine 快捷方式", menu=uengineIcon)
|
||||||
|
uengine.add_cascade(label="UEngine 使用 adb", menu=uengineUseAdb)
|
||||||
|
uengine.add_cascade(label="UEngine 数据", menu=uengineData)
|
||||||
|
|
||||||
help.add_command(label="程序官网", command=OpenProgramURL) # 设置“程序官网”项
|
help.add_command(label="程序官网", command=OpenProgramURL) # 设置“程序官网”项
|
||||||
help.add_command(label="帮助", command=showhelp) # 设置“关于这个程序”项
|
help.add_command(label="帮助", command=showhelp) # 设置“关于这个程序”项
|
||||||
|
|
||||||
uengineService.add_command(label="启用 uengine 服务", command=StartUengine)
|
uengineService.add_command(label="启用 UEngine 服务(需要 root)", command=StartUengine)
|
||||||
uengineService.add_command(label="关闭 uengine 服务", command=StopUengine)
|
uengineService.add_command(label="关闭 UEngine 服务(需要 root)", command=StopUengine)
|
||||||
uengineService.add_command(label="重启 uengine 服务", command=UengineRestart)
|
uengineService.add_command(label="重启 UEngine 服务(需要 root)", command=UengineRestart)
|
||||||
|
|
||||||
uengineInternet.add_command(label="启用 uengine 网络桥接", command=UengineBridgeStart)
|
uengineInternet.add_command(label="启用 UEngine 网络桥接(需要 root)", command=UengineBridgeStart)
|
||||||
uengineInternet.add_command(label="关闭 uengine 网络桥接", command=UengineBridgeStop)
|
uengineInternet.add_command(label="关闭 UEngine 网络桥接(需要 root)", command=UengineBridgeStop)
|
||||||
uengineInternet.add_command(label="重启 uengine 网络桥接", command=UengineBridgeRestart)
|
uengineInternet.add_command(label="重启 UEngine 网络桥接(需要 root)", command=UengineBridgeRestart)
|
||||||
uengineInternet.add_command(label="加载 uengine 网络桥接", command=UengineBridgeReload)
|
uengineInternet.add_command(label="加载 UEngine 网络桥接(需要 root)", command=UengineBridgeReload)
|
||||||
uengineInternet.add_command(label="强制加载 uengine 网络桥接", command=UengineBridgeForceReload)
|
uengineInternet.add_command(label="强制加载 UEngine 网络桥接(需要 root)", command=UengineBridgeForceReload)
|
||||||
|
|
||||||
uengineIcon.add_command(label="发送 uengine 应用列表到桌面", command=SendUengineAndroidListForDesktop)
|
uengineIcon.add_command(label="发送 UEngine 应用列表到桌面", command=SendUengineAndroidListForDesktop)
|
||||||
uengineIcon.add_command(label="发送 uengine 应用列表到启动器", command=SendUengineAndroidListForLauncher)
|
uengineIcon.add_command(label="发送 UEngine 应用列表到启动器", command=SendUengineAndroidListForLauncher)
|
||||||
uengineIcon.add_separator()
|
uengineIcon.add_separator()
|
||||||
uengineIcon.add_command(label="添加/删除指定的 uengine 快捷方式", command=AddNewUengineDesktopLink.ShowWindow)
|
uengineIcon.add_command(label="添加/删除指定的 UEngine 快捷方式", command=AddNewUengineDesktopLink.ShowWindow)
|
||||||
uengineIcon.add_separator()
|
uengineIcon.add_separator()
|
||||||
uengineIcon.add_command(label="清空所有 uengine 快捷方式", command=CleanAllUengineDesktopLink)
|
uengineIcon.add_command(label="清空所有 UEngine 快捷方式", command=CleanAllUengineDesktopLink)
|
||||||
|
|
||||||
uengineData.add_command(label="打开 uengine 根目录", command=OpenUengineRootData)
|
uengineUseAdb.add_command(label="adb 连接 UEngine", command=UengineConnectAdb)
|
||||||
uengineData.add_command(label="打开 uengine 用户数据目录", command=OpenUengineUserData)
|
uengineUseAdb.add_separator()
|
||||||
|
uengineUseAdb.add_command(label="允许此设备使用 adb 连接本 UEngine(需要 root)", command=UengineUseAdb)
|
||||||
|
uengineUseAdb.add_command(label="禁止任何设备使用 adb 连接本 UEngine(需要 root)", command=UengineDoNotUseAdb)
|
||||||
|
|
||||||
|
uengineData.add_command(label="打开 UEngine 根目录", command=OpenUengineRootData)
|
||||||
|
uengineData.add_command(label="打开 UEngine 用户数据目录", command=OpenUengineUserData)
|
||||||
uengineData.add_separator()
|
uengineData.add_separator()
|
||||||
uengineData.add_command(label="清空 uengine 数据", command=BackUengineClean)
|
uengineData.add_command(label="清空 UEngine 数据(需要 root)", command=BackUengineClean)
|
||||||
|
|
||||||
menu.configure(activebackground="dodgerblue")
|
menu.configure(activebackground="dodgerblue")
|
||||||
help.configure(activebackground="dodgerblue")
|
help.configure(activebackground="dodgerblue")
|
||||||
|
adb.configure(activebackground="dodgerblue")
|
||||||
uengine.configure(activebackground="dodgerblue")
|
uengine.configure(activebackground="dodgerblue")
|
||||||
programmenu.configure(activebackground="dodgerblue")
|
programmenu.configure(activebackground="dodgerblue")
|
||||||
uengineService.configure(activebackground="dodgerblue")
|
uengineService.configure(activebackground="dodgerblue")
|
||||||
uengineInternet.configure(activebackground="dodgerblue")
|
uengineInternet.configure(activebackground="dodgerblue")
|
||||||
uengineIcon.configure(activebackground="dodgerblue")
|
uengineIcon.configure(activebackground="dodgerblue")
|
||||||
|
uengineUseAdb.configure(activebackground="dodgerblue")
|
||||||
|
uengineData.configure(activebackground="dodgerblue")
|
||||||
|
|
||||||
# 设置控件
|
# 设置控件
|
||||||
ComboUninstallPath['value'] = fineUninstallApkHistory
|
ComboUninstallPath['value'] = fineUninstallApkHistory
|
||||||
|
|
|
@ -2,8 +2,8 @@
|
||||||
# 使用系统默认的 python3 运行
|
# 使用系统默认的 python3 运行
|
||||||
###########################################################################################
|
###########################################################################################
|
||||||
# 作者:gfdgd xi
|
# 作者:gfdgd xi
|
||||||
# 版本:1.4.2
|
# 版本:1.4.3
|
||||||
# 更新时间:2021年8月30日
|
# 更新时间:2021年9月11日
|
||||||
# 感谢:anbox、deepin 和 统信
|
# 感谢:anbox、deepin 和 统信
|
||||||
# 基于 Python3 的 tkinter 构建
|
# 基于 Python3 的 tkinter 构建
|
||||||
###########################################################################################
|
###########################################################################################
|
||||||
|
@ -11,6 +11,7 @@
|
||||||
# 引入所需的库
|
# 引入所需的库
|
||||||
#################
|
#################
|
||||||
import os
|
import os
|
||||||
|
import threading
|
||||||
import time
|
import time
|
||||||
import json
|
import json
|
||||||
import ttkthemes
|
import ttkthemes
|
||||||
|
@ -52,7 +53,16 @@ iconPath = "{}/icon.png".format(os.path.split(os.path.realpath(__file__))[0])
|
||||||
desktop = "/opt/apps/uengine-runner/UengineAndroidProgramList.desktop"
|
desktop = "/opt/apps/uengine-runner/UengineAndroidProgramList.desktop"
|
||||||
desktopName = "UengineAndroidProgramList.desktop"
|
desktopName = "UengineAndroidProgramList.desktop"
|
||||||
contribute = "\n".join(information["Contribute"])
|
contribute = "\n".join(information["Contribute"])
|
||||||
useProgram = '''1、UEngine:{}
|
useProgram = ""
|
||||||
|
threading.Thread(target=useProgram).start()
|
||||||
|
|
||||||
|
# add sub window
|
||||||
|
#添加窗口开启关闭开关,防止重复开启
|
||||||
|
windowflag = "close"
|
||||||
|
|
||||||
|
def UseProgram():
|
||||||
|
global useProgram
|
||||||
|
useProgram = '''1、UEngine:{}
|
||||||
2、python3:{}
|
2、python3:{}
|
||||||
3、tkinter:{}
|
3、tkinter:{}
|
||||||
4、aapt:{}
|
4、aapt:{}
|
||||||
|
@ -71,10 +81,6 @@ useProgram = '''1、UEngine:{}
|
||||||
subprocess.getoutput("adb version"),
|
subprocess.getoutput("adb version"),
|
||||||
subprocess.getoutput("deepin-terminal -v"))
|
subprocess.getoutput("deepin-terminal -v"))
|
||||||
|
|
||||||
# add sub window
|
|
||||||
#添加窗口开启关闭开关,防止重复开启
|
|
||||||
windowflag = "close"
|
|
||||||
|
|
||||||
def showhelp():
|
def showhelp():
|
||||||
|
|
||||||
#define window and frame and button label
|
#define window and frame and button label
|
||||||
|
@ -127,6 +133,9 @@ def showhelp():
|
||||||
def ChgAbout():
|
def ChgAbout():
|
||||||
HelpStr.set(about)
|
HelpStr.set(about)
|
||||||
def ChgDep():
|
def ChgDep():
|
||||||
|
if useProgram == "":
|
||||||
|
BtnZujian.configure(state=tk.DISABLED)
|
||||||
|
return
|
||||||
HelpStr.set(useProgram)
|
HelpStr.set(useProgram)
|
||||||
def ChgCon():
|
def ChgCon():
|
||||||
HelpStr.set(contribute)
|
HelpStr.set(contribute)
|
||||||
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE policyconfig PUBLIC
|
||||||
|
"-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
|
||||||
|
"http://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd">
|
||||||
|
<policyconfig>
|
||||||
|
<vendor>gfdgd xi</vendor>
|
||||||
|
<vendor_url>https://gitee.com/gfdgd-xi/uengine-runner/</vendor_url>
|
||||||
|
<action id="com.deepin.pkexec.installscrcpy">
|
||||||
|
<message>Authentication is required to Install Scrcpy</message>
|
||||||
|
<message xml:lang="zh_CN">安装 Scrcpy 需要输入密码</message>
|
||||||
|
<icon_name>preferences-system</icon_name>
|
||||||
|
<defaults>
|
||||||
|
<allow_any>no</allow_any>
|
||||||
|
<allow_inactive>no</allow_inactive>
|
||||||
|
<allow_active>auth_admin_keep</allow_active>
|
||||||
|
</defaults>
|
||||||
|
<annotate key="org.freedesktop.policykit.exec.path">/tmp/uengine-runner/InstallScrcpy.sh</annotate>
|
||||||
|
<annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate>
|
||||||
|
</action>
|
||||||
|
|
||||||
|
</policyconfig>
|
Binary file not shown.
|
@ -421,6 +421,9 @@ programmenu.add_command(label="退出程序", command=window.quit) # 设置“
|
||||||
combobox1['value'] = findApkHistory
|
combobox1['value'] = findApkHistory
|
||||||
textbox1.configure(state=tk.DISABLED)
|
textbox1.configure(state=tk.DISABLED)
|
||||||
textbox1.config(foreground='white', background='black')
|
textbox1.config(foreground='white', background='black')
|
||||||
|
# 如果有参数
|
||||||
|
if len(sys.argv) > 1:
|
||||||
|
combobox1.set(sys.argv[1])
|
||||||
# 设置窗口
|
# 设置窗口
|
||||||
style = ttkthemes.ThemedStyle(win)
|
style = ttkthemes.ThemedStyle(win)
|
||||||
style.set_theme("breeze")
|
style.set_theme("breeze")
|
||||||
|
|
Loading…
Reference in New Issue