From 34937827d9b9fa2ea6074cdb528cc83d8ecaa8bb Mon Sep 17 00:00:00 2001
From: gfdgd xi <3025613752@qq.com>
Date: Sun, 3 Oct 2021 17:42:30 +0800
Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E6=AD=A5=E4=BF=AE=E5=A4=8D=E5=AE=89?=
=?UTF-8?q?=E8=A3=85=E5=9B=BE=E6=A0=87=E6=97=A0=E6=B3=95=E6=AD=A3=E5=B8=B8?=
=?UTF-8?q?=E7=82=B9=E5=87=BB=E8=BF=90=E8=A1=8C=E7=AD=89=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
UengineAndroidProgramList.desktop | 2 +-
build/DEBIAN/control | 4 +-
build/opt/apps/uengine-runner/Language.json | 7 +-
.../UengineAndroidProgramList.desktop | 8 +-
.../opt/apps/uengine-runner/information.json | 2 +-
build/opt/apps/uengine-runner/setting.json | 2 +-
.../apps/uengine-runner/uengine-apk-builder | 24 +--
.../uengine-install (1).desktop | 16 ++
build/opt/apps/uengine-runner/uengine-runner | 195 ++++++++++++------
.../uengine-runner/uengine-runner-launch.sh | 24 +++
.../opt/apps/uengine-runner/uengine_logo.svg | 153 ++++++++++++++
build/usr/bin/uengine-runner-launch.sh | 1 +
.../UengineAndroidProgramList.desktop | 2 +-
.../UengineAndroidSetting.desktop | 2 +-
.../spark-uengine-install.desktop | 8 +-
.../spark-uengine-uninstall.desktop | 15 --
.../com.deepin.pkexec.uengine-bridge.policy | 2 +-
...kexec.uengine-session-launch-helper.policy | 2 +-
com.gitee.uengine.runner.spark.deb | Bin 332836 -> 337148 bytes
information.json | 2 +-
main.py | 31 ++-
new-deb-build/DEBIAN/control | 2 +-
new-deb-build/DEBIAN/postinst | 17 +-
.../UengineAndroidProgramList.desktop | 2 +-
.../UengineAndroidSetting.desktop | 2 +-
.../spark-uengine-install.desktop | 8 +-
.../spark-uengine-uninstall.desktop | 15 --
.../files/Language.json | 7 +-
.../files/UengineAndroidProgramList.desktop | 4 +-
.../files/information.json | 2 +-
.../files/setting.json | 2 +-
.../files/uengine-apk-builder | 24 +--
.../files/uengine-install (1).desktop | 16 ++
.../files/uengine-runner | 195 ++++++++++++------
.../files/uengine-runner-launch.sh | 24 +++
.../files/uengine_logo.svg | 153 ++++++++++++++
.../com.deepin.pkexec.uengine-bridge.policy | 2 +-
...kexec.uengine-session-launch-helper.policy | 2 +-
setting-new.json | 2 +-
setting.json | 2 +-
spark-uengine-runner.deb | Bin 332536 -> 336916 bytes
uengine-apk-builder | 4 +-
uengine-runner-launch.sh | 24 +++
uengine_logo.svg | 153 ++++++++++++++
44 files changed, 927 insertions(+), 237 deletions(-)
create mode 100755 build/opt/apps/uengine-runner/uengine-install (1).desktop
create mode 100755 build/opt/apps/uengine-runner/uengine-runner-launch.sh
create mode 100644 build/opt/apps/uengine-runner/uengine_logo.svg
create mode 120000 build/usr/bin/uengine-runner-launch.sh
delete mode 100644 build/usr/share/applications/spark-uengine-uninstall.desktop
delete mode 100644 new-deb-build/opt/apps/com.gitee.uengine.runner.spark/entries/applications/spark-uengine-uninstall.desktop
create mode 100755 new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/uengine-install (1).desktop
create mode 100755 new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/uengine-runner-launch.sh
create mode 100644 new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/uengine_logo.svg
create mode 100755 uengine-runner-launch.sh
create mode 100644 uengine_logo.svg
diff --git a/UengineAndroidProgramList.desktop b/UengineAndroidProgramList.desktop
index a8821d7..8ff8e7a 100755
--- a/UengineAndroidProgramList.desktop
+++ b/UengineAndroidProgramList.desktop
@@ -2,7 +2,7 @@
Categories=System;
Comment=UEngine 程序菜单
Encoding=UTF-8
-Exec=/usr/bin/uengine-launch.sh --package=org.anbox.appmgr --component=org.anbox.appmgr.AppViewActivity
+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 程序菜单
diff --git a/build/DEBIAN/control b/build/DEBIAN/control
index 7d5c249..cc057c3 100644
--- a/build/DEBIAN/control
+++ b/build/DEBIAN/control
@@ -1,10 +1,10 @@
Package: spark-uengine-runner
-Version: 1.5.0
+Version: 1.5.1
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, deepin-terminal, curl
+Depends: python3, python3-tk, python3-pip, aapt, uengine, python3-pil, python3-setuptools, deepin-terminal, curl, python3-pil, python3-pil.imagetk
Description: UEngine Runner for deepin and UOS
diff --git a/build/opt/apps/uengine-runner/Language.json b/build/opt/apps/uengine-runner/Language.json
index 8fa00f2..5e4a2e7 100644
--- a/build/opt/apps/uengine-runner/Language.json
+++ b/build/opt/apps/uengine-runner/Language.json
@@ -3,7 +3,7 @@
"Main": {
"MainWindow": {
"Title": "UEngine 运行器",
- "LabApkPath": "安装 APK:",
+ "LabApkPath": "安装/卸载 APK:",
"LabUninstallPath": "卸载 Apk:",
"BtnFindApk": "浏览",
"BtnInstall": "安装",
@@ -12,6 +12,7 @@
"BtnUninstall": "卸载",
"Btngeticon": "保存图标",
"BtnSaveApk": "保存Apk",
+ "BtnApkInformation": "Apk 信息",
"Menu": [
{
"Name": "程序",
@@ -125,8 +126,7 @@
"Main": {
"MainWindow": {
"Title": "UEngine Runner",
- "LabApkPath": "Install Apk:",
- "LabUninstallPath": "Uninstall Apk",
+ "LabApkPath": "Install Or Uninstall Apk:",
"BtnFindApk": "Find",
"BtnInstall": "Install",
"BtnShowUengineApp": "Open UEngine App List",
@@ -134,6 +134,7 @@
"BtnUninstall": "Uninstall",
"Btngeticon": "Save Apk Icon",
"BtnSaveApk": "Saving Installed App Apk",
+ "BtnApkInformation": "Apk Information",
"Menu": [
{
"Name": "Program",
diff --git a/build/opt/apps/uengine-runner/UengineAndroidProgramList.desktop b/build/opt/apps/uengine-runner/UengineAndroidProgramList.desktop
index 1b126d3..110309e 100755
--- a/build/opt/apps/uengine-runner/UengineAndroidProgramList.desktop
+++ b/build/opt/apps/uengine-runner/UengineAndroidProgramList.desktop
@@ -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
+Exec=/usr/bin/uengine launch --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
diff --git a/build/opt/apps/uengine-runner/information.json b/build/opt/apps/uengine-runner/information.json
index 9bbd05c..e9a5b16 100755
--- a/build/opt/apps/uengine-runner/information.json
+++ b/build/opt/apps/uengine-runner/information.json
@@ -3,7 +3,7 @@
"https://gitee.com/gfdgd-xi/uengine-runner",
"https://github.com/gfdgd-xi/uengine-runner"
],
- "Version": "1.5.0",
+ "Version": "1.5.1",
"System": "Linux(deepin/UOS)",
"Tips": [
"更多可见:https://gitee.com/gfdgd-xi/uengine-runner/wikis",
diff --git a/build/opt/apps/uengine-runner/setting.json b/build/opt/apps/uengine-runner/setting.json
index be23244..d4f0364 100755
--- a/build/opt/apps/uengine-runner/setting.json
+++ b/build/opt/apps/uengine-runner/setting.json
@@ -1,7 +1,7 @@
{
"Package": "spark-uengine-runner",
"Update": true,
- "Version": "1.5.0",
+ "Version": "1.5.1",
"Url": "https://gfdgd-xi.github.io/update-program/data/UpdateInformation.json"
}
\ No newline at end of file
diff --git a/build/opt/apps/uengine-runner/uengine-apk-builder b/build/opt/apps/uengine-runner/uengine-apk-builder
index d78a287..fbbf991 100755
--- a/build/opt/apps/uengine-runner/uengine-apk-builder
+++ b/build/opt/apps/uengine-runner/uengine-apk-builder
@@ -148,7 +148,7 @@ done
exit 0'''.format(apkPackageName)
desktopFile = '''[Desktop Entry]
Categories=Other;
-Exec=/usr/bin/uengine-launch.sh --action=android.intent.action.MAIN --package={} --component={}
+Exec=uengine launch --action=android.intent.action.MAIN --package={} --component={}
Icon=/usr/share/uengine/icons/{}.png
Terminal=false
Type=Application
@@ -294,7 +294,7 @@ def BuildUengineDesktop(packageName, activityName, showName, iconPath, savePath)
[Desktop Entry]
Categories=app;
Encoding=UTF-8
-Exec=/usr/bin/uengine-launch.sh --action=android.intent.action.MAIN --package={} --component={}
+Exec=/usr/bin/uengine launch.sh --action=android.intent.action.MAIN --package={} --component={}
GenericName={}
Icon={}
MimeType=
@@ -313,16 +313,16 @@ def GetApkChineseLabel(apkFilePath):
line = line.replace("'", "")
return line
-def GetApkIconInApk(apkFilePath):
- info = GetApkInformation(apkFilePath)
- for line in info.split('\n'):
- if "application:" in line:
- line = line[line.index("icon='"): -1]
- line = line.replace("icon='", "")
- if "'" in line:
- line = line[0: line.index("'")]
- return line
- return line
+#def GetApkIconInApk(apkFilePath):
+# info = GetApkInformation(apkFilePath)
+# for line in info.split('\n'):
+# if "application:" in line:
+# line = line[line.index("icon='"): -1]
+# line = line.replace("icon='", "")
+# if "'" in line:
+# line = line[0: line.index("'")]
+# return line
+# return line
#合并两个函数到一起
def SaveApkIcon(apkFilePath, iconSavePath)->"获取 apk 文件的图标":
diff --git a/build/opt/apps/uengine-runner/uengine-install (1).desktop b/build/opt/apps/uengine-runner/uengine-install (1).desktop
new file mode 100755
index 0000000..e386dfa
--- /dev/null
+++ b/build/opt/apps/uengine-runner/uengine-install (1).desktop
@@ -0,0 +1,16 @@
+[Desktop Entry]
+Categories=system;Utility;
+Encoding=UTF-8
+Exec=uengine-runner -ci %F
+GenericName=APK Install(UEngine)
+GenericName[zh_CN]=APK 安装(UEngine)
+Icon=/opt/apps/uengine-runner/icon.png
+MimeType=application/apk;
+Name=APK Install(UEngine)
+Name[zh_CN]=APK 安装(UEngine)
+NoDisplay=true
+OnlyShowIn=Unity;
+StartupNotify=false
+StartupWMClass=APK 安装(UEngine)
+Terminal=false
+Type=Application
diff --git a/build/opt/apps/uengine-runner/uengine-runner b/build/opt/apps/uengine-runner/uengine-runner
index 5a05069..50ff1c7 100755
--- a/build/opt/apps/uengine-runner/uengine-runner
+++ b/build/opt/apps/uengine-runner/uengine-runner
@@ -22,6 +22,8 @@ import threading
import ttkthemes
import webbrowser
import subprocess
+import PIL.Image as Image
+import PIL.ImageTk as ImageTk
import tkinter as tk
import tkinter.ttk as ttk
import tkinter.messagebox as messagebox
@@ -39,37 +41,38 @@ def UninstallProgram(package: "apk 包名")->"卸载程序":
os.remove("{}/.local/share/applications/{}.desktop".format(get_home(), package))
if os.path.exists("{}/{}.desktop".format(get_desktop_path(), package)):
os.remove("{}/{}.desktop".format(get_desktop_path(), package))
- fineUninstallApkHistory.append(ComboUninstallPath.get())
- ComboUninstallPath['value'] = fineUninstallApkHistory
- write_txt(get_home() + "/.config/uengine-runner/FindUninstallApkHistory.json", str(json.dumps(ListToDictionary(fineUninstallApkHistory)))) # 将历史记录的数组转换为字典并写入
+ findApkHistory.append(ComboInstallPath.get())
+ ComboInstallPath['value'] = findApkHistory
+ write_txt(get_home() + "/.config/uengine-runner/FindApkHistory.json", str(json.dumps(ListToDictionary(findApkHistory)))) # 将历史记录的数组转换为字典并写入
+ messagebox.showinfo(message="操作执行完毕!", title="提示")
+ DisabledAndEnbled(False)
return Return
except:
traceback.print_exc()
messagebox.showerror(title="错误", message=traceback.format_exc())
+ DisabledAndEnbled(False)
# 卸载文本框的浏览按钮事件
-def BtnFindUninstallApkClk():
- path = filedialog.askopenfilename(title="选择 Apk", filetypes=[("APK 文件", "*.apk"), ("所有文件", "*.*")], initialdir=json.loads(readtxt(get_home() + "/.config/uengine-runner/FindUninstallApk.json"))["path"])
- if path != "" and path != "()":
- try:
- ComboUninstallPath.set(path)
- write_txt(get_home() + "/.config/uengine-runner/FindUninstallApk.json", json.dumps({"path": os.path.dirname(path)})) # 写入配置文件
- except:
- pass
+#def BtnFindUninstallApkClk():
+# path = filedialog.askopenfilename(title="选择 Apk", filetypes=[("APK 文件", "*.apk"), ("所有文件", "*.*")], initialdir=json.loads(readtxt(get_home() + "/.config/uengine-runner/FindUninstallApk.json"))["path"])
+# if path != "" and path != "()":
+# try:
+# ComboUninstallPath.set(path)
+# write_txt(get_home() + "/.config/uengine-runner/FindUninstallApk.json", json.dumps({"path": os.path.dirname(path)})) # 写入配置文件
+# except:
+# pass
# 卸载按钮事件
def ButtonClick8():
- if ComboUninstallPath.get() is "":
+ if ComboInstallPath.get() is "":
messagebox.showerror(title="提示", message="信息没有填写完整,无法继续卸载 APK")
return
DisabledAndEnbled(True)
- if os.path.exists(ComboUninstallPath.get()):
- path = GetApkPackageName(ComboUninstallPath.get())
+ if os.path.exists(ComboInstallPath.get()):
+ path = GetApkPackageName(ComboInstallPath.get())
else:
- path = ComboUninstallPath.get()
- UninstallProgram(path)
- messagebox.showinfo(message="操作执行完毕!", title="提示")
- DisabledAndEnbled(False)
+ path = ComboInstallPath.get()
+ threading.Thread(target=UninstallProgram, args=[path]).start()
# 浏览窗口
# temp strs
@@ -136,14 +139,16 @@ def DisabledAndEnbled(choose: "启动或者禁用")->"禁用或启动所有控
userChoose = {True: tk.DISABLED, False: tk.NORMAL}
a = userChoose[choose]
ComboInstallPath.configure(state=a)
- ComboUninstallPath.configure(state=a)
+ #ComboUninstallPath.configure(state=a)
BtnFindApk.configure(state=a)
BtnInstall.configure(state=a)
BtnShowUengineApp.configure(state=a)
- BtnUninstallApkBrowser.configure(state=a)
+ #BtnUninstallApkBrowser.configure(state=a)
BtnUninstall.configure(state=a)
Btngeticon.configure(state=a)
BtnSaveApk.configure(state=a)
+ BtnApkInformation.configure(state=a)
+ LabApkPath.configure(state=a)
# 需引入 subprocess
# 运行系统命令并获取返回值
@@ -157,27 +162,27 @@ def Button5Click():
# 打开“uengine 所有程序列表”
def OpenUengineProgramList()->"打开“uengine 所有程序列表”":
- os.system("/usr/bin/uengine-launch.sh --package=org.anbox.appmgr --component=org.anbox.appmgr.AppViewActivity")
+ os.system("uengine launch --package=org.anbox.appmgr --component=org.anbox.appmgr.AppViewActivity")
# 显示“关于这个程序”窗口
-def about_this_program()->"显示“关于这个程序”窗口":
- global about
- global title
- global iconPath
- mess = tk.Toplevel()
- message = ttk.Frame(mess)
- mess.resizable(0, 0)
- mess.title("关于 {}".format(title))
- #mess.iconphoto(False, tk.PhotoImage(file=iconPath))
- img = ImageTk.PhotoImage(Image.open(iconPath))
- LabApkPath = ttk.Label(message, image=img)
- label2 = ttk.Label(message, text=about)
- button1 = ttk.Button(message, text="确定", command=mess.withdraw)
- LabApkPath.pack()
- label2.pack()
- button1.pack(side="bottom")
- message.pack()
- mess.mainloop()
+#def about_this_program()->"显示“关于这个程序”窗口":
+# global about
+# global title
+# global iconPath
+# mess = tk.Toplevel()
+# message = ttk.Frame(mess)
+# mess.resizable(0, 0)
+# mess.title("关于 {}".format(title))
+# #mess.iconphoto(False, tk.PhotoImage(file=iconPath))
+# img = ImageTk.PhotoImage(Image.open(iconPath))
+# LabApkPath = ttk.Label(message, image=img)
+# label2 = ttk.Label(message, text=about)
+# button1 = ttk.Button(message, text="确定", command=mess.withdraw)
+# LabApkPath.pack()
+# label2.pack()
+# button1.pack(side="bottom")
+# message.pack()
+# mess.mainloop()
# 显示“提示”窗口
def helps()->"显示“提示”窗口":
@@ -324,7 +329,7 @@ def BuildUengineDesktop(packageName: "软件包名", activityName: "activity", s
things = '''[Desktop Entry]
Categories=app;
Encoding=UTF-8
-Exec=/usr/bin/uengine-launch.sh --action=android.intent.action.MAIN --package={} --component={}
+Exec=uengine launch --action=android.intent.action.MAIN --package={} --component={}
GenericName={}
Icon={}
MimeType=
@@ -545,7 +550,7 @@ def AdbCPUAndRAWShowInTer():
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()
+ threading.Thread(target=os.system, args=["/usr/bin/uengine launch --action=android.intent.action.MAIN --package=com.android.settings --component=com.android.settings.Settings"]).start()
# 杀死 adb 进程
def AdbKillAdbProgress():
@@ -594,6 +599,67 @@ def AdbAndroidInstallAppList():
subprocess.getoutput("adb -s 192.168.250.2:5555 shell pm list package -3"),
subprocess.getoutput("adb -s 192.168.250.2:5555 shell pm list packages -f")))
+def GetApkVersion(apkFilePath):
+ info = GetApkInformation(apkFilePath)
+ for line in info.split('\n'):
+ if "package:" in line:
+ if "compileSdkVersion='" in line:
+ line = line.replace(line[line.index("compileSdkVersion='"): -1], "")
+ if "platform" in line:
+ line = line.replace(line[line.index("platform"): -1], "")
+ line = line.replace(line[0: line.index("versionName='")], "")
+ line = line.replace("versionName='", "")
+ line = line.replace("'", "")
+ line = line.replace(" ", "")
+ return line
+
+class ApkInformation():
+ def ShowWindows():
+ global fullInformation
+ global path
+ global tab1
+ path = ComboInstallPath.get()
+
+ message = tk.Toplevel()
+
+ tab = ttk.Notebook(message)
+
+ tab1 = ttk.Frame(message)
+ tab2 = ttk.Frame(message)
+
+ fullInformation = tk.Text(tab2)
+
+ tab.add(tab1, text="简化版")
+ tab.add(tab2, text="完整版")
+
+ fullInformation.pack(expand="yes", fill="both")
+
+ tab.pack(expand="yes", fill="both")
+
+ threading.Thread(target=ApkInformation.GetInformation).start()
+
+ message.mainloop()
+
+ def GetInformation():
+ # 获取详细信息
+ fullInformation.configure(state=tk.NORMAL)
+ fullInformation.insert("1.0", GetApkInformation(path))
+ fullInformation.configure(state=tk.DISABLED)
+ # 获取图标
+ SaveApkIcon(path, "/tmp/uengine-runner-android-app-icon.png")
+ # 读取图标
+ image = Image.open("/tmp/uengine-runner-android-app-icon.png")
+ if image.size[0] + image.size[1] <= 512:
+ ttk.Label(tab1, image=ImageTk.PhotoImage(image)).pack()
+ else:
+ ttk.Label(tab1, image=ImageTk.PhotoImage(image.resize((256, 256), Image.ANTIALIAS))).pack()
+ info = '''包名:{}
+中文名:{}
+Activity:{}
+版本:{}'''.format(GetApkPackageName(path), GetApkChineseLabel(path), GetApkActivityName(path), GetApkVersion(path))
+ ttk.Label(tab1, text=info).pack()
+
+
class AdbChangeUengineDisplaySize():
def ShowWindows():
global displayX
@@ -817,7 +883,7 @@ class AddNewUengineDesktopLink():
# 打开测试
def TestOpen():
- threading.Thread(target=os.system, args=["/usr/bin/uengine-launch.sh --package={} --component={}".format(packageName.get(), activityName.get())]).start()
+ threading.Thread(target=os.system, args=["/usr/bin/uengine launch --package={} --component={}".format(packageName.get(), activityName.get())]).start()
AddNewUengineDesktopLink.SaveHistory()
# 浏览文件
@@ -826,7 +892,7 @@ class AddNewUengineDesktopLink():
if path == "" or path == ():
return
packageName.set(GetApkPackageName(path))
- activityName.set(GetApkActivityName(path))
+ activityName.set(str(GetApkActivityName(path)))
write_txt(get_home() + "/.config/uengine-runner/FindApkName.json", json.dumps({"path": os.path.dirname(path)})) # 写入配置文件
def UseProgram():
@@ -1036,18 +1102,19 @@ win.geometry(""+"+{:.0f}+{:.0f}".format(x, y))
# 创建控件
FrmInstall = ttk.Frame(window)
-FrmUninstall = ttk.Frame(window)
+#FrmUninstall = ttk.Frame(window)
LabApkPath = ttk.Label(window, text=langFile[lang]["Main"]["MainWindow"]["LabApkPath"])
-LabUninstallPath = ttk.Label(window, text=langFile[lang]["Main"]["MainWindow"]["LabUninstallPath"])
+#LabUninstallPath = ttk.Label(window, text=langFile[lang]["Main"]["MainWindow"]["LabUninstallPath"])
ComboInstallPath = ttk.Combobox(window, width=50)
-ComboUninstallPath = ttk.Combobox(window, width=50)
+#ComboUninstallPath = ttk.Combobox(window, width=50)
BtnFindApk = ttk.Button(FrmInstall, text=langFile[lang]["Main"]["MainWindow"]["BtnFindApk"], command=FindApk)
BtnInstall = ttk.Button(FrmInstall, text=langFile[lang]["Main"]["MainWindow"]["BtnInstall"], command=Button3Install)
BtnShowUengineApp = ttk.Button(window, text=langFile[lang]["Main"]["MainWindow"]["BtnShowUengineApp"], command=Button5Click)
-BtnUninstallApkBrowser = ttk.Button(FrmUninstall, text=langFile[lang]["Main"]["MainWindow"]["BtnUninstallApkBrowser"], command=BtnFindUninstallApkClk)
-BtnUninstall = ttk.Button(FrmUninstall, text=langFile[lang]["Main"]["MainWindow"]["BtnUninstall"], command=ButtonClick8)
+#BtnUninstallApkBrowser = ttk.Button(FrmUninstall, text=langFile[lang]["Main"]["MainWindow"]["BtnUninstallApkBrowser"], command=BtnFindUninstallApkClk)
+BtnUninstall = ttk.Button(FrmInstall, text=langFile[lang]["Main"]["MainWindow"]["BtnUninstall"], command=ButtonClick8)
Btngeticon = ttk.Button(FrmInstall, text=langFile[lang]["Main"]["MainWindow"]["Btngeticon"], command=SaveIconToOtherPath)
BtnSaveApk = ttk.Button(FrmInstall, text=langFile[lang]["Main"]["MainWindow"]["BtnSaveApk"], command=SaveInstallUengineApp)
+BtnApkInformation = ttk.Button(FrmInstall, text=langFile[lang]["Main"]["MainWindow"]["BtnApkInformation"], command=ApkInformation.ShowWindows)
# 设置菜单栏
menu = tk.Menu(window, background="white")
@@ -1103,8 +1170,8 @@ help.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][3]["Menu"][0
help.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][3]["Menu"][1], command=showhelp) # 设置“关于这个程序”项
uengineService.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][2]["Menu"][0], command=StartUengine)
-uengineService.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][2]["Menu"][0], command=StopUengine)
-uengineService.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][2]["Menu"][0], command=UengineRestart)
+uengineService.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][2]["Menu"][1], command=StopUengine)
+uengineService.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][2]["Menu"][2], command=UengineRestart)
uengineInternet.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][3]["Menu"][0], command=UengineBridgeStart)
uengineInternet.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][3]["Menu"][1], command=UengineBridgeStop)
@@ -1141,14 +1208,15 @@ uengineUseAdb.configure(activebackground="dodgerblue")
uengineData.configure(activebackground="dodgerblue")
# 设置控件
-ComboUninstallPath['value'] = fineUninstallApkHistory
+#ComboUninstallPath['value'] = fineUninstallApkHistory
ComboInstallPath['value'] = findApkHistory
try:
if sys.argv[1] == "-i":
ComboInstallPath.set(sys.argv[2])
print("Install Path: " + sys.argv[2])
elif sys.argv[1] == "-u":
- ComboUninstallPath.set(sys.argv[2])
+ #ComboUninstallPath.set(sys.argv[2])
+ ComboInstallPath.set(sys.argv[2])
print("Unstall Path: " + sys.argv[2])
else:
print("Command Format Error")
@@ -1159,25 +1227,26 @@ win.config(menu=menu) # 显示菜单栏
-LabApkPath.grid(row=1, column=0,sticky= tk.W,padx=3)
-ComboInstallPath.grid(row=2, column=0,padx=3)
+LabApkPath.grid(row=0, column=0,sticky= tk.W,padx=3)
+ComboInstallPath.grid(row=1, column=0,padx=3)
-FrmInstall.grid(row=2, column=1,padx=3, rowspan=2)
+FrmInstall.grid(row=0, column=1,padx=3, rowspan=3)
BtnFindApk.grid(row=0, column=0)
BtnInstall.grid(row=0, column=1)
-LabUninstallPath.grid(row=4, column=0,sticky= tk.W,padx=3)
-ComboUninstallPath.grid(row=5, column=0,padx=3)
+#LabUninstallPath.grid(row=4, column=0,sticky= tk.W,padx=3)
+#ComboUninstallPath.grid(row=5, column=0,padx=3)
-FrmUninstall.grid(row=5, column=1,padx=3)
-BtnUninstallApkBrowser.grid(row=0, column=0)
-BtnUninstall.grid(row=0, column=1)
+#FrmUninstall.grid(row=5, column=1,padx=3)
+#BtnUninstallApkBrowser.grid(row=0, column=0)
+BtnUninstall.grid(row=1, column=0)
-BtnShowUengineApp.grid(row=6, column=0,sticky= tk.W,padx=3,pady=2)
+BtnShowUengineApp.grid(row=2, column=0,sticky= tk.W,padx=3,pady=2)
-Btngeticon.grid(row=1, column=0,sticky= tk.W,padx=3,pady=2)
-BtnSaveApk.grid(row=1, column=1,sticky= tk.W,padx=3,pady=2)
+BtnApkInformation.grid(row=2, column=1,sticky= tk.W,padx=3,pady=2)
+Btngeticon.grid(row=1, column=1,sticky= tk.W,padx=3,pady=2)
+BtnSaveApk.grid(row=2, column=0,sticky= tk.W,padx=3,pady=2)
window.pack()
diff --git a/build/opt/apps/uengine-runner/uengine-runner-launch.sh b/build/opt/apps/uengine-runner/uengine-runner-launch.sh
new file mode 100755
index 0000000..3e09ebd
--- /dev/null
+++ b/build/opt/apps/uengine-runner/uengine-runner-launch.sh
@@ -0,0 +1,24 @@
+#!/bin/bash
+
+# 忽略社区版检测
+
+pkgRunCnt=`ps -ef |grep "uengine launch" |grep -v grep |grep "$pkg" |wc -l`
+if [ $pkgRunCnt -ge 1 ]; then
+ #防止短时间内多次打开同一应用,如果应用正在启动中,此次忽略
+ exit 0
+fi
+
+#等Session服务启动完全
+wscont=0
+isReady=`busctl --user get-property org.anbox /org/anbox org.anbox.ApplicationManager Ready`
+if [ "$isReady" != "b true" ] ;then
+ sleep 2
+fi
+while [ "$isReady" = "b false" -a $wscont -lt 10 ]
+do
+ sleep 1
+ isReady=`busctl --user get-property org.anbox /org/anbox org.anbox.ApplicationManager Ready`
+ let wscont++
+done
+
+uengine launch $*
diff --git a/build/opt/apps/uengine-runner/uengine_logo.svg b/build/opt/apps/uengine-runner/uengine_logo.svg
new file mode 100644
index 0000000..c77d1fe
--- /dev/null
+++ b/build/opt/apps/uengine-runner/uengine_logo.svg
@@ -0,0 +1,153 @@
+
+
\ No newline at end of file
diff --git a/build/usr/bin/uengine-runner-launch.sh b/build/usr/bin/uengine-runner-launch.sh
new file mode 120000
index 0000000..4439cb3
--- /dev/null
+++ b/build/usr/bin/uengine-runner-launch.sh
@@ -0,0 +1 @@
+/opt/apps/uengine-runner/uengine-runner-launch.sh
\ No newline at end of file
diff --git a/build/usr/share/applications/UengineAndroidProgramList.desktop b/build/usr/share/applications/UengineAndroidProgramList.desktop
index 8ff03ad..79d71dc 100644
--- a/build/usr/share/applications/UengineAndroidProgramList.desktop
+++ b/build/usr/share/applications/UengineAndroidProgramList.desktop
@@ -3,7 +3,7 @@ Categories=System;
Comment=UEngine App List
Comment[zh]=UEngine 程序菜单
Encoding=UTF-8
-Exec=/usr/bin/uengine-launch.sh --package=org.anbox.appmgr --component=org.anbox.appmgr.AppViewActivity
+Exec=/usr/bin/uengine launch --package=org.anbox.appmgr --component=org.anbox.appmgr.AppViewActivity
Icon=/opt/apps/uengine-runner/icon.png
MimeType=
Name=UEngine App List
diff --git a/build/usr/share/applications/UengineAndroidSetting.desktop b/build/usr/share/applications/UengineAndroidSetting.desktop
index 1ffa7b9..3d9253c 100644
--- a/build/usr/share/applications/UengineAndroidSetting.desktop
+++ b/build/usr/share/applications/UengineAndroidSetting.desktop
@@ -2,7 +2,7 @@
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
+Exec=/usr/bin/uengine launch --action=android.intent.action.MAIN --package=com.android.settings --component=com.android.settings.Settings
Icon=/opt/apps/uengine-runner/icon.png
MimeType=
Name=UEngine System Control Panel
diff --git a/build/usr/share/applications/spark-uengine-install.desktop b/build/usr/share/applications/spark-uengine-install.desktop
index 6107ff1..a854ea8 100644
--- a/build/usr/share/applications/spark-uengine-install.desktop
+++ b/build/usr/share/applications/spark-uengine-install.desktop
@@ -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 Or Uninstall APK(UEngine runner)
+Comment=Install Or Uninstall APK(UEngine runner)
+Comment[zh]=安装/卸载 APK(UEngine 运行器)
+Name[zh]=安装/卸载 APK(UEngine 运行器)
StartupNotify=true
Hidden=false
NoDisplay=true
diff --git a/build/usr/share/applications/spark-uengine-uninstall.desktop b/build/usr/share/applications/spark-uengine-uninstall.desktop
deleted file mode 100644
index c5e1c4c..0000000
--- a/build/usr/share/applications/spark-uengine-uninstall.desktop
+++ /dev/null
@@ -1,15 +0,0 @@
-[Desktop Entry]
-Type=Application
-Encoding=UTF-8
-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 运行器)
-StartupNotify=true
-Hidden=false
-NoDisplay=true
-MimeType=application/vnd.android.package-archive
\ No newline at end of file
diff --git a/build/usr/share/polkit-1/actions/com.deepin.pkexec.uengine-bridge.policy b/build/usr/share/polkit-1/actions/com.deepin.pkexec.uengine-bridge.policy
index 7c0ca86..2a140e4 100644
--- a/build/usr/share/polkit-1/actions/com.deepin.pkexec.uengine-bridge.policy
+++ b/build/usr/share/polkit-1/actions/com.deepin.pkexec.uengine-bridge.policy
@@ -8,7 +8,7 @@
Authentication is required to Setting UEngine Internet Bridge
设置 UEngine 桥接需要输入密码
- kbox
+ /usr/share/uengine/ui/uengine_logo.svg
no
no
diff --git a/build/usr/share/polkit-1/actions/com.deepin.pkexec.uengine-session-launch-helper.policy b/build/usr/share/polkit-1/actions/com.deepin.pkexec.uengine-session-launch-helper.policy
index 70d8f15..2b57ffe 100644
--- a/build/usr/share/polkit-1/actions/com.deepin.pkexec.uengine-session-launch-helper.policy
+++ b/build/usr/share/polkit-1/actions/com.deepin.pkexec.uengine-session-launch-helper.policy
@@ -8,7 +8,7 @@
Authentication is required to Change UEngine
设置 UEngine 需要输入密码
- kbox
+ /usr/share/uengine/ui/uengine_logo.svg
no
no
diff --git a/com.gitee.uengine.runner.spark.deb b/com.gitee.uengine.runner.spark.deb
index 72e4ee2db08be496915a5c1f00ecf67ef486ab30..c0318197c61a9f9e12835d8fe49a631a86049f24 100755
GIT binary patch
literal 337148
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