1.4.2
This commit is contained in:
parent
76d3710963
commit
4b889b6056
|
@ -1,7 +1,7 @@
|
|||
# uengine 运行器 1.4.0
|
||||
|
||||
### 介绍
|
||||
新版本Deepin/UOS发布后,可以在应用商店安装部分官方已适配的安卓应用,对爱好者来说,不能自己安装APK软件包始终差点意思,本程序可以为Deepin/UOS上的Uengine安卓运行环境安装自定义APK软件包,并能发送安装的APK包启动菜单到桌面或系统菜单。
|
||||
新版本Deepin/UOS发布后,可以在应用商店安装部分官方已适配的安卓应用,对爱好者来说,不能自己安装APK软件包始终差点意思,本程序可以为Deepin/UOS上的UEngine安卓运行环境安装自定义APK软件包,并能发送安装的APK包启动菜单到桌面或系统菜单。
|
||||
![1.4.1](https://storage.deepin.org/thread/20210826151947783_截图_选择区域_20210826151312.png)
|
||||
(测试平台:UOS 家庭版,deepin 20.2.2,UOS 专业版 1040)
|
||||
(自己美术功底太差,图标直接用 anbox 的了)
|
||||
|
@ -115,7 +115,7 @@ pip3 uninstall ttkthemes
|
|||
|
||||
### 使用说明
|
||||
1、需要你有使用 root 权限的能力;
|
||||
2、需要安装 uengine 才能使用,UOS建议在商店安装一个安卓应用,让系统自动安装uengine及相关的依赖包;
|
||||
2、需要安装 UEngine 才能使用,UOS建议在商店安装一个安卓应用,让系统自动安装 UEngine 及相关的依赖包;
|
||||
3、提取 apk 图标的 apk 路径以“安装 apk”那栏为准;
|
||||
4、如果报错是有关产生 .deksotp 文件有关,一般可以打开程序列表运行。如果想要连接其他手机,请使用 1.2.0 以前的版本,可以使用 adb 连接。
|
||||
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
[Desktop Entry]
|
||||
Categories=System;
|
||||
Comment=uengine(anbox) 程序菜单
|
||||
Comment=UEngine 程序菜单
|
||||
Encoding=UTF-8
|
||||
Exec=/usr/bin/uengine-launch.sh --package=org.anbox.appmgr --component=org.anbox.appmgr.AppViewActivity
|
||||
Icon=/opt/apps/uengine-runner/icon.png
|
||||
MimeType=
|
||||
Name=uengine 程序菜单
|
||||
StartupWMClass=uengine 程序菜单
|
||||
Name=UEngine 程序菜单
|
||||
StartupWMClass=UEngine 程序菜单
|
||||
Terminal=false
|
||||
Type=Application
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
Package: spark-uengine-runner
|
||||
Version: 1.4.1
|
||||
Version: 1.4.2
|
||||
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]
|
||||
Architecture: all
|
||||
Priority: optional
|
||||
Conflicts: com.gitee.uengine.runner.spark, spark-uengine-apk-builder
|
||||
Depends: python3, python3-tk, python3-pip, aapt, uengine, python3-pil, python3-setuptools
|
||||
Description: uengine runner for deepin and UOS
|
||||
Depends: python3, python3-tk, python3-pip, aapt, uengine, python3-pil, python3-setuptools, deepin-terminal
|
||||
Description: UEngine Runner for deepin and UOS
|
||||
|
||||
|
|
|
@ -2,3 +2,4 @@
|
|||
python3 -m pip install --upgrade ttkthemes
|
||||
python3 -m pip install --upgrade pyautogui
|
||||
python3 -m pip install --upgrade keyboard
|
||||
python3 -m pip install --upgrade requests
|
||||
|
|
|
@ -3,10 +3,10 @@
|
|||
"https://gitee.com/gfdgd-xi/uengine-runner",
|
||||
"https://github.com/gfdgd-xi/uengine-runner"
|
||||
],
|
||||
"Version": "1.4.1",
|
||||
"Version": "1.4.2",
|
||||
"System": "Linux(deepin/UOS)",
|
||||
"Tips": [
|
||||
" 新版本Deepin/UOS发布后,可以在应用商店安装部分官方已适配的安卓应用,对爱好者来说,不能自己安装APK软件包始终差点意思,本程序可以为Deepin/UOS上的Uengine安卓运行环境安装自定义APK软件包,并能发送安装的APK包启动菜单到桌面或系统菜单。",
|
||||
"更多可见:https://gitee.com/gfdgd-xi/uengine-runner/wikis",
|
||||
"",
|
||||
"安装APK:点浏览按钮,选中需要安装的APK,然后点安装按钮",
|
||||
"",
|
||||
|
@ -14,20 +14,26 @@
|
|||
"",
|
||||
"保存APK图标:在安装APK下面的输入框浏览或输入APK的路径,然后点击“保存图标”按钮,选择保存位置即可",
|
||||
"",
|
||||
"键盘映射:详细请查看uengine键盘映射主界面",
|
||||
"重置(删除)UEngine数据:点击菜单栏的“UEngine”的“清空UEngine数据”,输入密码重启即可",
|
||||
" 注意:如果任何安卓一遍打不开,多打开几遍应该就可以重新加载UEngine配置了",
|
||||
"",
|
||||
"重置(删除)uengine数据:点击菜单栏的“uengine”的“清空uengine数据”,输入密码重启即可",
|
||||
" 注意:如果任何安卓一遍打不开,多打开几遍应该就可以重新加载uengine配置了",
|
||||
"",
|
||||
"打开Uengine应用列表:打开系统已安装的应用列表(安卓界面)",
|
||||
"打开UEngine应用列表:打开系统已安装的应用列表(安卓界面)",
|
||||
"",
|
||||
"提示:",
|
||||
"1、需要你有使用 root 权限的能力;",
|
||||
"2、需要安装 uengine 才能使用;",
|
||||
"2、需要安装 UEngine 才能使用;",
|
||||
"3、提取 apk 图标的 apk 路径以“安装 apk”那栏为准;",
|
||||
"4、如果想要连接其他手机,请使用 1.2.0 以前的版本,可以使用 adb 连接。"
|
||||
"4、如果想要使用adb连接UEngine或其他手机,请使用 1.2.0 以前的版本。(如需连接UEngine请安装adb补丁)"
|
||||
],
|
||||
"Update": [
|
||||
"V1.4.2:",
|
||||
"※1、添加adb破解补丁(用于可以让adb连接UEngine)并支持adb的部分操作;",
|
||||
"2、菜单栏的项目添加以及外观优化;",
|
||||
"3、修复键盘映射无法添加新映射的问题并修改键盘映射启动方式;",
|
||||
"4、把 uengine 改为 UEngine;",
|
||||
"5、修改 pkexec 获取密码时显示的图标和文本;",
|
||||
"6、添加了 UEngine 系统设置的快捷方式;",
|
||||
"",
|
||||
"V1.4.1:",
|
||||
"※1、初步支持键盘映射",
|
||||
"2、修复新版包在发送uengine列表快捷方式时会提示找不到文件",
|
||||
|
@ -87,7 +93,7 @@
|
|||
"暂无数据"
|
||||
],
|
||||
"Use": [
|
||||
"1、uengine相关软件包(基于anbox开发)",
|
||||
"1、UEngine相关软件包(基于anbox开发)",
|
||||
"2、Python3",
|
||||
"3、tkinter(tkinter.tk、ttkthemes、tkinter.messagebox、tkinter.simpledialog、tkinter.filedialog 和 tkinter.ttk)",
|
||||
"4、aapt",
|
||||
|
@ -96,9 +102,11 @@
|
|||
"7、mkdir",
|
||||
"8、echo",
|
||||
"9、chmod",
|
||||
"10、adb",
|
||||
"11、deepin 终端",
|
||||
"……"
|
||||
],
|
||||
"Time": "2021年08月26日",
|
||||
"Time": "2021年08月30日",
|
||||
"Contribute": ["gfdgd xi<3025613752@qq.com>",
|
||||
"actionchen<917981399@qq.com>"]
|
||||
}
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"Package": "spark-uengine-runner",
|
||||
"Update": true,
|
||||
"Version": "1.4.1",
|
||||
"Version": "1.4.2",
|
||||
"Url": "https://gfdgd-xi.github.io/update-program/data/UpdateInformation.json"
|
||||
|
||||
}
|
|
@ -2,8 +2,8 @@
|
|||
# 使用系统默认的 python3 运行
|
||||
###########################################################################################
|
||||
# 作者:gfdgd xi
|
||||
# 版本:1.3.3
|
||||
# 更新时间:2021年8月19日
|
||||
# 版本:1.4.2
|
||||
# 更新时间:2021年8月30日
|
||||
# 感谢:anbox、deepin 和 统信
|
||||
# 基于 Python3 的 tkinter 构建
|
||||
###########################################################################################
|
||||
|
@ -374,7 +374,7 @@ def get_home():
|
|||
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
|
||||
information = json.loads(readtxt(programPath + "/information.json"))
|
||||
version = information["Version"]
|
||||
title = "uengine APK 应用打包器 {}".format(version)
|
||||
title = "UEngine APK 应用打包器 {}".format(version)
|
||||
iconPath = "{}/icon.png".format(os.path.split(os.path.realpath(__file__))[0])
|
||||
|
||||
###########################
|
||||
|
|
|
@ -4,7 +4,7 @@ import sys
|
|||
if len(sys.argv) > 1:
|
||||
if sys.argv[1] == "--help":
|
||||
print("帮助:")
|
||||
print("输入命令即可清空/重置uengine")
|
||||
print("输入命令即可清空/重置UEngine")
|
||||
sys.exit(0)
|
||||
print("参数错误")
|
||||
sys.exit(1)
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
#########################################
|
||||
# 版本:1.4.0
|
||||
# 更新时间:2021年08月26日
|
||||
# Need: unix, python3-tk, python3-pip, pymouse, keyboard
|
||||
#########################################
|
||||
import os
|
||||
import sys
|
||||
|
@ -17,17 +18,19 @@ import tkinter as tk
|
|||
import tkinter.ttk as ttk
|
||||
import tkinter.messagebox as messagebox
|
||||
import tkinter.filedialog as filedialog
|
||||
|
||||
import Xlib.threaded as threaded
|
||||
#import pymouse.unix as pymouse
|
||||
########################
|
||||
#
|
||||
########################
|
||||
def Inputt(key):
|
||||
if key.event_type == "down":
|
||||
if key.event_type == "up":
|
||||
global setting
|
||||
if setting:
|
||||
Setting(key)
|
||||
else:
|
||||
Mouse(key)
|
||||
#Mouse(key)
|
||||
|
||||
def Open():
|
||||
path = filedialog.askopenfilename(title="打开", filetypes=[["json 文件", "*.json"], ["全部文件", ["*.*"]]])
|
||||
|
@ -49,9 +52,14 @@ def ReStartProgram()->"重启本应用程序":
|
|||
|
||||
|
||||
def Mouse(key):
|
||||
print(keybo)
|
||||
if keybo.__contains__(key.name):
|
||||
print(keybo[key.name]["MousePlace"])
|
||||
pyautogui.click(keybo[key.name]["MousePlace"][0], keybo[key.name]["MousePlace"][1])
|
||||
pyautogui.FAILSAFE = False
|
||||
#os.system(programPath + "/mouse.py {} {}".format(keybo[key.name]["MousePlace"][0], keybo[key.name]["MousePlace"][1]))
|
||||
#pyautogui.click(keybo[key.name]["MousePlace"][0], keybo[key.name]["MousePlace"][1])
|
||||
pyautogui.click(1500, 800)
|
||||
#m.click(keybo[key.name]["MousePlace"][0],keybo[key.name]["MousePlace"][1])
|
||||
|
||||
def Setting(key):
|
||||
if key.event_type == 'up':
|
||||
|
@ -84,10 +92,15 @@ def ShowTips():
|
|||
time.sleep(0.1)
|
||||
ShowTips()
|
||||
except:
|
||||
pass
|
||||
traceback.print_exc()
|
||||
if not close:
|
||||
ShowTips()
|
||||
|
||||
def Closing():
|
||||
close = True
|
||||
window.destroy()
|
||||
|
||||
def Key():
|
||||
global inputs
|
||||
keyboard.hook(Inputt)
|
||||
|
||||
# 获取用户主目录
|
||||
|
@ -95,11 +108,7 @@ def get_home()->"获取用户主目录":
|
|||
return os.path.expanduser('~')
|
||||
|
||||
# 写入文本文档
|
||||
def write_txt(path: "路径", things: "内容")->"写入文本文档":
|
||||
TxtDir = os.path.dirname(path)
|
||||
print(TxtDir)
|
||||
if not os.path.exists(TxtDir):
|
||||
os.makedirs(TxtDir,exist_ok=True)
|
||||
def write_txt(path: "路径", things: "内容")->"写入文本文档":
|
||||
file = open(path, 'w', encoding='UTF-8') # 设置文件对象
|
||||
file.write(things) # 写入文本
|
||||
file.close() # 关闭文本对象
|
||||
|
@ -136,6 +145,7 @@ if not os.path.exists("{}/.config/uengine-keyboard/key.json".format(get_home()))
|
|||
#
|
||||
###################
|
||||
setting = False
|
||||
close = False
|
||||
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
|
||||
iconPath = "{}/icon.png".format(os.path.split(os.path.realpath(__file__))[0])
|
||||
keybo = json.loads(readtxt("{}/.config/uengine-keyboard/key.json".format(get_home())))
|
||||
|
@ -175,9 +185,10 @@ settingMouseToKeyboard.configure(state=tk.DISABLED)
|
|||
|
||||
style = ttkthemes.ThemedStyle(window)
|
||||
style.set_theme("breeze")
|
||||
window.protocol('WM_DELETE_WINDOW', Closing)
|
||||
window.resizable(0, 0)
|
||||
window.iconphoto(False, tk.PhotoImage(file=iconPath))
|
||||
window.title("uengine 键盘映射 {}".format(version))
|
||||
window.title("UEngine 键盘映射 {}".format(version))
|
||||
|
||||
menu.add_cascade(label="程序", menu=programMenu)
|
||||
menu.add_cascade(label="帮助", menu=aboutMenu)
|
||||
|
@ -202,8 +213,15 @@ settingMouseToKeyboard.grid(row=0, column=0)
|
|||
settingButton.grid(row=0, column=1)
|
||||
|
||||
win.pack(fill="both", expand="yes")
|
||||
|
||||
#threaded.lock.allocate_lock()
|
||||
threading.Thread(target=Key).start()
|
||||
threading.Thread(target=ShowTips).start()
|
||||
|
||||
pyautogui.FAILSAFE = False
|
||||
'''def B(key):
|
||||
if key.event_type == "up":
|
||||
print(pyautogui.position())
|
||||
print(key.name)
|
||||
pyautogui.click(1500, 800)
|
||||
keyboard.hook(B)
|
||||
keyboard.wait()'''
|
||||
window.mainloop()
|
|
@ -11,7 +11,6 @@
|
|||
#################
|
||||
# 引入所需的库
|
||||
#################
|
||||
from genericpath import exists
|
||||
import os
|
||||
import sys
|
||||
import time
|
||||
|
@ -29,7 +28,7 @@ import tkinter.messagebox as messagebox
|
|||
import tkinter.filedialog as filedialog
|
||||
import tkinter.simpledialog as simpledialog
|
||||
from getxmlimg import getsavexml
|
||||
from tkinter.constants import TOP
|
||||
|
||||
|
||||
# 卸载程序
|
||||
def UninstallProgram(package: "apk 包名")->"卸载程序":
|
||||
|
@ -552,7 +551,7 @@ def get_home()->"获取用户主目录":
|
|||
|
||||
# 删除所有的 uengine 应用快捷方式
|
||||
def CleanAllUengineDesktopLink():
|
||||
if messagebox.askokcancel(title="提示", message="你确定要删除所有的 uengine 应用快捷方式吗?"):
|
||||
if messagebox.askokcancel(title="提示", message="你确定要删除所有的 UEngine 应用快捷方式吗?"):
|
||||
try:
|
||||
shutil.rmtree("{}/.local/share/applications/uengine".format(get_home()))
|
||||
os.mkdir("{}/.local/share/applications/uengine".format(get_home()))
|
||||
|
@ -573,6 +572,84 @@ def OpenUengineRootData():
|
|||
def OpenUengineUserData():
|
||||
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 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 应用快捷方式
|
||||
class AddNewUengineDesktopLink():
|
||||
addTips = '''可以输入app的包名和Activity或通过浏览apk文件来获取包名和Activity
|
||||
|
@ -591,8 +668,9 @@ class AddNewUengineDesktopLink():
|
|||
saveButton = ttk.Button(controlFrame, text="写入", command=AddNewUengineDesktopLink.SaveDesktopLink)
|
||||
delButton = ttk.Button(controlFrame, text="删除", command=AddNewUengineDesktopLink.DelDesktopLink)
|
||||
|
||||
message.title("添加/删除 uengine 图标")
|
||||
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()
|
||||
|
@ -636,7 +714,7 @@ class AddNewUengineDesktopLink():
|
|||
def DelDesktopLink():
|
||||
global packageName
|
||||
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
|
||||
if not messagebox.askyesno(title="提示", message="你确定要删除吗?删除后将无法恢复!"):
|
||||
return
|
||||
|
@ -680,29 +758,42 @@ programUrl = information["Url"][0]
|
|||
version = information["Version"]
|
||||
goodRunSystem = information["System"]
|
||||
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"])
|
||||
updateThingsString = "\n".join(information["Update"])
|
||||
title = "uengine 运行器 {}".format(version)
|
||||
title = "UEngine 运行器 {}".format(version)
|
||||
updateTime = information["Time"]
|
||||
updateThings = "{} 更新内容:\n{}\n更新时间:{}".format(version, updateThingsString, updateTime, time.strftime("%Y"))
|
||||
iconPath = "{}/icon.png".format(os.path.split(os.path.realpath(__file__))[0])
|
||||
desktop = programPath + "/UengineAndroidProgramList.desktop"
|
||||
desktopName = "UengineAndroidProgramList.desktop"
|
||||
contribute = "\n".join(information["Contribute"])
|
||||
useProgram = "\n".join(information["Use"])
|
||||
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"))
|
||||
|
||||
|
||||
###########################
|
||||
|
@ -752,7 +843,7 @@ def showhelp():
|
|||
helpwindow=tk.Toplevel()
|
||||
helpwindow.resizable(0, 0)
|
||||
helpwindow.title("帮助")
|
||||
|
||||
helpwindow.iconphoto(False, tk.PhotoImage(file=iconPath))
|
||||
|
||||
# get screen width and height
|
||||
screen_width = helpwindow.winfo_screenwidth()
|
||||
|
@ -861,7 +952,7 @@ ComboInstallPath = ttk.Combobox(window, width=50)
|
|||
ComboUninstallPath = ttk.Combobox(window, width=50)
|
||||
BtnFindApk = ttk.Button(FrmInstall, text="浏览", command=FindApk)
|
||||
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)
|
||||
BtnUninstall = ttk.Button(FrmUninstall, text="卸载", command=ButtonClick8)
|
||||
Btngeticon = ttk.Button(FrmInstall, text="保存图标", command=SaveIconToOtherPath)
|
||||
|
@ -870,61 +961,91 @@ BtnSaveApk = ttk.Button(FrmInstall, text="保存apk", command=SaveInstallUengine
|
|||
menu = tk.Menu(window, 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")
|
||||
help = tk.Menu(menu, tearoff=0, background="white") # 设置“帮助”菜单栏
|
||||
|
||||
uengineService = tk.Menu(uengine)
|
||||
uengineInternet = tk.Menu(uengine)
|
||||
uengineIcon = tk.Menu(uengine)
|
||||
uengineData = tk.Menu(uengine)
|
||||
adbServer = tk.Menu(adb, tearoff=0, background="white")
|
||||
|
||||
uengineService = tk.Menu(uengine, tearoff=0, background="white")
|
||||
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="uengine", menu=uengine)
|
||||
menu.add_cascade(label="adb", menu=adb)
|
||||
menu.add_cascade(label="UEngine", menu=uengine)
|
||||
menu.add_cascade(label="关于", menu=help)
|
||||
|
||||
programmenu.add_command(label="清空软件历史记录", command=CleanProgramHistory)
|
||||
programmenu.add_separator() # 设置分界线
|
||||
programmenu.add_command(label="退出程序", command=window.quit) # 设置“退出程序”
|
||||
|
||||
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 数据", menu=uengineData)
|
||||
adb.add_command(label="adb 连接 UEngine", command=UengineConnectAdb)
|
||||
adb.add_separator()
|
||||
adb.add_cascade(label="adb 服务", menu=adbServer)
|
||||
adb.add_command(label="显示 adb 连接的设备", command=AdbConnectDeviceShow)
|
||||
adb.add_separator()
|
||||
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_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=showhelp) # 设置“关于这个程序”项
|
||||
|
||||
uengineService.add_command(label="启用 uengine 服务", command=StartUengine)
|
||||
uengineService.add_command(label="关闭 uengine 服务", command=StopUengine)
|
||||
uengineService.add_command(label="重启 uengine 服务", command=UengineRestart)
|
||||
uengineService.add_command(label="启用 UEngine 服务(需要 root)", command=StartUengine)
|
||||
uengineService.add_command(label="关闭 UEngine 服务(需要 root)", command=StopUengine)
|
||||
uengineService.add_command(label="重启 UEngine 服务(需要 root)", command=UengineRestart)
|
||||
|
||||
uengineInternet.add_command(label="启用 uengine 网络桥接", command=UengineBridgeStart)
|
||||
uengineInternet.add_command(label="关闭 uengine 网络桥接", command=UengineBridgeStop)
|
||||
uengineInternet.add_command(label="重启 uengine 网络桥接", command=UengineBridgeRestart)
|
||||
uengineInternet.add_command(label="加载 uengine 网络桥接", command=UengineBridgeReload)
|
||||
uengineInternet.add_command(label="强制加载 uengine 网络桥接", command=UengineBridgeForceReload)
|
||||
uengineInternet.add_command(label="启用 UEngine 网络桥接(需要 root)", command=UengineBridgeStart)
|
||||
uengineInternet.add_command(label="关闭 UEngine 网络桥接(需要 root)", command=UengineBridgeStop)
|
||||
uengineInternet.add_command(label="重启 UEngine 网络桥接(需要 root)", command=UengineBridgeRestart)
|
||||
uengineInternet.add_command(label="加载 UEngine 网络桥接(需要 root)", command=UengineBridgeReload)
|
||||
uengineInternet.add_command(label="强制加载 UEngine 网络桥接(需要 root)", command=UengineBridgeForceReload)
|
||||
|
||||
uengineIcon.add_command(label="发送 uengine 应用列表到桌面", command=SendUengineAndroidListForDesktop)
|
||||
uengineIcon.add_command(label="发送 uengine 应用列表到启动器", command=SendUengineAndroidListForLauncher)
|
||||
uengineIcon.add_command(label="发送 UEngine 应用列表到桌面", command=SendUengineAndroidListForDesktop)
|
||||
uengineIcon.add_command(label="发送 UEngine 应用列表到启动器", command=SendUengineAndroidListForLauncher)
|
||||
uengineIcon.add_separator()
|
||||
uengineIcon.add_command(label="添加/删除指定的 uengine 快捷方式", command=AddNewUengineDesktopLink.ShowWindow)
|
||||
uengineIcon.add_command(label="添加/删除指定的 UEngine 快捷方式", command=AddNewUengineDesktopLink.ShowWindow)
|
||||
uengineIcon.add_separator()
|
||||
uengineIcon.add_command(label="清空所有 uengine 快捷方式", command=CleanAllUengineDesktopLink)
|
||||
uengineIcon.add_command(label="清空所有 UEngine 快捷方式", command=CleanAllUengineDesktopLink)
|
||||
|
||||
uengineData.add_command(label="打开 uengine 根目录", command=OpenUengineRootData)
|
||||
uengineData.add_command(label="打开 uengine 用户数据目录", command=OpenUengineUserData)
|
||||
uengineUseAdb.add_command(label="adb 连接 UEngine", command=UengineConnectAdb)
|
||||
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_command(label="清空 uengine 数据", command=BackUengineClean)
|
||||
uengineData.add_command(label="清空 UEngine 数据(需要 root)", command=BackUengineClean)
|
||||
|
||||
menu.configure(activebackground="dodgerblue")
|
||||
help.configure(activebackground="dodgerblue")
|
||||
adb.configure(activebackground="dodgerblue")
|
||||
uengine.configure(activebackground="dodgerblue")
|
||||
programmenu.configure(activebackground="dodgerblue")
|
||||
uengineService.configure(activebackground="dodgerblue")
|
||||
uengineInternet.configure(activebackground="dodgerblue")
|
||||
uengineIcon.configure(activebackground="dodgerblue")
|
||||
uengineUseAdb.configure(activebackground="dodgerblue")
|
||||
uengineData.configure(activebackground="dodgerblue")
|
||||
|
||||
# 设置控件
|
||||
ComboUninstallPath['value'] = fineUninstallApkHistory
|
||||
|
|
|
@ -2,8 +2,8 @@
|
|||
# 使用系统默认的 python3 运行
|
||||
###########################################################################################
|
||||
# 作者:gfdgd xi
|
||||
# 版本:1.3.3
|
||||
# 更新时间:2021年8月19日
|
||||
# 版本:1.4.2
|
||||
# 更新时间:2021年8月30日
|
||||
# 感谢:anbox、deepin 和 统信
|
||||
# 基于 Python3 的 tkinter 构建
|
||||
###########################################################################################
|
||||
|
@ -34,29 +34,42 @@ programUrl = information["Url"][0]
|
|||
version = information["Version"]
|
||||
goodRunSystem = information["System"]
|
||||
aaptVersion = subprocess.getoutput("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"])
|
||||
updateThingsString = "\n".join(information["Update"])
|
||||
title = "uengine 运行器 {}".format(version)
|
||||
title = "UEngine 运行器 {}".format(version)
|
||||
updateTime = information["Time"]
|
||||
updateThings = "{} 更新内容:\n{}\n更新时间:{}".format(version, updateThingsString, updateTime, time.strftime("%Y"))
|
||||
iconPath = "{}/icon.png".format(os.path.split(os.path.realpath(__file__))[0])
|
||||
desktop = "/opt/apps/uengine-runner/UengineAndroidProgramList.desktop"
|
||||
desktopName = "UengineAndroidProgramList.desktop"
|
||||
contribute = "\n".join(information["Contribute"])
|
||||
useProgram = "\n".join(information["Use"])
|
||||
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"))
|
||||
|
||||
# add sub window
|
||||
#添加窗口开启关闭开关,防止重复开启
|
||||
|
|
|
@ -0,0 +1,83 @@
|
|||
#!/usr/bin/env python3
|
||||
#########################################
|
||||
# 版本:1.4.2
|
||||
# 更新时间:2021年08月30日
|
||||
#########################################
|
||||
import os
|
||||
import shutil
|
||||
import sys
|
||||
import traceback
|
||||
import ttkthemes
|
||||
import tkinter as tk
|
||||
import tkinter.ttk as ttk
|
||||
import tkinter.messagebox as messagebox
|
||||
########################
|
||||
#
|
||||
########################
|
||||
# 写入文本文档
|
||||
def write_txt(path: "路径", things: "内容")->"写入文本文档":
|
||||
file = open(path, 'w', encoding='UTF-8') # 设置文件对象
|
||||
file.write(things) # 写入文本
|
||||
file.close() # 关闭文本对象
|
||||
|
||||
# 读取文本文档
|
||||
def readtxt(path: "路径")->"读取文本文档":
|
||||
f = open(path, "r") # 设置文件对象
|
||||
str = f.read() # 获取内容
|
||||
f.close() # 关闭文本对象
|
||||
return str # 返回结果
|
||||
|
||||
###################
|
||||
# 判断是不是 root
|
||||
###################
|
||||
if os.geteuid() != 0:
|
||||
print("不是以 root 权限运行本程序!")
|
||||
root = tk.Tk()
|
||||
root.overrideredirect(1)
|
||||
root.withdraw()
|
||||
messagebox.showerror(title="错误", message="不是以 root 权限运行本程序!")
|
||||
sys.exit(1)
|
||||
|
||||
###################
|
||||
#
|
||||
###################
|
||||
window = tk.Tk()
|
||||
style = ttkthemes.ThemedStyle(window)
|
||||
style.set_theme("breeze")
|
||||
window.overrideredirect(1)
|
||||
window.withdraw()
|
||||
try:
|
||||
if sys.argv[1] == "1" and messagebox.askokcancel(title="提示", message="你确定要删除吗?"):
|
||||
os.remove("/data/uengine/data/data/misc/adb/adb_keys")
|
||||
messagebox.showinfo(title="提示", message="完成")
|
||||
except:
|
||||
traceback.print_exc()
|
||||
messagebox.showerror(title="错误", message=traceback.format_exc())
|
||||
sys.exit(2)
|
||||
if sys.argv[1] == "1":
|
||||
sys.exit(0)
|
||||
|
||||
if not messagebox.askyesno(title="提示", message='''请阅读以下提示然后确定是否继续:
|
||||
1、安装后即可使用 adb 连接 UEngine;
|
||||
2、重置 UEngine 或 adb 就需要重新设置该支持补丁;
|
||||
3、需要 root 权限;'''):
|
||||
sys.exit(0)
|
||||
# 写入(需要 root)
|
||||
if not os.path.exists("/data/uengine/data/data/misc/adb"):
|
||||
messagebox.showerror(title="错误", message="无法读取 UEngine 数据!")
|
||||
sys.exit(1)
|
||||
try:
|
||||
things = readtxt(sys.argv[2])
|
||||
adbKey = []
|
||||
# 提取内容
|
||||
for i in things.split('\n'):
|
||||
adbKey.append(i[0: i.find(" ")])
|
||||
old = ""
|
||||
if os.path.exists("/data/uengine/data/data/misc/adb/adb_keys"):
|
||||
old = readtxt("/data/uengine/data/data/misc/adb/adb_keys") + "\n"
|
||||
write_txt("/data/uengine/data/data/misc/adb/adb_keys", old + "\n".join(adbKey))
|
||||
messagebox.showinfo(title="提示", message="完成")
|
||||
except:
|
||||
traceback.print_exc()
|
||||
messagebox.showerror(title="错误", message=traceback.format_exc())
|
||||
sys.exit(2)
|
|
@ -0,0 +1 @@
|
|||
/opt/apps/uengine-runner/uengine-useadb
|
|
@ -1,11 +1,11 @@
|
|||
[Desktop Entry]
|
||||
Categories=System;
|
||||
Comment=uengine(anbox) 程序菜单
|
||||
Comment=UEngine 程序菜单
|
||||
Encoding=UTF-8
|
||||
Exec=/usr/bin/uengine-launch.sh --package=org.anbox.appmgr --component=org.anbox.appmgr.AppViewActivity
|
||||
Icon=/opt/apps/uengine-runner/icon.png
|
||||
MimeType=
|
||||
Name=uengine 程序菜单
|
||||
StartupWMClass=uengine 程序菜单
|
||||
Name=UEngine 程序菜单
|
||||
StartupWMClass=UEngine 程序菜单
|
||||
Terminal=false
|
||||
Type=Application
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
[Desktop Entry]
|
||||
Categories=System;
|
||||
Comment=UEngine 系统设置
|
||||
Encoding=UTF-8
|
||||
Exec=/usr/bin/uengine-launch.sh --action=android.intent.action.MAIN --package=com.android.settings --component=com.android.settings.Settings
|
||||
Icon=/opt/apps/uengine-runner/icon.png
|
||||
MimeType=
|
||||
Name=UEngine 系统设置
|
||||
StartupWMClass=UEngine 系统设置
|
||||
Terminal=false
|
||||
Type=Application
|
|
@ -5,10 +5,10 @@ Categories=System;
|
|||
Terminal=false
|
||||
Exec=/usr/bin/uengine-runner -i %F
|
||||
Icon=/opt/apps/uengine-runner/icon.png
|
||||
Name=Install APK(uengine runner)
|
||||
Comment=Install APK(uengine runner)
|
||||
Comment[zh]=安装 APK(uengine 运行器)
|
||||
Name[zh]=安装 APK(uengine 运行器)
|
||||
Name=Install APK(UEngine runner)
|
||||
Comment=Install APK(UEngine runner)
|
||||
Comment[zh]=安装 APK(UEngine 运行器)
|
||||
Name[zh]=安装 APK(UEngine 运行器)
|
||||
StartupNotify=true
|
||||
Hidden=false
|
||||
NoDisplay=true
|
||||
|
|
|
@ -5,10 +5,10 @@ Categories=System;
|
|||
Terminal=false
|
||||
Exec=/usr/bin/uengine-runner -u %F
|
||||
Icon=/opt/apps/uengine-runner/icon.png
|
||||
Name=Uninstall APK(uengine runner)
|
||||
Comment=Uninstall APK(uengine runner)
|
||||
Comment[zh]=卸载 APK(uengine 运行器)
|
||||
Name[zh]=卸载 APK(uengine 运行器)
|
||||
Name=Uninstall APK(UEngine runner)
|
||||
Comment=Uninstall APK(UEngine runner)
|
||||
Comment[zh]=卸载 APK(UEngine 运行器)
|
||||
Name[zh]=卸载 APK(UEngine 运行器)
|
||||
StartupNotify=true
|
||||
Hidden=false
|
||||
NoDisplay=true
|
||||
|
|
|
@ -6,8 +6,8 @@ Terminal=false
|
|||
Exec=/usr/bin/uengine-runner
|
||||
Icon=/opt/apps/uengine-runner/icon.png
|
||||
Name=uengine runner
|
||||
Comment=uengine runner
|
||||
Comment[zh]=uengine 运行器
|
||||
Name[zh]=uengine 运行器
|
||||
Comment=UEngine Runner
|
||||
Comment[zh]=UEngine 运行器
|
||||
Name[zh]=UEngine 运行器
|
||||
StartupNotify=true
|
||||
MimeType=
|
|
@ -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.env">
|
||||
<message>Authentication is required to Run App</message>
|
||||
<message xml:lang="zh_CN">使用对应的程序需要输入密码</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">/usr/bin/env</annotate>
|
||||
<annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate>
|
||||
</action>
|
||||
|
||||
</policyconfig>
|
|
@ -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.rm">
|
||||
<message>Authentication is required to Delete Files</message>
|
||||
<message xml:lang="zh_CN">删除文件需要输入密码</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">/usr/bin/rm</annotate>
|
||||
<annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate>
|
||||
</action>
|
||||
|
||||
</policyconfig>
|
|
@ -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://github.com/gfdgd-xi/uengine-runner/</vendor_url>
|
||||
<action id="com.deepin.pkexec.uengine-bridge">
|
||||
<message>Authentication is required to Setting UEngine Internet Bridge</message>
|
||||
<message xml:lang="zh_CN">设置 UEngine 桥接需要输入密码</message>
|
||||
<icon_name>kbox</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">/usr/bin/uengine-bridge.sh</annotate>
|
||||
<annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate>
|
||||
</action>
|
||||
|
||||
</policyconfig>
|
|
@ -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.uengine-session-launch-helper">
|
||||
<message>Authentication is required to Change UEngine</message>
|
||||
<message xml:lang="zh_CN">设置 UEngine 需要输入密码</message>
|
||||
<icon_name>kbox</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">/usr/bin/uengine-session-launch-helper</annotate>
|
||||
<annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate>
|
||||
</action>
|
||||
|
||||
</policyconfig>
|
Binary file not shown.
|
@ -3,10 +3,10 @@
|
|||
"https://gitee.com/gfdgd-xi/uengine-runner",
|
||||
"https://github.com/gfdgd-xi/uengine-runner"
|
||||
],
|
||||
"Version": "1.4.1",
|
||||
"Version": "1.4.2",
|
||||
"System": "Linux(deepin/UOS)",
|
||||
"Tips": [
|
||||
" 新版本Deepin/UOS发布后,可以在应用商店安装部分官方已适配的安卓应用,对爱好者来说,不能自己安装APK软件包始终差点意思,本程序可以为Deepin/UOS上的Uengine安卓运行环境安装自定义APK软件包,并能发送安装的APK包启动菜单到桌面或系统菜单。",
|
||||
"更多可见:https://gitee.com/gfdgd-xi/uengine-runner/wikis",
|
||||
"",
|
||||
"安装APK:点浏览按钮,选中需要安装的APK,然后点安装按钮",
|
||||
"",
|
||||
|
@ -14,20 +14,26 @@
|
|||
"",
|
||||
"保存APK图标:在安装APK下面的输入框浏览或输入APK的路径,然后点击“保存图标”按钮,选择保存位置即可",
|
||||
"",
|
||||
"键盘映射:详细请查看uengine键盘映射主界面",
|
||||
"重置(删除)UEngine数据:点击菜单栏的“UEngine”的“清空UEngine数据”,输入密码重启即可",
|
||||
" 注意:如果任何安卓一遍打不开,多打开几遍应该就可以重新加载UEngine配置了",
|
||||
"",
|
||||
"重置(删除)uengine数据:点击菜单栏的“uengine”的“清空uengine数据”,输入密码重启即可",
|
||||
" 注意:如果任何安卓一遍打不开,多打开几遍应该就可以重新加载uengine配置了",
|
||||
"",
|
||||
"打开Uengine应用列表:打开系统已安装的应用列表(安卓界面)",
|
||||
"打开UEngine应用列表:打开系统已安装的应用列表(安卓界面)",
|
||||
"",
|
||||
"提示:",
|
||||
"1、需要你有使用 root 权限的能力;",
|
||||
"2、需要安装 uengine 才能使用;",
|
||||
"2、需要安装 UEngine 才能使用;",
|
||||
"3、提取 apk 图标的 apk 路径以“安装 apk”那栏为准;",
|
||||
"4、如果想要连接其他手机,请使用 1.2.0 以前的版本,可以使用 adb 连接。"
|
||||
"4、如果想要使用adb连接UEngine或其他手机,请使用 1.2.0 以前的版本。(如需连接UEngine请安装adb补丁)"
|
||||
],
|
||||
"Update": [
|
||||
"V1.4.2:",
|
||||
"※1、添加adb破解补丁(用于可以让adb连接UEngine)并支持adb的部分操作;",
|
||||
"2、菜单栏的项目添加以及外观优化;",
|
||||
"3、修复键盘映射无法添加新映射的问题并修改键盘映射启动方式;",
|
||||
"4、把 uengine 改为 UEngine;",
|
||||
"5、修改 pkexec 获取密码时显示的图标和文本;",
|
||||
"6、添加了 UEngine 系统设置的快捷方式;",
|
||||
"",
|
||||
"V1.4.1:",
|
||||
"※1、初步支持键盘映射",
|
||||
"2、修复新版包在发送uengine列表快捷方式时会提示找不到文件",
|
||||
|
@ -87,7 +93,7 @@
|
|||
"暂无数据"
|
||||
],
|
||||
"Use": [
|
||||
"1、uengine相关软件包(基于anbox开发)",
|
||||
"1、UEngine相关软件包(基于anbox开发)",
|
||||
"2、Python3",
|
||||
"3、tkinter(tkinter.tk、ttkthemes、tkinter.messagebox、tkinter.simpledialog、tkinter.filedialog 和 tkinter.ttk)",
|
||||
"4、aapt",
|
||||
|
@ -96,9 +102,11 @@
|
|||
"7、mkdir",
|
||||
"8、echo",
|
||||
"9、chmod",
|
||||
"10、adb",
|
||||
"11、deepin 终端",
|
||||
"……"
|
||||
],
|
||||
"Time": "2021年08月26日",
|
||||
"Time": "2021年08月30日",
|
||||
"Contribute": ["gfdgd xi<3025613752@qq.com>",
|
||||
"actionchen<917981399@qq.com>"]
|
||||
}
|
195
main.py
195
main.py
|
@ -11,7 +11,6 @@
|
|||
#################
|
||||
# 引入所需的库
|
||||
#################
|
||||
from genericpath import exists
|
||||
import os
|
||||
import sys
|
||||
import time
|
||||
|
@ -29,7 +28,7 @@ import tkinter.messagebox as messagebox
|
|||
import tkinter.filedialog as filedialog
|
||||
import tkinter.simpledialog as simpledialog
|
||||
from getxmlimg import getsavexml
|
||||
from tkinter.constants import TOP
|
||||
|
||||
|
||||
# 卸载程序
|
||||
def UninstallProgram(package: "apk 包名")->"卸载程序":
|
||||
|
@ -552,7 +551,7 @@ def get_home()->"获取用户主目录":
|
|||
|
||||
# 删除所有的 uengine 应用快捷方式
|
||||
def CleanAllUengineDesktopLink():
|
||||
if messagebox.askokcancel(title="提示", message="你确定要删除所有的 uengine 应用快捷方式吗?"):
|
||||
if messagebox.askokcancel(title="提示", message="你确定要删除所有的 UEngine 应用快捷方式吗?"):
|
||||
try:
|
||||
shutil.rmtree("{}/.local/share/applications/uengine".format(get_home()))
|
||||
os.mkdir("{}/.local/share/applications/uengine".format(get_home()))
|
||||
|
@ -573,6 +572,84 @@ def OpenUengineRootData():
|
|||
def OpenUengineUserData():
|
||||
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 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 应用快捷方式
|
||||
class AddNewUengineDesktopLink():
|
||||
addTips = '''可以输入app的包名和Activity或通过浏览apk文件来获取包名和Activity
|
||||
|
@ -591,8 +668,9 @@ class AddNewUengineDesktopLink():
|
|||
saveButton = ttk.Button(controlFrame, text="写入", command=AddNewUengineDesktopLink.SaveDesktopLink)
|
||||
delButton = ttk.Button(controlFrame, text="删除", command=AddNewUengineDesktopLink.DelDesktopLink)
|
||||
|
||||
message.title("添加/删除 uengine 图标")
|
||||
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()
|
||||
|
@ -636,7 +714,7 @@ class AddNewUengineDesktopLink():
|
|||
def DelDesktopLink():
|
||||
global packageName
|
||||
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
|
||||
if not messagebox.askyesno(title="提示", message="你确定要删除吗?删除后将无法恢复!"):
|
||||
return
|
||||
|
@ -680,29 +758,42 @@ programUrl = information["Url"][0]
|
|||
version = information["Version"]
|
||||
goodRunSystem = information["System"]
|
||||
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"])
|
||||
updateThingsString = "\n".join(information["Update"])
|
||||
title = "uengine 运行器 {}".format(version)
|
||||
title = "UEngine 运行器 {}".format(version)
|
||||
updateTime = information["Time"]
|
||||
updateThings = "{} 更新内容:\n{}\n更新时间:{}".format(version, updateThingsString, updateTime, time.strftime("%Y"))
|
||||
iconPath = "{}/icon.png".format(os.path.split(os.path.realpath(__file__))[0])
|
||||
desktop = programPath + "/UengineAndroidProgramList.desktop"
|
||||
desktopName = "UengineAndroidProgramList.desktop"
|
||||
contribute = "\n".join(information["Contribute"])
|
||||
useProgram = "\n".join(information["Use"])
|
||||
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"))
|
||||
|
||||
|
||||
###########################
|
||||
|
@ -752,7 +843,7 @@ def showhelp():
|
|||
helpwindow=tk.Toplevel()
|
||||
helpwindow.resizable(0, 0)
|
||||
helpwindow.title("帮助")
|
||||
|
||||
helpwindow.iconphoto(False, tk.PhotoImage(file=iconPath))
|
||||
|
||||
# get screen width and height
|
||||
screen_width = helpwindow.winfo_screenwidth()
|
||||
|
@ -861,7 +952,7 @@ ComboInstallPath = ttk.Combobox(window, width=50)
|
|||
ComboUninstallPath = ttk.Combobox(window, width=50)
|
||||
BtnFindApk = ttk.Button(FrmInstall, text="浏览", command=FindApk)
|
||||
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)
|
||||
BtnUninstall = ttk.Button(FrmUninstall, text="卸载", command=ButtonClick8)
|
||||
Btngeticon = ttk.Button(FrmInstall, text="保存图标", command=SaveIconToOtherPath)
|
||||
|
@ -870,61 +961,91 @@ BtnSaveApk = ttk.Button(FrmInstall, text="保存apk", command=SaveInstallUengine
|
|||
menu = tk.Menu(window, 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")
|
||||
help = tk.Menu(menu, tearoff=0, background="white") # 设置“帮助”菜单栏
|
||||
|
||||
adbServer = tk.Menu(adb, tearoff=0, background="white")
|
||||
|
||||
uengineService = tk.Menu(uengine, tearoff=0, background="white")
|
||||
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="uengine", menu=uengine)
|
||||
menu.add_cascade(label="adb", menu=adb)
|
||||
menu.add_cascade(label="UEngine", menu=uengine)
|
||||
menu.add_cascade(label="关于", menu=help)
|
||||
|
||||
programmenu.add_command(label="清空软件历史记录", command=CleanProgramHistory)
|
||||
programmenu.add_separator() # 设置分界线
|
||||
programmenu.add_command(label="退出程序", command=window.quit) # 设置“退出程序”
|
||||
|
||||
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 数据", menu=uengineData)
|
||||
adb.add_command(label="adb 连接 UEngine", command=UengineConnectAdb)
|
||||
adb.add_separator()
|
||||
adb.add_cascade(label="adb 服务", menu=adbServer)
|
||||
adb.add_command(label="显示 adb 连接的设备", command=AdbConnectDeviceShow)
|
||||
adb.add_separator()
|
||||
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_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=showhelp) # 设置“关于这个程序”项
|
||||
|
||||
uengineService.add_command(label="启用 uengine 服务", command=StartUengine)
|
||||
uengineService.add_command(label="关闭 uengine 服务", command=StopUengine)
|
||||
uengineService.add_command(label="重启 uengine 服务", command=UengineRestart)
|
||||
uengineService.add_command(label="启用 UEngine 服务(需要 root)", command=StartUengine)
|
||||
uengineService.add_command(label="关闭 UEngine 服务(需要 root)", command=StopUengine)
|
||||
uengineService.add_command(label="重启 UEngine 服务(需要 root)", command=UengineRestart)
|
||||
|
||||
uengineInternet.add_command(label="启用 uengine 网络桥接", command=UengineBridgeStart)
|
||||
uengineInternet.add_command(label="关闭 uengine 网络桥接", command=UengineBridgeStop)
|
||||
uengineInternet.add_command(label="重启 uengine 网络桥接", command=UengineBridgeRestart)
|
||||
uengineInternet.add_command(label="加载 uengine 网络桥接", command=UengineBridgeReload)
|
||||
uengineInternet.add_command(label="强制加载 uengine 网络桥接", command=UengineBridgeForceReload)
|
||||
uengineInternet.add_command(label="启用 UEngine 网络桥接(需要 root)", command=UengineBridgeStart)
|
||||
uengineInternet.add_command(label="关闭 UEngine 网络桥接(需要 root)", command=UengineBridgeStop)
|
||||
uengineInternet.add_command(label="重启 UEngine 网络桥接(需要 root)", command=UengineBridgeRestart)
|
||||
uengineInternet.add_command(label="加载 UEngine 网络桥接(需要 root)", command=UengineBridgeReload)
|
||||
uengineInternet.add_command(label="强制加载 UEngine 网络桥接(需要 root)", command=UengineBridgeForceReload)
|
||||
|
||||
uengineIcon.add_command(label="发送 uengine 应用列表到桌面", command=SendUengineAndroidListForDesktop)
|
||||
uengineIcon.add_command(label="发送 uengine 应用列表到启动器", command=SendUengineAndroidListForLauncher)
|
||||
uengineIcon.add_command(label="发送 UEngine 应用列表到桌面", command=SendUengineAndroidListForDesktop)
|
||||
uengineIcon.add_command(label="发送 UEngine 应用列表到启动器", command=SendUengineAndroidListForLauncher)
|
||||
uengineIcon.add_separator()
|
||||
uengineIcon.add_command(label="添加/删除指定的 uengine 快捷方式", command=AddNewUengineDesktopLink.ShowWindow)
|
||||
uengineIcon.add_command(label="添加/删除指定的 UEngine 快捷方式", command=AddNewUengineDesktopLink.ShowWindow)
|
||||
uengineIcon.add_separator()
|
||||
uengineIcon.add_command(label="清空所有 uengine 快捷方式", command=CleanAllUengineDesktopLink)
|
||||
uengineIcon.add_command(label="清空所有 UEngine 快捷方式", command=CleanAllUengineDesktopLink)
|
||||
|
||||
uengineData.add_command(label="打开 uengine 根目录", command=OpenUengineRootData)
|
||||
uengineData.add_command(label="打开 uengine 用户数据目录", command=OpenUengineUserData)
|
||||
uengineUseAdb.add_command(label="adb 连接 UEngine", command=UengineConnectAdb)
|
||||
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_command(label="清空 uengine 数据", command=BackUengineClean)
|
||||
uengineData.add_command(label="清空 UEngine 数据(需要 root)", command=BackUengineClean)
|
||||
|
||||
menu.configure(activebackground="dodgerblue")
|
||||
help.configure(activebackground="dodgerblue")
|
||||
adb.configure(activebackground="dodgerblue")
|
||||
uengine.configure(activebackground="dodgerblue")
|
||||
programmenu.configure(activebackground="dodgerblue")
|
||||
uengineService.configure(activebackground="dodgerblue")
|
||||
uengineInternet.configure(activebackground="dodgerblue")
|
||||
uengineIcon.configure(activebackground="dodgerblue")
|
||||
uengineUseAdb.configure(activebackground="dodgerblue")
|
||||
uengineData.configure(activebackground="dodgerblue")
|
||||
|
||||
# 设置控件
|
||||
ComboUninstallPath['value'] = fineUninstallApkHistory
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
Package: com.gitee.uengine.runner.spark
|
||||
Source: spark-uengine-runner
|
||||
Version: 1.4.1
|
||||
Source: com.gitee.uengine.runner.spark
|
||||
Version: 1.4.2
|
||||
Architecture: all
|
||||
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
|
||||
Depends: deepin-elf-verify (>= 0.0.16.7-1), python3, python3-tk, python3-pip, aapt, adb, python3-pil, python3-setuptools, uengine, deepin-terminal
|
||||
Section: utils
|
||||
Priority: optional
|
||||
Conflicts: spark-uengine-runner, spark-uengine-apk-builder
|
||||
Homepage: [https://gitee.com/gfdgd-xi/uengine-runner, https://github.com/gfdgd-xi/uengine-runner]
|
||||
Description: uengine runner for deepin and UOS
|
||||
Description: UEngine Runner for deepin and UOS
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#!/bin/sh
|
||||
# 使用 pip 安装所需库
|
||||
python3 -m pip install --upgrade ttkthemes
|
||||
python3 -m pip install --upgrade requests
|
||||
python3 -m pip install --upgrade pyautogui
|
||||
python3 -m pip install --upgrade keyboard
|
||||
# 建立软链接
|
||||
|
@ -10,4 +11,5 @@ ln -s /opt/apps/com.gitee.uengine.runner.spark/files/uengine-app-uninstall /usr/
|
|||
ln -s /opt/apps/com.gitee.uengine.runner.spark/files/uengine-app-install /usr/bin/uengine-app-install
|
||||
ln -s /opt/apps/com.gitee.uengine.runner.spark/files/uengine-clean /usr/bin/uengine-clean
|
||||
ln -s /opt/apps/com.gitee.uengine.runner.spark/files/uengine-runner-about /usr/bin/uengine-runner-about
|
||||
ln -s /opt/apps/com.gitee.uengine.runner.spark/files/uengine-keyboard /usr/bin/uengine-keyboard
|
||||
ln -s /opt/apps/com.gitee.uengine.runner.spark/files/uengine-keyboard /usr/bin/uengine-keyboard
|
||||
ln -s /opt/apps/com.gitee.uengine.runner.spark/files/uengine-useadb /usr/bin/uengine-useadb
|
|
@ -1,11 +1,11 @@
|
|||
[Desktop Entry]
|
||||
Categories=System;
|
||||
Comment=uengine(anbox) 程序菜单
|
||||
Comment=UEngine(anbox) 程序菜单
|
||||
Encoding=UTF-8
|
||||
Exec=/usr/bin/uengine-launch.sh --package=org.anbox.appmgr --component=org.anbox.appmgr.AppViewActivity
|
||||
Icon=/opt/apps/com.gitee.uengine.runner.spark/files/icon.png
|
||||
MimeType=
|
||||
Name=uengine 程序菜单
|
||||
StartupWMClass=uengine 程序菜单
|
||||
Name=UEngine 程序菜单
|
||||
StartupWMClass=UEngine 程序菜单
|
||||
Terminal=false
|
||||
Type=Application
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
[Desktop Entry]
|
||||
Categories=System;
|
||||
Comment=UEngine 系统设置
|
||||
Encoding=UTF-8
|
||||
Exec=/usr/bin/uengine-launch.sh --action=android.intent.action.MAIN --package=com.android.settings --component=com.android.settings.Settings
|
||||
Icon=/opt/apps/com.gitee.uengine.runner.spark/files/icon.png
|
||||
MimeType=
|
||||
Name=UEngine 系统设置
|
||||
StartupWMClass=UEngine 系统设置
|
||||
Terminal=false
|
||||
Type=Application
|
|
@ -6,9 +6,9 @@ Terminal=false
|
|||
Exec=/usr/bin/uengine-runner -i %F
|
||||
Icon=/opt/apps/com.gitee.uengine.runner.spark/files/icon.png
|
||||
Name=Install APK(uengine runner)
|
||||
Comment=Install APK(uengine runner)
|
||||
Comment[zh]=安装 APK(uengine 运行器)
|
||||
Name[zh]=安装 APK(uengine 运行器)
|
||||
Comment=Install APK(UEngine runner)
|
||||
Comment[zh]=安装 APK(UEngine 运行器)
|
||||
Name[zh]=安装 APK(UEngine 运行器)
|
||||
StartupNotify=true
|
||||
Hidden=false
|
||||
NoDisplay=true
|
||||
|
|
|
@ -5,10 +5,10 @@ Categories=System;
|
|||
Terminal=false
|
||||
Exec=/usr/bin/uengine-runner -u %F
|
||||
Icon=/opt/apps/com.gitee.uengine.runner.spark/files/icon.png
|
||||
Name=Uninstall APK(uengine runner)
|
||||
Comment=Uninstall APK(uengine runner)
|
||||
Comment[zh]=卸载 APK(uengine 运行器)
|
||||
Name[zh]=卸载 APK(uengine 运行器)
|
||||
Name=Uninstall APK(UEngine runner)
|
||||
Comment=Uninstall APK(UEngine runner)
|
||||
Comment[zh]=卸载 APK(UEngine 运行器)
|
||||
Name[zh]=卸载 APK(UEngine 运行器)
|
||||
StartupNotify=true
|
||||
Hidden=false
|
||||
NoDisplay=true
|
||||
|
|
|
@ -6,8 +6,8 @@ Terminal=false
|
|||
Exec=/usr/bin/uengine-runner
|
||||
Icon=/opt/apps/com.gitee.uengine.runner.spark/files/icon.png
|
||||
Name=uengine runner
|
||||
Comment=uengine runner
|
||||
Comment[zh]=uengine 运行器
|
||||
Name[zh]=uengine 运行器
|
||||
Comment=UEngine Runner
|
||||
Comment[zh]=UEngine 运行器
|
||||
Name[zh]=UEngine 运行器
|
||||
StartupNotify=true
|
||||
MimeType=
|
|
@ -1,11 +1,11 @@
|
|||
[Desktop Entry]
|
||||
Categories=System;
|
||||
Comment=uengine(anbox) 程序菜单
|
||||
Comment=UEngine 程序菜单
|
||||
Encoding=UTF-8
|
||||
Exec=/usr/bin/uengine-launch.sh --package=org.anbox.appmgr --component=org.anbox.appmgr.AppViewActivity
|
||||
Icon=/opt/apps/com.gitee.uengine.runner.spark/files/icon.png
|
||||
MimeType=
|
||||
Name=uengine 程序菜单
|
||||
StartupWMClass=uengine 程序菜单
|
||||
Name=UEngine 程序菜单
|
||||
StartupWMClass=UEngine 程序菜单
|
||||
Terminal=false
|
||||
Type=Application
|
||||
|
|
|
@ -3,10 +3,10 @@
|
|||
"https://gitee.com/gfdgd-xi/uengine-runner",
|
||||
"https://github.com/gfdgd-xi/uengine-runner"
|
||||
],
|
||||
"Version": "1.4.1",
|
||||
"Version": "1.4.2",
|
||||
"System": "Linux(deepin/UOS)",
|
||||
"Tips": [
|
||||
" 新版本Deepin/UOS发布后,可以在应用商店安装部分官方已适配的安卓应用,对爱好者来说,不能自己安装APK软件包始终差点意思,本程序可以为Deepin/UOS上的Uengine安卓运行环境安装自定义APK软件包,并能发送安装的APK包启动菜单到桌面或系统菜单。",
|
||||
"更多可见:https://gitee.com/gfdgd-xi/uengine-runner/wikis",
|
||||
"",
|
||||
"安装APK:点浏览按钮,选中需要安装的APK,然后点安装按钮",
|
||||
"",
|
||||
|
@ -14,20 +14,26 @@
|
|||
"",
|
||||
"保存APK图标:在安装APK下面的输入框浏览或输入APK的路径,然后点击“保存图标”按钮,选择保存位置即可",
|
||||
"",
|
||||
"键盘映射:详细请查看uengine键盘映射主界面",
|
||||
"重置(删除)UEngine数据:点击菜单栏的“UEngine”的“清空UEngine数据”,输入密码重启即可",
|
||||
" 注意:如果任何安卓一遍打不开,多打开几遍应该就可以重新加载UEngine配置了",
|
||||
"",
|
||||
"重置(删除)uengine数据:点击菜单栏的“uengine”的“清空uengine数据”,输入密码重启即可",
|
||||
" 注意:如果任何安卓一遍打不开,多打开几遍应该就可以重新加载uengine配置了",
|
||||
"",
|
||||
"打开Uengine应用列表:打开系统已安装的应用列表(安卓界面)",
|
||||
"打开UEngine应用列表:打开系统已安装的应用列表(安卓界面)",
|
||||
"",
|
||||
"提示:",
|
||||
"1、需要你有使用 root 权限的能力;",
|
||||
"2、需要安装 uengine 才能使用;",
|
||||
"2、需要安装 UEngine 才能使用;",
|
||||
"3、提取 apk 图标的 apk 路径以“安装 apk”那栏为准;",
|
||||
"4、如果想要连接其他手机,请使用 1.2.0 以前的版本,可以使用 adb 连接。"
|
||||
"4、如果想要使用adb连接UEngine或其他手机,请使用 1.2.0 以前的版本。(如需连接UEngine请安装adb补丁)"
|
||||
],
|
||||
"Update": [
|
||||
"V1.4.2:",
|
||||
"※1、添加adb破解补丁(用于可以让adb连接UEngine)并支持adb的部分操作;",
|
||||
"2、菜单栏的项目添加以及外观优化;",
|
||||
"3、修复键盘映射无法添加新映射的问题并修改键盘映射启动方式;",
|
||||
"4、把 uengine 改为 UEngine;",
|
||||
"5、修改 pkexec 获取密码时显示的图标和文本;",
|
||||
"6、添加了 UEngine 系统设置的快捷方式;",
|
||||
"",
|
||||
"V1.4.1:",
|
||||
"※1、初步支持键盘映射",
|
||||
"2、修复新版包在发送uengine列表快捷方式时会提示找不到文件",
|
||||
|
@ -87,7 +93,7 @@
|
|||
"暂无数据"
|
||||
],
|
||||
"Use": [
|
||||
"1、uengine相关软件包(基于anbox开发)",
|
||||
"1、UEngine相关软件包(基于anbox开发)",
|
||||
"2、Python3",
|
||||
"3、tkinter(tkinter.tk、ttkthemes、tkinter.messagebox、tkinter.simpledialog、tkinter.filedialog 和 tkinter.ttk)",
|
||||
"4、aapt",
|
||||
|
@ -96,9 +102,11 @@
|
|||
"7、mkdir",
|
||||
"8、echo",
|
||||
"9、chmod",
|
||||
"10、adb",
|
||||
"11、deepin 终端",
|
||||
"……"
|
||||
],
|
||||
"Time": "2021年08月26日",
|
||||
"Time": "2021年08月30日",
|
||||
"Contribute": ["gfdgd xi<3025613752@qq.com>",
|
||||
"actionchen<917981399@qq.com>"]
|
||||
}
|
File diff suppressed because it is too large
Load Diff
2
new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/setting.json
Normal file → Executable file
2
new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/setting.json
Normal file → Executable file
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"Package": "com.gitee.uengine.runner.spark",
|
||||
"Update": true,
|
||||
"Version": "1.4.1",
|
||||
"Version": "1.4.2",
|
||||
"Url": "https://gfdgd-xi.github.io/update-program/data/UpdateInformation.json"
|
||||
}
|
|
@ -2,8 +2,8 @@
|
|||
# 使用系统默认的 python3 运行
|
||||
###########################################################################################
|
||||
# 作者:gfdgd xi
|
||||
# 版本:1.3.3
|
||||
# 更新时间:2021年8月19日
|
||||
# 版本:1.4.2
|
||||
# 更新时间:2021年8月30日
|
||||
# 感谢:anbox、deepin 和 统信
|
||||
# 基于 Python3 的 tkinter 构建
|
||||
###########################################################################################
|
||||
|
@ -374,7 +374,7 @@ def get_home():
|
|||
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
|
||||
information = json.loads(readtxt(programPath + "/information.json"))
|
||||
version = information["Version"]
|
||||
title = "uengine APK 应用打包器 {}".format(version)
|
||||
title = "UEngine APK 应用打包器 {}".format(version)
|
||||
iconPath = "{}/icon.png".format(os.path.split(os.path.realpath(__file__))[0])
|
||||
|
||||
###########################
|
||||
|
|
|
@ -4,7 +4,7 @@ import sys
|
|||
if len(sys.argv) > 1:
|
||||
if sys.argv[1] == "--help":
|
||||
print("帮助:")
|
||||
print("输入命令即可清空/重置uengine")
|
||||
print("输入命令即可清空/重置UEngine")
|
||||
sys.exit(0)
|
||||
print("参数错误")
|
||||
sys.exit(1)
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
#########################################
|
||||
# 版本:1.4.0
|
||||
# 更新时间:2021年08月26日
|
||||
# Need: unix, python3-tk, python3-pip, pymouse, keyboard
|
||||
#########################################
|
||||
import os
|
||||
import sys
|
||||
|
@ -17,17 +18,19 @@ import tkinter as tk
|
|||
import tkinter.ttk as ttk
|
||||
import tkinter.messagebox as messagebox
|
||||
import tkinter.filedialog as filedialog
|
||||
|
||||
import Xlib.threaded as threaded
|
||||
#import pymouse.unix as pymouse
|
||||
########################
|
||||
#
|
||||
########################
|
||||
def Inputt(key):
|
||||
if key.event_type == "down":
|
||||
if key.event_type == "up":
|
||||
global setting
|
||||
if setting:
|
||||
Setting(key)
|
||||
else:
|
||||
Mouse(key)
|
||||
#Mouse(key)
|
||||
|
||||
def Open():
|
||||
path = filedialog.askopenfilename(title="打开", filetypes=[["json 文件", "*.json"], ["全部文件", ["*.*"]]])
|
||||
|
@ -49,9 +52,14 @@ def ReStartProgram()->"重启本应用程序":
|
|||
|
||||
|
||||
def Mouse(key):
|
||||
print(keybo)
|
||||
if keybo.__contains__(key.name):
|
||||
print(keybo[key.name]["MousePlace"])
|
||||
pyautogui.click(keybo[key.name]["MousePlace"][0], keybo[key.name]["MousePlace"][1])
|
||||
pyautogui.FAILSAFE = False
|
||||
#os.system(programPath + "/mouse.py {} {}".format(keybo[key.name]["MousePlace"][0], keybo[key.name]["MousePlace"][1]))
|
||||
#pyautogui.click(keybo[key.name]["MousePlace"][0], keybo[key.name]["MousePlace"][1])
|
||||
pyautogui.click(1500, 800)
|
||||
#m.click(keybo[key.name]["MousePlace"][0],keybo[key.name]["MousePlace"][1])
|
||||
|
||||
def Setting(key):
|
||||
if key.event_type == 'up':
|
||||
|
@ -84,10 +92,15 @@ def ShowTips():
|
|||
time.sleep(0.1)
|
||||
ShowTips()
|
||||
except:
|
||||
pass
|
||||
traceback.print_exc()
|
||||
if not close:
|
||||
ShowTips()
|
||||
|
||||
def Closing():
|
||||
close = True
|
||||
window.destroy()
|
||||
|
||||
def Key():
|
||||
global inputs
|
||||
keyboard.hook(Inputt)
|
||||
|
||||
# 获取用户主目录
|
||||
|
@ -95,11 +108,7 @@ def get_home()->"获取用户主目录":
|
|||
return os.path.expanduser('~')
|
||||
|
||||
# 写入文本文档
|
||||
def write_txt(path: "路径", things: "内容")->"写入文本文档":
|
||||
TxtDir = os.path.dirname(path)
|
||||
print(TxtDir)
|
||||
if not os.path.exists(TxtDir):
|
||||
os.makedirs(TxtDir,exist_ok=True)
|
||||
def write_txt(path: "路径", things: "内容")->"写入文本文档":
|
||||
file = open(path, 'w', encoding='UTF-8') # 设置文件对象
|
||||
file.write(things) # 写入文本
|
||||
file.close() # 关闭文本对象
|
||||
|
@ -136,6 +145,7 @@ if not os.path.exists("{}/.config/uengine-keyboard/key.json".format(get_home()))
|
|||
#
|
||||
###################
|
||||
setting = False
|
||||
close = False
|
||||
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
|
||||
iconPath = "{}/icon.png".format(os.path.split(os.path.realpath(__file__))[0])
|
||||
keybo = json.loads(readtxt("{}/.config/uengine-keyboard/key.json".format(get_home())))
|
||||
|
@ -175,9 +185,10 @@ settingMouseToKeyboard.configure(state=tk.DISABLED)
|
|||
|
||||
style = ttkthemes.ThemedStyle(window)
|
||||
style.set_theme("breeze")
|
||||
window.protocol('WM_DELETE_WINDOW', Closing)
|
||||
window.resizable(0, 0)
|
||||
window.iconphoto(False, tk.PhotoImage(file=iconPath))
|
||||
window.title("uengine 键盘映射 {}".format(version))
|
||||
window.title("UEngine 键盘映射 {}".format(version))
|
||||
|
||||
menu.add_cascade(label="程序", menu=programMenu)
|
||||
menu.add_cascade(label="帮助", menu=aboutMenu)
|
||||
|
@ -202,8 +213,15 @@ settingMouseToKeyboard.grid(row=0, column=0)
|
|||
settingButton.grid(row=0, column=1)
|
||||
|
||||
win.pack(fill="both", expand="yes")
|
||||
|
||||
#threaded.lock.allocate_lock()
|
||||
threading.Thread(target=Key).start()
|
||||
threading.Thread(target=ShowTips).start()
|
||||
|
||||
pyautogui.FAILSAFE = False
|
||||
'''def B(key):
|
||||
if key.event_type == "up":
|
||||
print(pyautogui.position())
|
||||
print(key.name)
|
||||
pyautogui.click(1500, 800)
|
||||
keyboard.hook(B)
|
||||
keyboard.wait()'''
|
||||
window.mainloop()
|
|
@ -2,8 +2,8 @@
|
|||
# 使用系统默认的 python3 运行
|
||||
###########################################################################################
|
||||
# 作者:gfdgd xi
|
||||
# 版本:1.3.3
|
||||
# 更新时间:2021年8月19日
|
||||
# 版本:1.4.2
|
||||
# 更新时间:2021年8月30日
|
||||
# 感谢:anbox、deepin 和 统信
|
||||
# 基于 Python3 的 tkinter 构建
|
||||
###########################################################################################
|
||||
|
@ -34,29 +34,42 @@ programUrl = information["Url"][0]
|
|||
version = information["Version"]
|
||||
goodRunSystem = information["System"]
|
||||
aaptVersion = subprocess.getoutput("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"])
|
||||
updateThingsString = "\n".join(information["Update"])
|
||||
title = "uengine 运行器 {}".format(version)
|
||||
title = "UEngine 运行器 {}".format(version)
|
||||
updateTime = information["Time"]
|
||||
updateThings = "{} 更新内容:\n{}\n更新时间:{}".format(version, updateThingsString, updateTime, time.strftime("%Y"))
|
||||
iconPath = "{}/icon.png".format(os.path.split(os.path.realpath(__file__))[0])
|
||||
desktop = "/opt/apps/uengine-runner/UengineAndroidProgramList.desktop"
|
||||
desktopName = "UengineAndroidProgramList.desktop"
|
||||
contribute = "\n".join(information["Contribute"])
|
||||
useProgram = "\n".join(information["Use"])
|
||||
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"))
|
||||
|
||||
# add sub window
|
||||
#添加窗口开启关闭开关,防止重复开启
|
||||
|
|
|
@ -0,0 +1,83 @@
|
|||
#!/usr/bin/env python3
|
||||
#########################################
|
||||
# 版本:1.4.2
|
||||
# 更新时间:2021年08月30日
|
||||
#########################################
|
||||
import os
|
||||
import shutil
|
||||
import sys
|
||||
import traceback
|
||||
import ttkthemes
|
||||
import tkinter as tk
|
||||
import tkinter.ttk as ttk
|
||||
import tkinter.messagebox as messagebox
|
||||
########################
|
||||
#
|
||||
########################
|
||||
# 写入文本文档
|
||||
def write_txt(path: "路径", things: "内容")->"写入文本文档":
|
||||
file = open(path, 'w', encoding='UTF-8') # 设置文件对象
|
||||
file.write(things) # 写入文本
|
||||
file.close() # 关闭文本对象
|
||||
|
||||
# 读取文本文档
|
||||
def readtxt(path: "路径")->"读取文本文档":
|
||||
f = open(path, "r") # 设置文件对象
|
||||
str = f.read() # 获取内容
|
||||
f.close() # 关闭文本对象
|
||||
return str # 返回结果
|
||||
|
||||
###################
|
||||
# 判断是不是 root
|
||||
###################
|
||||
if os.geteuid() != 0:
|
||||
print("不是以 root 权限运行本程序!")
|
||||
root = tk.Tk()
|
||||
root.overrideredirect(1)
|
||||
root.withdraw()
|
||||
messagebox.showerror(title="错误", message="不是以 root 权限运行本程序!")
|
||||
sys.exit(1)
|
||||
|
||||
###################
|
||||
#
|
||||
###################
|
||||
window = tk.Tk()
|
||||
style = ttkthemes.ThemedStyle(window)
|
||||
style.set_theme("breeze")
|
||||
window.overrideredirect(1)
|
||||
window.withdraw()
|
||||
try:
|
||||
if sys.argv[1] == "1" and messagebox.askokcancel(title="提示", message="你确定要删除吗?"):
|
||||
os.remove("/data/uengine/data/data/misc/adb/adb_keys")
|
||||
messagebox.showinfo(title="提示", message="完成")
|
||||
except:
|
||||
traceback.print_exc()
|
||||
messagebox.showerror(title="错误", message=traceback.format_exc())
|
||||
sys.exit(2)
|
||||
if sys.argv[1] == "1":
|
||||
sys.exit(0)
|
||||
|
||||
if not messagebox.askyesno(title="提示", message='''请阅读以下提示然后确定是否继续:
|
||||
1、安装后即可使用 adb 连接 UEngine;
|
||||
2、重置 UEngine 或 adb 就需要重新设置该支持补丁;
|
||||
3、需要 root 权限;'''):
|
||||
sys.exit(0)
|
||||
# 写入(需要 root)
|
||||
if not os.path.exists("/data/uengine/data/data/misc/adb"):
|
||||
messagebox.showerror(title="错误", message="无法读取 UEngine 数据!")
|
||||
sys.exit(1)
|
||||
try:
|
||||
things = readtxt(sys.argv[2])
|
||||
adbKey = []
|
||||
# 提取内容
|
||||
for i in things.split('\n'):
|
||||
adbKey.append(i[0: i.find(" ")])
|
||||
old = ""
|
||||
if os.path.exists("/data/uengine/data/data/misc/adb/adb_keys"):
|
||||
old = readtxt("/data/uengine/data/data/misc/adb/adb_keys") + "\n"
|
||||
write_txt("/data/uengine/data/data/misc/adb/adb_keys", old + "\n".join(adbKey))
|
||||
messagebox.showinfo(title="提示", message="完成")
|
||||
except:
|
||||
traceback.print_exc()
|
||||
messagebox.showerror(title="错误", message=traceback.format_exc())
|
||||
sys.exit(2)
|
|
@ -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.env">
|
||||
<message>Authentication is required to Run App</message>
|
||||
<message xml:lang="zh_CN">使用对应的程序需要输入密码</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">/usr/bin/env</annotate>
|
||||
<annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate>
|
||||
</action>
|
||||
|
||||
</policyconfig>
|
|
@ -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.rm">
|
||||
<message>Authentication is required to Delete Files</message>
|
||||
<message xml:lang="zh_CN">删除文件需要输入密码</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">/usr/bin/rm</annotate>
|
||||
<annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate>
|
||||
</action>
|
||||
|
||||
</policyconfig>
|
|
@ -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://github.com/gfdgd-xi/uengine-runner/</vendor_url>
|
||||
<action id="com.deepin.pkexec.uengine-bridge">
|
||||
<message>Authentication is required to Setting UEngine Internet Bridge</message>
|
||||
<message xml:lang="zh_CN">设置 UEngine 桥接需要输入密码</message>
|
||||
<icon_name>kbox</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">/usr/bin/uengine-bridge.sh</annotate>
|
||||
<annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate>
|
||||
</action>
|
||||
|
||||
</policyconfig>
|
|
@ -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.uengine-session-launch-helper">
|
||||
<message>Authentication is required to Change UEngine</message>
|
||||
<message xml:lang="zh_CN">设置 UEngine 需要输入密码</message>
|
||||
<icon_name>kbox</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">/usr/bin/uengine-session-launch-helper</annotate>
|
||||
<annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate>
|
||||
</action>
|
||||
|
||||
</policyconfig>
|
|
@ -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.env">
|
||||
<message>Authentication is required to Run App</message>
|
||||
<message xml:lang="zh_CN">使用对应的程序需要输入密码</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">/usr/bin/env</annotate>
|
||||
<annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate>
|
||||
</action>
|
||||
|
||||
</policyconfig>
|
|
@ -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.rm">
|
||||
<message>Authentication is required to Delete Files</message>
|
||||
<message xml:lang="zh_CN">删除文件需要输入密码</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">/usr/bin/rm</annotate>
|
||||
<annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate>
|
||||
</action>
|
||||
|
||||
</policyconfig>
|
|
@ -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://github.com/gfdgd-xi/uengine-runner/</vendor_url>
|
||||
<action id="com.deepin.pkexec.uengine-bridge">
|
||||
<message>Authentication is required to Setting UEngine Internet Bridge</message>
|
||||
<message xml:lang="zh_CN">设置 UEngine 桥接需要输入密码</message>
|
||||
<icon_name>kbox</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">/usr/bin/uengine-bridge.sh</annotate>
|
||||
<annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate>
|
||||
</action>
|
||||
|
||||
</policyconfig>
|
|
@ -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.uengine-session-launch-helper">
|
||||
<message>Authentication is required to Change UEngine</message>
|
||||
<message xml:lang="zh_CN">设置 UEngine 需要输入密码</message>
|
||||
<icon_name>kbox</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">/usr/bin/uengine-session-launch-helper</annotate>
|
||||
<annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate>
|
||||
</action>
|
||||
|
||||
</policyconfig>
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"Package": "com.gitee.uengine.runner.spark",
|
||||
"Update": true,
|
||||
"Version": "1.4.1",
|
||||
"Version": "1.4.2",
|
||||
"Url": "https://gfdgd-xi.github.io/update-program/data/UpdateInformation.json"
|
||||
}
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"Package": "spark-uengine-runner",
|
||||
"Update": true,
|
||||
"Version": "1.4.1",
|
||||
"Version": "1.4.2",
|
||||
"Url": "https://gfdgd-xi.github.io/update-program/data/UpdateInformation.json"
|
||||
|
||||
}
|
Binary file not shown.
|
@ -2,8 +2,8 @@
|
|||
# 使用系统默认的 python3 运行
|
||||
###########################################################################################
|
||||
# 作者:gfdgd xi
|
||||
# 版本:1.3.3
|
||||
# 更新时间:2021年8月19日
|
||||
# 版本:1.4.2
|
||||
# 更新时间:2021年8月30日
|
||||
# 感谢:anbox、deepin 和 统信
|
||||
# 基于 Python3 的 tkinter 构建
|
||||
###########################################################################################
|
||||
|
@ -374,7 +374,7 @@ def get_home():
|
|||
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
|
||||
information = json.loads(readtxt(programPath + "/information.json"))
|
||||
version = information["Version"]
|
||||
title = "uengine APK 应用打包器 {}".format(version)
|
||||
title = "UEngine APK 应用打包器 {}".format(version)
|
||||
iconPath = "{}/icon.png".format(os.path.split(os.path.realpath(__file__))[0])
|
||||
|
||||
###########################
|
||||
|
|
|
@ -4,7 +4,7 @@ import sys
|
|||
if len(sys.argv) > 1:
|
||||
if sys.argv[1] == "--help":
|
||||
print("帮助:")
|
||||
print("输入命令即可清空/重置uengine")
|
||||
print("输入命令即可清空/重置UEngine")
|
||||
sys.exit(0)
|
||||
print("参数错误")
|
||||
sys.exit(1)
|
||||
|
|
|
@ -2,15 +2,15 @@
|
|||
Categories=system;Utility;
|
||||
Encoding=UTF-8
|
||||
Exec=uengine-runner -ci %F
|
||||
GenericName=APK 安装(uengine)
|
||||
GenericName[zh_CN]=APK 安装(uengine)
|
||||
GenericName=APK Install(UEngine)
|
||||
GenericName[zh_CN]=APK 安装(UEngine)
|
||||
Icon=/opt/apps/uengine-runner/icon.png
|
||||
MimeType=application/apk;
|
||||
Name=APK 安装(uengine)
|
||||
Name[zh_CN]=APK 安装(uengine)
|
||||
Name=APK Install(UEngine)
|
||||
Name[zh_CN]=APK 安装(UEngine)
|
||||
NoDisplay=true
|
||||
OnlyShowIn=Unity;
|
||||
StartupNotify=false
|
||||
StartupWMClass=APK 安装(uengine)
|
||||
StartupWMClass=APK 安装(UEngine)
|
||||
Terminal=false
|
||||
Type=Application
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
#########################################
|
||||
# 版本:1.4.0
|
||||
# 更新时间:2021年08月26日
|
||||
# Need: unix, python3-tk, python3-pip, pymouse, keyboard
|
||||
#########################################
|
||||
import os
|
||||
import sys
|
||||
|
@ -17,17 +18,19 @@ import tkinter as tk
|
|||
import tkinter.ttk as ttk
|
||||
import tkinter.messagebox as messagebox
|
||||
import tkinter.filedialog as filedialog
|
||||
|
||||
import Xlib.threaded as threaded
|
||||
#import pymouse.unix as pymouse
|
||||
########################
|
||||
#
|
||||
########################
|
||||
def Inputt(key):
|
||||
if key.event_type == "down":
|
||||
if key.event_type == "up":
|
||||
global setting
|
||||
if setting:
|
||||
Setting(key)
|
||||
else:
|
||||
Mouse(key)
|
||||
#Mouse(key)
|
||||
|
||||
def Open():
|
||||
path = filedialog.askopenfilename(title="打开", filetypes=[["json 文件", "*.json"], ["全部文件", ["*.*"]]])
|
||||
|
@ -49,9 +52,14 @@ def ReStartProgram()->"重启本应用程序":
|
|||
|
||||
|
||||
def Mouse(key):
|
||||
print(keybo)
|
||||
if keybo.__contains__(key.name):
|
||||
print(keybo[key.name]["MousePlace"])
|
||||
pyautogui.click(keybo[key.name]["MousePlace"][0], keybo[key.name]["MousePlace"][1])
|
||||
pyautogui.FAILSAFE = False
|
||||
#os.system(programPath + "/mouse.py {} {}".format(keybo[key.name]["MousePlace"][0], keybo[key.name]["MousePlace"][1]))
|
||||
#pyautogui.click(keybo[key.name]["MousePlace"][0], keybo[key.name]["MousePlace"][1])
|
||||
pyautogui.click(1500, 800)
|
||||
#m.click(keybo[key.name]["MousePlace"][0],keybo[key.name]["MousePlace"][1])
|
||||
|
||||
def Setting(key):
|
||||
if key.event_type == 'up':
|
||||
|
@ -84,10 +92,15 @@ def ShowTips():
|
|||
time.sleep(0.1)
|
||||
ShowTips()
|
||||
except:
|
||||
pass
|
||||
traceback.print_exc()
|
||||
if not close:
|
||||
ShowTips()
|
||||
|
||||
def Closing():
|
||||
close = True
|
||||
window.destroy()
|
||||
|
||||
def Key():
|
||||
global inputs
|
||||
keyboard.hook(Inputt)
|
||||
|
||||
# 获取用户主目录
|
||||
|
@ -95,11 +108,7 @@ def get_home()->"获取用户主目录":
|
|||
return os.path.expanduser('~')
|
||||
|
||||
# 写入文本文档
|
||||
def write_txt(path: "路径", things: "内容")->"写入文本文档":
|
||||
TxtDir = os.path.dirname(path)
|
||||
print(TxtDir)
|
||||
if not os.path.exists(TxtDir):
|
||||
os.makedirs(TxtDir,exist_ok=True)
|
||||
def write_txt(path: "路径", things: "内容")->"写入文本文档":
|
||||
file = open(path, 'w', encoding='UTF-8') # 设置文件对象
|
||||
file.write(things) # 写入文本
|
||||
file.close() # 关闭文本对象
|
||||
|
@ -136,6 +145,7 @@ if not os.path.exists("{}/.config/uengine-keyboard/key.json".format(get_home()))
|
|||
#
|
||||
###################
|
||||
setting = False
|
||||
close = False
|
||||
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
|
||||
iconPath = "{}/icon.png".format(os.path.split(os.path.realpath(__file__))[0])
|
||||
keybo = json.loads(readtxt("{}/.config/uengine-keyboard/key.json".format(get_home())))
|
||||
|
@ -175,9 +185,10 @@ settingMouseToKeyboard.configure(state=tk.DISABLED)
|
|||
|
||||
style = ttkthemes.ThemedStyle(window)
|
||||
style.set_theme("breeze")
|
||||
window.protocol('WM_DELETE_WINDOW', Closing)
|
||||
window.resizable(0, 0)
|
||||
window.iconphoto(False, tk.PhotoImage(file=iconPath))
|
||||
window.title("uengine 键盘映射 {}".format(version))
|
||||
window.title("UEngine 键盘映射 {}".format(version))
|
||||
|
||||
menu.add_cascade(label="程序", menu=programMenu)
|
||||
menu.add_cascade(label="帮助", menu=aboutMenu)
|
||||
|
@ -202,8 +213,15 @@ settingMouseToKeyboard.grid(row=0, column=0)
|
|||
settingButton.grid(row=0, column=1)
|
||||
|
||||
win.pack(fill="both", expand="yes")
|
||||
|
||||
#threaded.lock.allocate_lock()
|
||||
threading.Thread(target=Key).start()
|
||||
threading.Thread(target=ShowTips).start()
|
||||
|
||||
pyautogui.FAILSAFE = False
|
||||
'''def B(key):
|
||||
if key.event_type == "up":
|
||||
print(pyautogui.position())
|
||||
print(key.name)
|
||||
pyautogui.click(1500, 800)
|
||||
keyboard.hook(B)
|
||||
keyboard.wait()'''
|
||||
window.mainloop()
|
|
@ -2,8 +2,8 @@
|
|||
# 使用系统默认的 python3 运行
|
||||
###########################################################################################
|
||||
# 作者:gfdgd xi
|
||||
# 版本:1.3.3
|
||||
# 更新时间:2021年8月19日
|
||||
# 版本:1.4.2
|
||||
# 更新时间:2021年8月30日
|
||||
# 感谢:anbox、deepin 和 统信
|
||||
# 基于 Python3 的 tkinter 构建
|
||||
###########################################################################################
|
||||
|
@ -34,29 +34,42 @@ programUrl = information["Url"][0]
|
|||
version = information["Version"]
|
||||
goodRunSystem = information["System"]
|
||||
aaptVersion = subprocess.getoutput("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"])
|
||||
updateThingsString = "\n".join(information["Update"])
|
||||
title = "uengine 运行器 {}".format(version)
|
||||
title = "UEngine 运行器 {}".format(version)
|
||||
updateTime = information["Time"]
|
||||
updateThings = "{} 更新内容:\n{}\n更新时间:{}".format(version, updateThingsString, updateTime, time.strftime("%Y"))
|
||||
iconPath = "{}/icon.png".format(os.path.split(os.path.realpath(__file__))[0])
|
||||
desktop = "/opt/apps/uengine-runner/UengineAndroidProgramList.desktop"
|
||||
desktopName = "UengineAndroidProgramList.desktop"
|
||||
contribute = "\n".join(information["Contribute"])
|
||||
useProgram = "\n".join(information["Use"])
|
||||
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"))
|
||||
|
||||
# add sub window
|
||||
#添加窗口开启关闭开关,防止重复开启
|
||||
|
|
|
@ -0,0 +1,83 @@
|
|||
#!/usr/bin/env python3
|
||||
#########################################
|
||||
# 版本:1.4.2
|
||||
# 更新时间:2021年08月30日
|
||||
#########################################
|
||||
import os
|
||||
import shutil
|
||||
import sys
|
||||
import traceback
|
||||
import ttkthemes
|
||||
import tkinter as tk
|
||||
import tkinter.ttk as ttk
|
||||
import tkinter.messagebox as messagebox
|
||||
########################
|
||||
#
|
||||
########################
|
||||
# 写入文本文档
|
||||
def write_txt(path: "路径", things: "内容")->"写入文本文档":
|
||||
file = open(path, 'w', encoding='UTF-8') # 设置文件对象
|
||||
file.write(things) # 写入文本
|
||||
file.close() # 关闭文本对象
|
||||
|
||||
# 读取文本文档
|
||||
def readtxt(path: "路径")->"读取文本文档":
|
||||
f = open(path, "r") # 设置文件对象
|
||||
str = f.read() # 获取内容
|
||||
f.close() # 关闭文本对象
|
||||
return str # 返回结果
|
||||
|
||||
###################
|
||||
# 判断是不是 root
|
||||
###################
|
||||
if os.geteuid() != 0:
|
||||
print("不是以 root 权限运行本程序!")
|
||||
root = tk.Tk()
|
||||
root.overrideredirect(1)
|
||||
root.withdraw()
|
||||
messagebox.showerror(title="错误", message="不是以 root 权限运行本程序!")
|
||||
sys.exit(1)
|
||||
|
||||
###################
|
||||
#
|
||||
###################
|
||||
window = tk.Tk()
|
||||
style = ttkthemes.ThemedStyle(window)
|
||||
style.set_theme("breeze")
|
||||
window.overrideredirect(1)
|
||||
window.withdraw()
|
||||
try:
|
||||
if sys.argv[1] == "1" and messagebox.askokcancel(title="提示", message="你确定要删除吗?"):
|
||||
os.remove("/data/uengine/data/data/misc/adb/adb_keys")
|
||||
messagebox.showinfo(title="提示", message="完成")
|
||||
except:
|
||||
traceback.print_exc()
|
||||
messagebox.showerror(title="错误", message=traceback.format_exc())
|
||||
sys.exit(2)
|
||||
if sys.argv[1] == "1":
|
||||
sys.exit(0)
|
||||
|
||||
if not messagebox.askyesno(title="提示", message='''请阅读以下提示然后确定是否继续:
|
||||
1、安装后即可使用 adb 连接 UEngine;
|
||||
2、重置 UEngine 或 adb 就需要重新设置该支持补丁;
|
||||
3、需要 root 权限;'''):
|
||||
sys.exit(0)
|
||||
# 写入(需要 root)
|
||||
if not os.path.exists("/data/uengine/data/data/misc/adb"):
|
||||
messagebox.showerror(title="错误", message="无法读取 UEngine 数据!")
|
||||
sys.exit(1)
|
||||
try:
|
||||
things = readtxt(sys.argv[2])
|
||||
adbKey = []
|
||||
# 提取内容
|
||||
for i in things.split('\n'):
|
||||
adbKey.append(i[0: i.find(" ")])
|
||||
old = ""
|
||||
if os.path.exists("/data/uengine/data/data/misc/adb/adb_keys"):
|
||||
old = readtxt("/data/uengine/data/data/misc/adb/adb_keys") + "\n"
|
||||
write_txt("/data/uengine/data/data/misc/adb/adb_keys", old + "\n".join(adbKey))
|
||||
messagebox.showinfo(title="提示", message="完成")
|
||||
except:
|
||||
traceback.print_exc()
|
||||
messagebox.showerror(title="错误", message=traceback.format_exc())
|
||||
sys.exit(2)
|
Loading…
Reference in New Issue