完善帮助文档

This commit is contained in:
gfdgd xi 2022-02-11 19:25:47 +08:00
parent 35fc896aaa
commit 5e31ca90c5
96 changed files with 1825 additions and 202 deletions

BIN
Help/1-1-1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
Help/1-1-2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

BIN
Help/1-1-3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

BIN
Help/1-1-4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

BIN
Help/1-1-5.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

BIN
Help/1-2-1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

BIN
Help/1-2-2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

BIN
Help/1-3-1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

BIN
Help/1-4-1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

BIN
Help/1-5-1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

BIN
Help/1-5-2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

BIN
Help/1-6-1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

BIN
Help/1-6-2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

BIN
Help/1-6-3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

BIN
Help/1-7-1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

BIN
Help/1-8-1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

BIN
Help/1-9-1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

BIN
Help/1-9-2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

BIN
Help/1-9-3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
Help/1-9-4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 115 KiB

BIN
Help/1-9-5.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

BIN
Help/1-9-6.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

BIN
Help/1-9-7.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

197
Help/index.md Normal file
View File

@ -0,0 +1,197 @@
# UEngine 运行器帮助
---
## 帮助简述
> 安装APK点浏览按钮选中需要安装的APK然后点安装按钮
> 卸载APK在卸载APK下面的输入框内输入需要卸载的APK包名点卸载按钮如果无法获取包名可以通过浏览APK文件程序自动获取包名进行卸载。
> 保存APK图标在安装APK下面的输入框浏览或输入APK的路径然后点击“保存图标”按钮选择保存位置即可
> 重置删除UEngine数据点击菜单栏的“UEngine”的“清空UEngine数据”输入密码重启即可
> 注意如果任何安卓一遍打不开多打开几遍应该就可以重新加载UEngine配置了
> 打开UEngine应用列表打开系统已安装的应用列表安卓界面
> **提示:**
> **※1、近期升级的 UEngine 安装时会自动把要安装的 apk 删除,如果这个 apk 文件非常重要请拷贝一个备份版并安装这个备份版**
> **2、需要你有使用 root 权限的能力;**
> **3、需要安装 UEngine 才能使用;**
> **4、提取 apk 图标的 apk 路径以“安装 apk”那栏为准;**
> **5、如果想要使用adb连接UEngine或其他手机请使用 1.2.0 以前的版本。如需连接UEngine请安装adb补丁**
---
## 详细帮助
### 如何安装自己的 Apk
*请保证您已经把要安装的Apk下载到电脑本地并保证Apk完整且有权限*
#### 方法一
1. 打开 UEngine 运行器
![](1-1-1.png)
2. 点击浏览按钮找到想要安装的Apk
![](1-1-2.png)
3. 点击安装按钮,输入密码
![](1-1-3.png)
4. 提示“操作完成”,在启动器找到新安装的图标启动即可
![](1-1-4.png)
![](1-1-5.png)
#### 方法二
1. 打开要安装的Apk所在目录右击=>打开方式=>安装或卸载 APKUEngine 运行器)
![](1-2-1.png)
2. 点击安装按钮,输入密码
![](1-1-3.png)
3. 提示“操作完成”,在启动器找到新安装的图标启动即可
![](1-1-4.png)
![](1-2-2.png)
### 卸载Apk
#### 方法一
1. 打开 UEngine 运行器
![](1-1-1.png)
2. 点击浏览按钮找到想要卸载的Apk
![](1-1-2.png)
3. 点击卸载按钮,输入密码
![](1-1-3.png)
4. 提示“操作完成”,卸载完成
![](1-1-4.png)
#### 方法二
1. 打开要安装的Apk所在目录右击=>打开方式=>安装或卸载 APKUEngine 运行器)
![](1-2-1.png)
2. 点击卸载按钮,输入密码
![](1-1-3.png)
3. 提示“操作完成”,卸载完成
![](1-1-4.png)
### 查询Apk信息
1. 打开 UEngine 运行器
![](1-1-1.png)
2. 点击“Apk 信息” 按钮即可查询Apk信息
![](1-3-1.png)
### 查看程序评分
1. 打开 UEngine 运行器
![](1-1-1.png)
2. 点击“Apk 信息” 按钮即可查询Apk信息
![](1-3-1.png)
3. 点击“查看程序评分情况”即可查看其他用户对程序的评分
![](1-4-1.png)
### 上传用户评分
1. 打开 UEngine 运行器
![](1-1-1.png)
2. 点击“Apk 信息” 按钮即可查询Apk信息
![](1-3-1.png)
3. 点击“上传程序评分情况”,按照要求进行评分
![](1-5-1.png)
4. 如果提示“提交成功!感谢您的提交”就代表评分成功
![](1-5-2.png)
### 更新程序
### 更新程序
1. 打开 UEngine 运行器
![](1-1-1.png)
2. 点击“关于”=>“检查更新”,打开更新窗口
![](1-6-1.png)
3. **保证您的电脑没有运行其它Python应用以及本程序所有工作都已经完成**再点击“更新更新过程中会关闭所有Python应用包括这个应用输入密码以进行更新
![](1-6-2.png)
4. 提示“更新完毕!”后重新启动 UEngine 运行器就更新完毕了
![](1-6-3.png)
### 保存图标
1. 打开 UEngine 运行器
![](1-1-1.png)
2. 选择要保存图标的Apk点击“保存图标”按钮选择要保存的位置即可
![](1-7-1.png)
### 打开已安装的程序列表
#### 方法一
打开启动器=>UEngine 程序菜单 即可
#### 方法二
1. 打开 UEngine 运行器
![](1-1-1.png)
2. 点击“打开 UEngine 应用列表”即可
![](1-8-1.png)
### 将 Apk 打包成可以无需本应用即可安装的 deb 包
#### 打开 UEngine 打包器的三种方法
##### 方法一
启动器=>UEngine 应用打包器
##### 方法二
打开要打包的 Apk 所在目录,右击=>“打开方式”=>“打包 debUEngine 运行器)”(接下来可以略过步骤一)
![](1-9-1.png)
##### 方式三
打开 UEngine 运行器点击菜单栏的“UEngine”=>“UEngine 应用打包”
![](1-9-2.png)
#### 打包 deb
1. 打开“UEngine Apk 应用打包器”点击“浏览按钮”选择apk
![](1-9-3.png)
2. 根据实际情况勾选选项,然后点击“打包”进行打包
![](1-9-4.png)
3. 当提示“”时,打包完成,可以在桌面(一般是`/home/XXX/Desktop`)找到您打包的 deb 包,可以双击安装
![](1-9-5.png)
![](1-9-6.png)
![](1-9-7.png)
#### 方法二
©2021-2022

View File

@ -1,4 +1,4 @@
# uengine 运行器 1.5.3 # uengine 运行器 1.6.0
### 介绍 ### 介绍
        新版本Deepin/UOS发布后可以在应用商店安装部分官方已适配的安卓应用对爱好者来说不能自己安装APK软件包始终差点意思本程序可以为Deepin/UOS上的UEngine安卓运行环境安装自定义APK软件包并能发送安装的APK包启动菜单到桌面或系统菜单。         新版本Deepin/UOS发布后可以在应用商店安装部分官方已适配的安卓应用对爱好者来说不能自己安装APK软件包始终差点意思本程序可以为Deepin/UOS上的UEngine安卓运行环境安装自定义APK软件包并能发送安装的APK包启动菜单到桌面或系统菜单。
@ -15,12 +15,13 @@
### 更新内容 ### 更新内容
#### V1.6.0(开学版,即将完成!!!) #### V1.6.0(开学版,即将完成!!!)
##### 目前更新内容 ##### 目前更新内容
**※1、更换了新的图标(暂未全部更新完成!)** **※1、更换了新的图标**
**※2、支持程序的评分和查看分数详情的功能如果炸了我的服务器这个就作废了** **※2、支持程序的评分和查看分数详情的功能如果炸了我的服务器这个就作废了**
**※3、修复了在安装奇奇怪怪的安装包如格式、标识不正确的时的快捷方式图标为空以及快捷方式文本的变化** **※3、修复了在安装奇奇怪怪的安装包如格式、标识不正确的时的快捷方式图标为空以及快捷方式文本的变化**
**※4、添加更新功能可以自行升级到最新版本如果炸了我的服务器这个就作废了** **※4、添加更新功能可以自行升级到最新版本如果炸了我的服务器这个就作废了**
**※5、新增程序帮助** **※5、新增程序帮助**
6、新填彩蛋在“关于”=>“关于”显示的窗口双击“关于”开启)(如果炸了我的服务器,这个就作废了) 6、新填彩蛋在“关于”=>“关于”显示的窗口双击“关于”开启)(如果炸了我的服务器,这个就作废了)
7、修复了“UEngine 打包器”前缀选项勾选设置不生效的问题
#### V1.5.32021-12-12DDUC11版 #### V1.5.32021-12-12DDUC11版
##### 更新内容 ##### 更新内容

View File

@ -3,7 +3,7 @@ Categories=System;
Comment=UEngine 程序菜单 Comment=UEngine 程序菜单
Encoding=UTF-8 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 Icon=/opt/apps/uengine-runner/menu.svg
MimeType= MimeType=
Name=UEngine 程序菜单 Name=UEngine 程序菜单
StartupWMClass=UEngine 程序菜单 StartupWMClass=UEngine 程序菜单

View File

@ -5,6 +5,6 @@ Homepage: [https://gitee.com/gfdgd-xi/uengine-runner, https://github.com/gfdgd-x
Architecture: all Architecture: all
Priority: optional Priority: optional
Conflicts: com.gitee.uengine.runner.spark, spark-uengine-apk-builder Conflicts: com.gitee.uengine.runner.spark, spark-uengine-apk-builder
Depends: python3, python3-tk, python3-pip, aapt, uengine, python3-setuptools, deepin-terminal, curl, python3-pil, python3-pil.imagetk, python3-requests, adb, translate-shell, python3-xlib, python3-requests, fonts-noto-cjk, python3-numpy Depends: python3, python3-tk, python3-pip, aapt, uengine, python3-setuptools, deepin-terminal, curl, python3-pil, python3-pil.imagetk, python3-requests, adb, translate-shell, python3-xlib, fonts-noto-cjk, python3-numpy
Description: UEngine Runner for deepin and UOS Description: UEngine Runner for deepin and UOS

View File

@ -4,7 +4,6 @@ python3 -m pip install --upgrade pip -i http://mirrors.aliyun.com/pypi/si
python3 -m pip install --upgrade ttkthemes -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com python3 -m pip install --upgrade ttkthemes -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
python3 -m pip install --upgrade pyautogui -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com python3 -m pip install --upgrade pyautogui -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
python3 -m pip install --upgrade keyboard -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com python3 -m pip install --upgrade keyboard -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
#python3 -m pip install --upgrade requests -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
# 刷新图标缓存 # 刷新图标缓存
gtk-update-icon-cache /usr/share/icons/bloom gtk-update-icon-cache /usr/share/icons/bloom
# 向服务器返回安装数加1不显示内容且忽略错误 # 向服务器返回安装数加1不显示内容且忽略错误

View File

@ -0,0 +1,12 @@
<head>
<title>UEngine 运行器 1.6.0 帮助</title>
</head>
<body>
<h1>UEngine 运行器 1.6.0 帮助</h1>
<hr/>
<h2>安装自定义 APK 应用</h2>
<h3>方法1</h3>
<h3>方法2</h3>
<hr/>
<h2>高级功能</h2>
</body>

View File

@ -18,7 +18,8 @@
"Name": "程序", "Name": "程序",
"Menu": [ "Menu": [
"清空软件历史记录", "清空软件历史记录",
"退出程序" "退出程序",
"程序设置"
] ]
}, },
{ {
@ -112,7 +113,9 @@
"Menu": [ "Menu": [
"程序官网", "程序官网",
"关于", "关于",
"反馈程序问题和建议" "反馈程序问题和建议",
"检查更新",
"更多帮助"
] ]
} }
] ]
@ -152,7 +155,8 @@
"Name": "Program", "Name": "Program",
"Menu": [ "Menu": [
"Clean Program History", "Clean Program History",
"Exit The Program" "Exit The Program",
"Program Setting"
] ]
}, },
{ {
@ -246,7 +250,9 @@
"Menu": [ "Menu": [
"Program WebSize", "Program WebSize",
"Program Help", "Program Help",
"Upload Problem And Advice" "Upload Problem And Advice",
"ABout This Program",
"More Help"
] ]
} }
] ]

View File

@ -0,0 +1,273 @@
# uengine 运行器 1.5.3
### 介绍
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;新版本Deepin/UOS发布后可以在应用商店安装部分官方已适配的安卓应用对爱好者来说不能自己安装APK软件包始终差点意思本程序可以为Deepin/UOS上的UEngine安卓运行环境安装自定义APK软件包并能发送安装的APK包启动菜单到桌面或系统菜单。
![1.5.3](https://storage.deepin.org/thread/202112121231595786_截图_选择区域_20211212123106.png)
测试平台UOS 家庭版 21.1deepin 20.3,UOS 专业版 1040
(自己美术功底太差,图标直接用 anbox 的了)
## 安装前必读
+ releases 里有两个 deb 包,**是一样的除了包名和打包标准不同****只能选择其中一个安装****两个都安装会产生冲突**两个deb包的作用如下
- 包名为`spark-uengine-runner`的,是旧包,按照**正常标准打包**,适用于从**星火应用商店安装**以及**从低版本即1.3.2即以下版本升级上来的用户)升级**或者**之前就安装该版本的用户**甚至**想跨平台的用户**等等
- 包名为`com.gitee.uengine.runner.spark`的,是按照**deepin/UOS的标准打包的**,适用于**之前就安装该版本并升级上来的用户**以及**希望按照该方法打包的用户**等等
+ **近期升级的 UEngine 安装时会自动把要安装的 apk 删除**,如果这个 apk 文件非常重要请**拷贝一个备份版并安装这个备份版**
### 更新内容
#### V1.6.0(开学版,即将完成!!!)
##### 目前更新内容
**※1、更换了新的图标暂未全部更新完成**
**※2、支持程序的评分和查看分数详情的功能如果炸了我的服务器这个就作废了**
**※3、修复了在安装奇奇怪怪的安装包如格式、标识不正确的时的快捷方式图标为空以及快捷方式文本的变化**
**※4、添加更新功能可以自行升级到最新版本如果炸了我的服务器这个就作废了**
**※5、新增程序帮助**
6、新填彩蛋在“关于”=>“关于”显示的窗口双击“关于”开启)(如果炸了我的服务器,这个就作废了)
#### V1.5.32021-12-12DDUC11版
##### 更新内容
**※1、修复了在 UOS 家庭版安装 apk 文件安装包信息为 None 的问题**
**※2、“添加/删除 UEngine 图标”窗口的写入按钮在目录**`~/.local/share/icons/hicolor/256x256/apps`**不存在时点击无反应参考报错1.5.3-1**
**※3、修复了“UEngine APK 应用打包器”打包的deb包的.desktop文件的**`Icon`**和**`Exec`**字段有误的问题以及使用“使用前缀uengine-dc”前缀的问题**
4、“UEngine APK 应用打包器”支持打包完后自动删除临时目录
5、“UEngine APK 应用打包器”以及“添加/删除 UEngine 图标”支持在运行出现错误时显示报错
##### 报错:
*1.5.3-1*
```bash
Exception in Tkinter callback
Traceback (most recent call last):
File "/usr/lib/python3.7/tkinter/__init__.py", line 1705, in __call__
return self.func(*args)
File "/home/gfdgd_xi/Desktop/uengine-runner/main.py", line 865, in SaveDesktopLink
shutil.copy(programPath + "/defult.png", iconSavePath)
File "/usr/lib/python3.7/shutil.py", line 245, in copy
copyfile(src, dst, follow_symlinks=follow_symlinks)
File "/usr/lib/python3.7/shutil.py", line 121, in copyfile
with open(dst, 'wb') as fdst:
FileNotFoundError: [Errno 2] No such file or directory: '/home/gfdgd_xi/.local/share/icons/hicolor/256x256/apps/com.miHoYo.cloudgames.ys.png'
```
##### 截图
![1.5.3](https://storage.deepin.org/thread/202112121231595786_截图_选择区域_20211212123106.png)
#### V1.5.22021-11-28
**※1、支持安装和构建带 Root 的 UEngine 的镜像**
2、更新了反馈链接
![](https://storage.deepin.org/thread/202111281607295590_截图_选择区域_20211128160706.png)
#### V1.5.12021-10-05国庆节版
**※1、精简用户界面合并安装和卸载输入框和浏览按钮等**
**※2、修复安装以其的程序图标无法点击进入的问题deepin 社区版不存在此问题)**
**※3、支持在程序本体反馈问题**
4、修复了菜单栏的部分显示问题
5、支持显示 apk 的部分信息
6、支持删除 UEngine 程序运行检查以及重新安装 UEngine 的功能
7、自带有跳过家庭版必须有指定包名才能运行程序限制的脚本
8、补回依赖包“adb”
![1.5.1](https://storage.deepin.org/thread/202110051821076836_截图_dde-desktop_20211005182021.png)
#### V1.5.02021-09-21中秋节版
**没有什么实质性的功能,只是开始有多语言支持**
**※1、部分窗口支持英语**
2、修复在英语状态下启动器图标名称异常的问题
![1.5.0](https://storage.deepin.org/thread/202109202157289430_截图_选择区域_20210920215550.png)
#### V1.4.32021-09-11开学第一版
**※1、支持打包器打包的包名带前缀“uengine-dc”**
**※2、修复了两种情况可能导致程序卡住/出错无法继续运行的情况(配置文件夹不齐全和获取版本信息卡住两种情况)**
**※3、修改了 UEngine 打包器打包的应用包名可能有大写的情况**
4、支持一键使用 Scrcpy 连接 UEngine①先安装 adb 破解补丁②请确保是使用snap安装的 Scrcpy【目前只支持 snap 安装的 Scrcpy 进行连接】)
5、支持右键打包 apk
![1.4.3](https://storage.deepin.org/thread/202109111635389828_截图_选择区域_20210911163449.png)
#### V1.4.22021-08-30快开学了
**※1、添加adb破解补丁用于可以让adb连接UEngine并支持adb的部分操作;**
2、菜单栏的项目添加以及外观优化;
3、修复键盘映射无法添加新映射的问题并修改键盘映射启动方式;
4、把 uengine 改为 UEngine;
5、修改 pkexec 获取密码时显示的图标和文本;
6、添加了 UEngine 系统设置的快捷方式;
![1.4.2](https://storage.deepin.org/thread/202108301750554993_截图_选择区域_20210830134502.png)
#### V1.4.12021-08-26
**※1、初步支持键盘映射**
2、修复新版包在发送uengine列表快捷方式时会提示找不到文件
![1.4.1](https://storage.deepin.org/thread/20210826151947783_截图_选择区域_20210826151312.png)
#### V1.4.02021-08-19
**※1、添加新版打包方式deepin打包方式;**
**※2、支持测试运行/创建/删除uengine图标;**
**※3、支持提取安装的apk;**
**※4、支持打包deb包;**
5、修改菜单栏布局;
6、支持打开uengine数据目录和用户数据目录;
7、程序信息保存到json,非直接写入程序本体;
8、更多命令操作;
![1.4.0](https://storage.deepin.org/thread/202108191410327464_截图_选择区域_20210819140938.png)
#### V1.3.22021-08-16
**※1、支持uengine数据重置;**
**※2、支持修改uengine网络桥接的启动状态;**
**※3、支持右键安装/卸载;**
**※4、支持启用或禁用uengine;**
**※5、修复打包问题不会出现“dpkg:警告:卸载spark-uengine-runner时目录/opt/apps/uengine-runner非空因而不会删除该目录”的错误;**
![1.3.2](https://storage.deepin.org/thread/202108152141139401_截图_选择区域_20210815213948.png)
#### V1.3.12021-08-12
**※1、修复打包问题防止部分用户安装出错的问题;**
**※2、修复了程序无法提取图标时可以提取默认图标使用;**
![1.3.1](https://storage.deepin.org/thread/202108121509217807_截图_选择区域_20210812150849.png)
#### V1.3.02021-08-08
**※1、修改了界面布局;**
**※2、修复大多数新安装普通用户的路图标及启动菜单文件路径不存在导致安装APK报错的bugs;**
3、删除少量冗余代码调整代码顺序;
4、支持提取 apk 图标。
![1.3.0](https://storage.deepin.org/thread/202108082100582804_截图_tk_20210808210047.png)
#### V1.2.32021-08-02
1、调整部分控件名称
2、调整界面布局及界面风格
![1.2.3](https://images.gitee.com/uploads/images/2021/0802/080620_1dd289ca_7896131.png)
#### V1.2.22021-07-11
1、对程序错误的显示更加人性化
2、对 icon 的获取方式进行了升级;
3、增加了注释、删除部分冗余代码。
![1.2.2](https://images.gitee.com/uploads/images/2021/0711/145140_b04e51b7_7896131.png)
#### V1.2.12021-07-02
**※1、进行了安装方式的修改不使用 adb修复原无法安装和卸载的问题**
2、进行了部分优化
3、进行了功能缩水
4、修复 deb 打包错误。
![1.2.1](https://images.gitee.com/uploads/images/2021/0702/204040_6abb6f3f_7896131.png)
#### V1.2.02021-06-06
1、支持安装自动添加快捷方式、卸载删除快捷方式
2、支持使用包名或 APK 文件卸载程序;
3、支持查看安装的所有包名
4、进行了部分优化
![1.2.0](https://images.gitee.com/uploads/images/2021/0606/115536_0c0ddf38_7896131.png)
#### V1.1.02021-05-30
1、修改了因编写时出现的中、英文混用的情况
2、支持一键连接默认 IP
3、修复在不连接设备直接选择 apk 安装时会卡住的问题
4、修复在把“uengine 程序菜单”发送到桌面或启动器如果询问覆盖时点击取消会卡住的问题
5、修改了程序界面为白色调不和标题栏冲突矛盾
![1.1.0](https://images.gitee.com/uploads/images/2021/0530/133429_7e6bf629_7896131.png)
#### V1.0.02021-05-29
![1.0.0](https://images.gitee.com/uploads/images/2021/0529/173756_2e333c86_7896131.png)
### 源码安装教程
按下 <kbd>Ctrl</kbd>+<kbd>Alt</kbd>+<kbd>T</kbd> 打开终端,按以下内容操作:
1. 安装所需依赖
```bash
sudo apt install deepin-elf-verify python3 python3-tk python3-pip
sudo apt install aapt uengine python3-setuptools deepin-terminal curl
sudo apt install python3-pil python3-pil.imagetk python3-requests adb
sudo apt install translate-shell python3-xlib python3-requests fonts-noto-cjk python3-numpy
python3 -m pip install pip -U
python3 -m pip install --upgrade ttkthemes -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
python3 -m pip install --upgrade pyautogui -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
python3 -m pip install --upgrade keyboard -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
```
2. 下载本程序
```bash
git clone https://gitee.com/gfdgd-xi/uengine-runner.git
```
3. 运行本程序
```bash
sudo mkdir /opt/apps/uengine-runner
sudo cp uengine-runner /opt/apps/uengine-runner -rv
sudo cp getxmlimg.py /opt/apps/uengine-runner -rv
sudo cp icon.png /opt/apps/uengine-runner -rv
chmod 777 /opt/apps/uengine-runner/main.py
sudo cp /opt/apps/uengine-runner/main.py /usr/bin/uengine-runner
./main.py
```
4. 卸载本程序
```bash
sudo rm /usr/bin/uengine-runner -v
sudo rm /opt/apps/uengine-runner/ -rfv
pip3 uninstall ttkthemes
```
### 使用说明
1、需要你有使用 root 权限的能力;
2、需要安装 UEngine 才能使用UOS建议在商店安装一个安卓应用让系统自动安装 UEngine 及相关的依赖包;
3、提取 apk 图标的 apk 路径以“安装 apk”那栏为准;
4、如果报错是有关产生 .deksotp 文件有关,一般可以打开程序列表运行。如果想要连接其他手机,请使用 1.2.0 以前的版本,可以使用 adb 连接。
### 故障排除
提 issue 最好,当然有些问题自己无法解决,请大佬 push 一下
如果出现故障,尝试终端运行,如果是可以自行解决的问题,就**自行解决**,如果可以就**提 issues 并提供解决方案**,不行就**提 isscue 并提供程序和终端报错以及程序版本**
### 下载量
这里只统计蓝奏云的下载量,链接(懒得更了):
[https://kdocs.cn/l/smrvazWGuKcY](https://kdocs.cn/l/smrvazWGuKcY)
### 已知问题
<p align="center"><img src='https://bbs.deepin.org/assets/image/raccoon/[sad].gif'></p>
![Error](https://storage.deepin.org/thread/202108101105396531_截图___tk__messagebox_20210810110449.png)
部分 app 无法读取出图片,已知:
| 程序 | 下载链接 |
| :-: | :-: |
| Firefox For Android | https://www.firefox.com.cn/download/ |
| 网易云音乐 For Android | https://music.163.com/#/download |
| 抖音 | https://www.wandoujia.com/apps/7461948 |
| 360 手机浏览器 | https://mse.360.cn/ |
| E-Go | 忘了 |
| 其他待测试…… | 其他待测试…… |
**注意:提取不出图标不代表未安装成功!**
### 贡献
<p align="center"><img src='https://bbs.deepin.org/assets/image/raccoon/blush.gif'></p>
非常欢迎大家的贡献
贡献的开发者列表:
| 开发者 | 邮箱 |
| :-: | :-: |
| gfdgd xi | 3025613752@qq.com |
| actionchen | 917981399@qq.com |
| 柚子 | https://gitee.com/Limexb |
### 相关项目
| 项目名称 | 项目地址 |
| :-: | :-:|
| uengine-installer | https://gitee.com/Maicss/uengine-installer |
| uengine APK 打包器 | https://gitee.com/gfdgd-xi/uengine-apk-builder |
| Root UEngine | https://gitee.com/Limexb/root-uengine |
### 附测试生成图标无问题列表:
**至于能不能用就不测试了,这暂时不是重点**
**现在新加了评分功能,就看大家的评分了!**
| 程序 | 下载链接 |
|:-:|:-:|
| QQ 全家桶完整版、极速版、Android Pad 版) | https://im.qq.com |
| TIM | 忘了 |
| 微信 | https://weixin.qq.com |
| 百度翻译 | 忘了 |
| 百度网盘 | https://pan.baidu.com |
| 腾讯课堂 | 忘了 |
| 抖音极速版 | 忘了 |
| 豌豆荚 | 忘了 |
| 小猿口算 | 忘了 |
| Hyperbowl | 忘了 |
| bilibili | https://d.bilibili.com/download_app.html?bsource=app_bili |
| 蓝奏云 | https://up.woozooo.com/lanzouh5.apk |
| QQ 音乐完整版、Android Pad 版、TV 版、车载版) | https://y.qq.com/download/index.html |
| 360 手机卫士(完整版、极速版) | https://shouji.360.cn/v6/index.html |
| 360 清理大师(稳定版、尝鲜版) | http://shouji.360.cn/360cleandroid/ |
| 360 手机助手 | http://sj.360.cn/index.html |
| WPS Office For Android | https://www.wps.cn/ |
| 钉钉 for android | https://page.dingtalk.com/wow/dingtalk/act/download?spm=a3140.8196062.0.0.6f4c5c3dWBhYUM |
### ©2021-2022

View File

@ -1,11 +0,0 @@
[Desktop Entry]
Categories=System;
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 程序菜单
Terminal=false
Type=Application

View File

@ -0,0 +1,14 @@
import ttkthemes
import tkinter as tk
import tkinter.ttk as ttk
window = tk.Tk()
win = tk.Frame(window)
chooseFrame = ttk.Frame(win)
fiveStar = ttk.Radiobutton(chooseFrame, text="五星(正常安装、运行、卸载且无任何问题)")
fourStar = ttk.Radiobutton(chooseFrame, text="四星(正常安装、运行、卸载,但在运行时有小问题)")
threeStar = ttk.Radiobutton(chooseFrame, text="三星(正常安装、运行、卸载,但运行时体验不佳,很多功能有问题)")
twoStar = ttk.Radiobutton(chooseFrame, text="二星(正常安装、卸载,但运行难以使用甚至完全无法运行)")
oneStar = ttk.Radiobutton(chooseFrame, text="一星(无法正常安装、运行、卸载)")
window.mainloop()

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 312 KiB

BIN
build/opt/apps/uengine-runner/defult.png Executable file → Normal file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 312 KiB

After

Width:  |  Height:  |  Size: 35 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 15 KiB

View File

@ -1,9 +1,10 @@
{ {
"Package": "spark-uengine-runner",
"Url": [ "Url": [
"https://gitee.com/gfdgd-xi/uengine-runner", "https://gitee.com/gfdgd-xi/uengine-runner",
"https://github.com/gfdgd-xi/uengine-runner" "https://github.com/gfdgd-xi/uengine-runner"
], ],
"Version": "1.5.3", "Version": "1.6.0",
"System": "Linuxdeepin/UOS", "System": "Linuxdeepin/UOS",
"Tips": [ "Tips": [
"更多可见https://gitee.com/gfdgd-xi/uengine-runner/wikis", "更多可见https://gitee.com/gfdgd-xi/uengine-runner/wikis",
@ -21,6 +22,15 @@
"5、如果想要使用adb连接UEngine或其他手机请使用 1.2.0 以前的版本。如需连接UEngine请安装adb补丁" "5、如果想要使用adb连接UEngine或其他手机请使用 1.2.0 以前的版本。如需连接UEngine请安装adb补丁"
], ],
"Update": [ "Update": [
"V1.6.0",
"※1、更换了新的图标",
"※2、支持程序的评分和查看分数详情的功能如果炸了我的服务器这个就作废了",
"※3、修复了在安装奇奇怪怪的安装包如格式、标识不正确的时的快捷方式图标为空以及快捷方式文本的变化",
"※4、添加更新功能可以自行升级到最新版本如果炸了我的服务器这个就作废了",
"※5、新增程序帮助",
"6、新填彩蛋在“关于”=>“关于”显示的窗口双击“关于”开启)(如果炸了我的服务器,这个就作废了)",
"7、修复了“UEngine 打包器”前缀选项勾选设置不生效的问题",
"",
"V1.5.3", "V1.5.3",
"※1、修复了在 UOS 家庭版安装 apk 文件安装包信息为 None 的问题", "※1、修复了在 UOS 家庭版安装 apk 文件安装包信息为 None 的问题",
"※2、“添加/删除 UEngine 图标”窗口的写入按钮在目录~/.local/share/icons/hicolor/256x256/apps不存在时点击无反应参考报错", "※2、“添加/删除 UEngine 图标”窗口的写入按钮在目录~/.local/share/icons/hicolor/256x256/apps不存在时点击无反应参考报错",

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 16 KiB

View File

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 19 KiB

View File

@ -3,7 +3,7 @@
########################################################################################### ###########################################################################################
# 作者gfdgd xi # 作者gfdgd xi
# 版本1.5.3 # 版本1.5.3
# 更新时间2021年12月12日DDUC11了) # 更新时间2022年02月07日要开学了)
# 感谢anbox、deepin 和 统信 # 感谢anbox、deepin 和 统信
# 基于 Python3 的 tkinter 构建 # 基于 Python3 的 tkinter 构建
########################################################################################### ###########################################################################################
@ -67,7 +67,10 @@ def BuildApkDeb(apkPath):
RunCommandShow("mkdir -pv '{}/usr/share/uengine/icons'".format(tempPath)) RunCommandShow("mkdir -pv '{}/usr/share/uengine/icons'".format(tempPath))
RunCommandShow("echo '写入文件,因为写入过程过于复杂,不显示写入命令……'") RunCommandShow("echo '写入文件,因为写入过程过于复杂,不显示写入命令……'")
apkPackageName = GetApkPackageName(apkPath, False) apkPackageName = GetApkPackageName(apkPath, False)
apkPackageNameNew = GetApkPackageName(apkPath, True) if qianZhui.get():
apkPackageNameNew = GetApkPackageName(apkPath, True)
else:
apkPackageNameNew = GetApkPackageName(apkPath, False)
apkPackageVersion = GetApkVersion(apkPath) apkPackageVersion = GetApkVersion(apkPath)
apkChineseLabel = GetApkChineseLabel(apkPath) apkChineseLabel = GetApkChineseLabel(apkPath)
apkActivityName = GetApkActivityName(apkPath) apkActivityName = GetApkActivityName(apkPath)
@ -285,6 +288,8 @@ def GetApkVersion(apkFilePath):
return line return line
def BuildUengineDesktop(packageName, activityName, showName, iconPath, savePath): def BuildUengineDesktop(packageName, activityName, showName, iconPath, savePath):
if showName == "" or showName == None:
showName = "未知应用"
things = ''' things = '''
[Desktop Entry] [Desktop Entry]
Categories=app; Categories=app;
@ -308,17 +313,6 @@ def GetApkChineseLabel(apkFilePath):
line = line.replace("'", "") line = line.replace("'", "")
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 文件的图标": def SaveApkIcon(apkFilePath, iconSavePath)->"获取 apk 文件的图标":
try: try:
@ -335,18 +329,14 @@ def SaveApkIcon(apkFilePath, iconSavePath)->"获取 apk 文件的图标":
iconData = zip.read(xmlpath) iconData = zip.read(xmlpath)
with open(iconSavePath, 'w+b') as saveIconFile: with open(iconSavePath, 'w+b') as saveIconFile:
saveIconFile.write(iconData) saveIconFile.write(iconData)
return
print("Show defult icon")
shutil.copy(programPath + "/defult.png", iconSavePath)
except: except:
traceback.print_exc() traceback.print_exc()
print("Error, show defult icon") print("Error, show defult icon")
shutil.copy(programPath + "/defult.png", iconSavePath) shutil.copy(programPath + "/defult.png", iconSavePath)
#def SaveApkIcon(apkFilePath, iconSavePath):
# zip = zipfile.ZipFile(apkFilePath)
# iconData = zip.read(GetApkIconInApk(apkFilePath))
# with open(iconSavePath, 'w+b') as saveIconFile:
# saveIconFile.write(iconData)
def TextboxAddText1(message): def TextboxAddText1(message):
global textbox1 global textbox1
textbox1.configure(state=tk.NORMAL) textbox1.configure(state=tk.NORMAL)
@ -383,7 +373,7 @@ if not lang in langFile.keys():
information = json.loads(readtxt(programPath + "/information.json")) information = json.loads(readtxt(programPath + "/information.json"))
version = information["Version"] version = information["Version"]
title = "{} {}".format(langFile[lang]["Uengine Apk Builder"]["Title"], version) title = "{} {}".format(langFile[lang]["Uengine Apk Builder"]["Title"], version)
iconPath = "{}/icon.png".format(os.path.split(os.path.realpath(__file__))[0]) iconPath = "{}/builer.png".format(os.path.split(os.path.realpath(__file__))[0])
########################### ###########################
# 加载配置 # 加载配置

View File

@ -1,16 +0,0 @@
[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

View File

@ -2,8 +2,8 @@
# 使用系统默认的 python3 运行 # 使用系统默认的 python3 运行
########################################################################################### ###########################################################################################
# 作者gfdgd xi<3025613752@qq.com> # 作者gfdgd xi<3025613752@qq.com>
# 版本1.5.3 # 版本1.6.1
# 更新时间2021年12月12日DDUC11了) # 更新时间2022年2月6日要开学了)
# 感谢anbox、deepin 和 UOS # 感谢anbox、deepin 和 UOS
# 基于 Python3 的 tkinter 构建 # 基于 Python3 的 tkinter 构建
# 更新gfdgd xi<3025613752@qq.com>、actionchen<917981399@qq.com> # 更新gfdgd xi<3025613752@qq.com>、actionchen<917981399@qq.com>
@ -19,9 +19,16 @@ import shutil
import zipfile import zipfile
import traceback import traceback
import threading import threading
import easygui
import ttkthemes import ttkthemes
import webbrowser import webbrowser
import subprocess import subprocess
import matplotlib
import requests
import numpy
import matplotlib.figure
import matplotlib.pylab
import matplotlib.font_manager
import PIL.Image as Image import PIL.Image as Image
import PIL.ImageTk as ImageTk import PIL.ImageTk as ImageTk
import tkinter as tk import tkinter as tk
@ -31,6 +38,7 @@ import tkinter.filedialog as filedialog
import tkinter.simpledialog as simpledialog import tkinter.simpledialog as simpledialog
from getxmlimg import getsavexml from getxmlimg import getsavexml
win = tk.Tk() # 创建窗口
# 卸载程序 # 卸载程序
def UninstallProgram(package: "apk 包名")->"卸载程序": def UninstallProgram(package: "apk 包名")->"卸载程序":
@ -38,8 +46,8 @@ def UninstallProgram(package: "apk 包名")->"卸载程序":
global fineUninstallApkHistory global fineUninstallApkHistory
Return = GetCommandReturn("pkexec /usr/bin/uengine-session-launch-helper -- uengine uninstall --pkg='{}'".format(package)) Return = GetCommandReturn("pkexec /usr/bin/uengine-session-launch-helper -- uengine uninstall --pkg='{}'".format(package))
print(Return) print(Return)
if os.path.exists("{}/.local/share/applications/{}.desktop".format(get_home(), package)): if os.path.exists("{}/.local/share/applications/uengine/{}.desktop".format(get_home(), package)):
os.remove("{}/.local/share/applications/{}.desktop".format(get_home(), package)) os.remove("{}/.local/share/applications/uengine/{}.desktop".format(get_home(), package))
if os.path.exists("{}/{}.desktop".format(get_desktop_path(), package)): if os.path.exists("{}/{}.desktop".format(get_desktop_path(), package)):
os.remove("{}/{}.desktop".format(get_desktop_path(), package)) os.remove("{}/{}.desktop".format(get_desktop_path(), package))
findApkHistory.append(ComboInstallPath.get()) findApkHistory.append(ComboInstallPath.get())
@ -53,16 +61,6 @@ def UninstallProgram(package: "apk 包名")->"卸载程序":
messagebox.showerror(title="错误", message=traceback.format_exc()) messagebox.showerror(title="错误", message=traceback.format_exc())
DisabledAndEnbled(False) 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 ButtonClick8(): def ButtonClick8():
if ComboInstallPath.get() is "": if ComboInstallPath.get() is "":
@ -73,6 +71,7 @@ def ButtonClick8():
path = GetApkPackageName(ComboInstallPath.get()) path = GetApkPackageName(ComboInstallPath.get())
else: else:
path = ComboInstallPath.get() path = ComboInstallPath.get()
print(path)
threading.Thread(target=UninstallProgram, args=[path]).start() threading.Thread(target=UninstallProgram, args=[path]).start()
# 浏览窗口 # 浏览窗口
@ -100,9 +99,14 @@ def Button3Install():
# 安装应用 # 安装应用
def InstallApk(path: "apk 路径", quit: "是否静默安装" = False): def InstallApk(path: "apk 路径", quit: "是否静默安装" = False):
try: try:
if not os.path.exists("/tmp/uengine-runner"):
os.makedirs("/tmp/uengine-runner")
if not os.path.exists("{}/.local/share/applications/uengine/".format(get_home())): if not os.path.exists("{}/.local/share/applications/uengine/".format(get_home())):
print("Mkdir") print("Mkdir")
os.makedirs("{}/.local/share/applications/uengine/".format(get_home())) os.makedirs("{}/.local/share/applications/uengine/".format(get_home()))
# 读取设置
setting = json.loads(readtxt(get_home() + "/.config/uengine-runner/setting.json"))
# 安装应用
print("start install apk") print("start install apk")
global findApkHistory global findApkHistory
print("start install apk12") print("start install apk12")
@ -113,6 +117,14 @@ def InstallApk(path: "apk 路径", quit: "是否静默安装" = False):
if not os.path.exists(iconSaveDir): if not os.path.exists(iconSaveDir):
os.makedirs(iconSaveDir,exist_ok=True) os.makedirs(iconSaveDir,exist_ok=True)
SaveApkIcon(path, iconSavePath) SaveApkIcon(path, iconSavePath)
try:
if setting["SaveApk"]:
shutil.copy(path, "/tmp/uengine-runner/bak.apk")
except:
if not messagebox.askyesno(title="错误", message="无法备份安装包,是否不备份安装包继续安装?\n提示新版UEngine安装后会自动删除安装包"):
DisabledAndEnbled(False)
return
setting["SaveApk"] = False
print("start install apk2") print("start install apk2")
BuildUengineDesktop(GetApkPackageName(path), GetApkActivityName(path), GetApkChineseLabel(path), iconSavePath, BuildUengineDesktop(GetApkPackageName(path), GetApkActivityName(path), GetApkChineseLabel(path), iconSavePath,
"{}/{}.desktop".format(get_desktop_path(), GetApkPackageName(path))) "{}/{}.desktop".format(get_desktop_path(), GetApkPackageName(path)))
@ -121,6 +133,11 @@ def InstallApk(path: "apk 路径", quit: "是否静默安装" = False):
"{}/.local/share/applications/uengine/{}.desktop".format(get_home(), GetApkPackageName(path))) "{}/.local/share/applications/uengine/{}.desktop".format(get_home(), GetApkPackageName(path)))
commandReturn = GetCommandReturn("pkexec /usr/bin/uengine-session-launch-helper -- uengine install --apk='{}'".format(path)) commandReturn = GetCommandReturn("pkexec /usr/bin/uengine-session-launch-helper -- uengine install --apk='{}'".format(path))
print(commandReturn) print(commandReturn)
try:
if setting["SaveApk"]:
shutil.copy("/tmp/uengine-runner/bak.apk", path)
except:
messagebox.showerror(title="错误", message="无法还原安装包\n提示新版UEngine安装后会自动删除安装包备份的Apk在/tmp/uengine-runner/bak.apk电脑重启后就会丢失")
print("\nprint install complete") print("\nprint install complete")
if quit: if quit:
print(commandReturn) print(commandReturn)
@ -324,6 +341,8 @@ def ReinstallUengineImage():
# 生成 uengine 启动文件到桌面 # 生成 uengine 启动文件到桌面
def BuildUengineDesktop(packageName: "软件包名", activityName: "activity", showName: "显示名称", iconPath: "程序图标所在目录", savePath:".desktop 文件保存路径")->"生成 uengine 启动文件到桌面": def BuildUengineDesktop(packageName: "软件包名", activityName: "activity", showName: "显示名称", iconPath: "程序图标所在目录", savePath:".desktop 文件保存路径")->"生成 uengine 启动文件到桌面":
if showName == "" or showName == None:
showName = "未知应用"
things = '''[Desktop Entry] things = '''[Desktop Entry]
Categories=app; Categories=app;
Encoding=UTF-8 Encoding=UTF-8
@ -350,6 +369,8 @@ def GetApkChineseLabel(apkFilePath)->"获取软件的中文名称":
# 保存apk图标 # 保存apk图标
def SaveApkIcon(apkFilePath, iconSavePath)->"保存 apk 文件的图标": def SaveApkIcon(apkFilePath, iconSavePath)->"保存 apk 文件的图标":
try: try:
if os.path.exists(iconSavePath):
os.remove(iconSavePath)
info = GetApkInformation(apkFilePath) info = GetApkInformation(apkFilePath)
for line in info.split('\n'): for line in info.split('\n'):
if "application:" in line: if "application:" in line:
@ -358,11 +379,15 @@ def SaveApkIcon(apkFilePath, iconSavePath)->"保存 apk 文件的图标":
xmlsave = getsavexml() xmlsave = getsavexml()
print(xmlpath) print(xmlpath)
xmlsave.savexml(apkFilePath,xmlpath,iconSavePath) xmlsave.savexml(apkFilePath,xmlpath,iconSavePath)
return
else: else:
zip = zipfile.ZipFile(apkFilePath) zip = zipfile.ZipFile(apkFilePath)
iconData = zip.read(xmlpath) iconData = zip.read(xmlpath)
with open(iconSavePath, 'w+b') as saveIconFile: with open(iconSavePath, 'w+b') as saveIconFile:
saveIconFile.write(iconData) saveIconFile.write(iconData)
return
print("None Icon! Show defult icon")
shutil.copy(programPath + "/defult.png", iconSavePath)
except: except:
traceback.print_exc() traceback.print_exc()
print("Error, show defult icon") print("Error, show defult icon")
@ -628,14 +653,111 @@ def GetApkVersion(apkFilePath):
line = line.replace(" ", "") line = line.replace(" ", "")
return line return line
def VersionCheck(version1, version2):
return version1 == version2
def ShowHelp():
webbrowser.open_new_tab(programPath + "/Help/index.html")
class SettingWindow():
saveApkOption = tk.IntVar()
def ShowWindow():
setting = tk.Toplevel()
setting.resizable(0, 0)
setting.iconphoto(False, tk.PhotoImage(file=iconPath))
setting.title("设置 UEngine 运行器" + version)
saveApkFrame = ttk.LabelFrame(setting, text="Apk 安装设置")
try:
data = json.loads(readtxt(get_home() + "/.config/uengine-runner/setting.json"))
except:
messagebox.showerror(title="错误", message="读取设置错误!无法打开设置窗口!")
setting.destroy()
SettingWindow.saveApkOption = tk.IntVar()
SettingWindow.saveApkOption.set(int(data["SaveApk"]))
ttk.Radiobutton(saveApkFrame, text="不备份Apk包直接安装", value=0, variable=SettingWindow.saveApkOption).pack(anchor=tk.W)
ttk.Radiobutton(saveApkFrame, text="备份Apk包然后在安装后自动拷贝原先目录", value=1, variable=SettingWindow.saveApkOption).pack(anchor=tk.W)
controlFrame = ttk.Frame(setting)
ttk.Button(controlFrame, text="取消", command=setting.destroy).grid(row=0, column=0)
ttk.Button(controlFrame, text="保存", command=SettingWindow.SaveSetting).grid(row=0, column=1)
saveApkFrame.pack()
controlFrame.pack(anchor=tk.E)
def SaveSetting():
try:
write_txt(get_home() + "/.config/uengine-runner/setting.json", json.dumps({"SaveApk": bool(SettingWindow.saveApkOption.get())}))
except:
traceback.print_exc()
messagebox.showerror(title="错误", message="保存设置错误!")
return
messagebox.showinfo(title="提示", message="设置保存完毕!")
class UpdateWindow():
data = {}
def ShowWindow():
update = tk.Toplevel()
update.title("检查更新")
update.resizable(0, 0)
update.iconphoto(False, tk.PhotoImage(file=iconPath))
versionLabel = ttk.Label(update, text="当前版本:{}\n最新版本未知\n更新内容".format(version))
updateText = tk.Text(update)
controlFrame = ttk.Frame(update)
ok = ttk.Button(controlFrame, text="更新更新过程中会关闭所有Python应用包括这个应用", command=UpdateWindow.Update)
cancel = ttk.Button(controlFrame, text="取消", command=update.destroy)
try:
UpdateWindow.data = json.loads(requests.get("http://120.25.153.144/uengine-runner/update.json").text)
versionLabel = ttk.Label(update, text="当前版本:{}\n最新版本{}\n更新内容".format(version, UpdateWindow.data["Version"]))
if UpdateWindow.data["Version"] == version:
updateText.insert("0.0", "此为最新版本,无需更新")
ok.configure(state=tk.DISABLED)
else:
updateText.insert("0.0", UpdateWindow.data["New"].replace("\\n", "\n"))
except:
traceback.print_exc()
messagebox.showerror(title="错误", message="无法连接服务器!")
updateText.configure(state=tk.DISABLED)
versionLabel.pack(anchor=tk.W)
updateText.pack()
controlFrame.pack(anchor=tk.E)
cancel.grid(row=0, column=0)
ok.grid(row=0, column=1)
update.mainloop()
def Update():
if not os.path.exists("/tmp/uengine-runner/update"):
os.makedirs("/tmp/uengine-runner/update")
try:
write_txt("/tmp/uengine-runner/update.sh", """#!/bin/bash
echo 删除多余的安装包
rm -rfv /tmp/uengine-runner/update/*
echo 关闭“UEngine 运行器”以及其它“Python 应用”
killall python3
echo 下载安装包
wget -P /tmp/uengine-runner/update {}
echo 安装安装包
dpkg -i /tmp/uengine-runner/update/*.deb
echo 修复依赖关系
apt install -f -y
notify-send -i uengine "更新完毕!"
zenity --info --text=\"更新完毕!\" --ellipsize
""".format(UpdateWindow.data["Url"][int(information["Package"] == "com.gitee.uengine.runner.spark")], iconPath))
except:
traceback.print_exc()
easygui.textbox(title="错误", msg="更新出现错误,无法继续更新!", text=traceback.format_exc())
os.system("deepin-terminal -e pkexec bash /tmp/uengine-runner/update.sh")
image = None
class ApkInformation(): class ApkInformation():
def ShowWindows(): def ShowWindows():
global fullInformation global fullInformation
global path global path
global tab1 global tab1
path = ComboInstallPath.get() path = ComboInstallPath.get()
package = GetApkPackageName(path)
if package == None or package == "":
messagebox.showerror(title="错误", message="该应用安装包异常,无法查询相关数据!")
return
message = tk.Toplevel() message = tk.Toplevel()
message.title("“{}“的Apk信息".format(GetApkChineseLabel(path)))
message.iconphoto(False, tk.PhotoImage(file=iconPath))
tab = ttk.Notebook(message) tab = ttk.Notebook(message)
@ -663,16 +785,64 @@ class ApkInformation():
# 获取图标 # 获取图标
SaveApkIcon(path, "/tmp/uengine-runner-android-app-icon.png") SaveApkIcon(path, "/tmp/uengine-runner-android-app-icon.png")
# 读取图标 # 读取图标
global image
image = Image.open("/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: if image.size[0] + image.size[1] <= 512:
ttk.Label(tab1, image=ImageTk.PhotoImage(image)).pack() ttk.Label(tab1, image=ImageTk.PhotoImage(Image.open("/tmp/uengine-runner-android-app-icon.png"))).pack()
else: else:
ttk.Label(tab1, image=ImageTk.PhotoImage(image.resize((256, 256), Image.ANTIALIAS))).pack() ttk.Label(tab1, image=ImageTk.PhotoImage(Image.open("/tmp/uengine-runner-android-app-icon.png").resize((256, 256), Image.ANTIALIAS))).pack()
image.close()
info = '''包名:{} info = '''包名:{}
中文名:{} 中文名:{}
Activity{} Activity{}
版本:{}'''.format(GetApkPackageName(path), GetApkChineseLabel(path), GetApkActivityName(path), GetApkVersion(path)) 版本:{}'''.format(GetApkPackageName(path), GetApkChineseLabel(path), GetApkActivityName(path), GetApkVersion(path))
ttk.Label(tab1, text=info).pack() ttk.Label(tab1, text=info).pack()
ttk.Button(tab1, text="查看程序评分情况", command=ApkInformation.ShowMap).pack()
ttk.Button(tab1, text="上传程序评分情况", command=ApkInformation.UpdateMark).pack()
def UpdateMark():
#message = tk.Toplevel()
#message.iconphoto(False, tk.PhotoImage(file=iconPath))
choose = easygui.indexbox(title="选择评分", choices=["含有不良信息", "0分", "1分", "2分", "3分", "4分", "5分", "取消"], msg="""选择应用“{}”的使用评分。建议参考如下规范进行评分:
含有不良信息(-1分含有违法违规信息如果有就不要选择其它选项了
0星完全无法使用连安装都有问题
1星完全无法使用但是能正常安装
2星可以打开但只能使用一点点功能
3星勉强能使用运行也不大流畅
4星大部分功能正常运行流畅可能会有点小卡
5星完全正常且非常流畅没有任何功能和性能问题就和直接在手机上用一样
""".format(GetApkChineseLabel(path)))
print(choose)
if choose == None or choose == 7:
return
try:
messagebox.showinfo(title="提示", message=requests.post("http://120.25.153.144/uengine-runner/app/check/add.php", {"Package": GetApkPackageName(path), "Type": choose}).text)
except:
messagebox.showerror(title="错误", message="无法连接服务器!无法进行评分!")
def ShowMap():
package = GetApkPackageName(path)
if package == None or package == "":
messagebox.showerror(title="错误", message="该应用安装包异常,无法查询相关数据!")
return
try:
data = json.loads(requests.get("http://120.25.153.144/uengine-runner/app/check/" + package +"/data.json").text)
print(data)
except:
messagebox.showinfo(title="错误", message="此程序暂时没有评分,欢迎您贡献第一个评分!")
return
index = numpy.arange(len(data))
print(index)
chinese = GetApkChineseLabel(path)
fig = matplotlib.pylab.figure()
fig.canvas.set_window_title("“" + chinese + "”的用户评分(数据只供参考)")
fonts = matplotlib.font_manager.FontProperties(fname='/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc') # 用于支持中文显示需要依赖fonts-noto-cjk
matplotlib.pylab.barh(index, data)
matplotlib.pylab.yticks(index, ["不良信息", "0分", "1分", "2分", "3分", "4分", "5分"], fontproperties=fonts)
matplotlib.pylab.xlabel("用户评分数", fontproperties=fonts)
matplotlib.pylab.ylabel("等级", fontproperties=fonts)
matplotlib.pylab.title("“" + chinese + "”的用户评分(数据只供参考)", fontproperties=fonts)
matplotlib.pylab.show()
class AdbChangeUengineDisplaySize(): class AdbChangeUengineDisplaySize():
@ -681,6 +851,7 @@ class AdbChangeUengineDisplaySize():
global displayY global displayY
global displaySize global displaySize
message = tk.Toplevel() message = tk.Toplevel()
message.iconphoto(False, tk.PhotoImage(file=iconPath))
messageFrame = ttk.Frame(message) messageFrame = ttk.Frame(message)
displaySize = tk.StringVar() displaySize = tk.StringVar()
@ -819,6 +990,7 @@ class AddNewUengineDesktopLink():
global activityName global activityName
global packageName global packageName
message = tk.Toplevel() message = tk.Toplevel()
message.iconphoto(False, tk.PhotoImage(file=iconPath))
tipsLabel = ttk.Label(message, text=AddNewUengineDesktopLink.addTips) tipsLabel = ttk.Label(message, text=AddNewUengineDesktopLink.addTips)
packageName = ttk.Combobox(message, width=30) packageName = ttk.Combobox(message, width=30)
@ -974,7 +1146,7 @@ updateThingsString = "\n".join(information["Update"])
title = "{} {}".format(langFile[lang]["Main"]["MainWindow"]["Title"], version) title = "{} {}".format(langFile[lang]["Main"]["MainWindow"]["Title"], version)
updateTime = information["Time"] updateTime = information["Time"]
updateThings = "{} 更新内容:\n{}\n更新时间{}".format(version, updateThingsString, updateTime, time.strftime("%Y")) updateThings = "{} 更新内容:\n{}\n更新时间{}".format(version, updateThingsString, updateTime, time.strftime("%Y"))
iconPath = "{}/icon.png".format(os.path.split(os.path.realpath(__file__))[0]) iconPath = "{}/runner.png".format(os.path.split(os.path.realpath(__file__))[0])
desktop = programPath + "/UengineAndroidProgramList.desktop" desktop = programPath + "/UengineAndroidProgramList.desktop"
desktopName = "UengineAndroidProgramList.desktop" desktopName = "UengineAndroidProgramList.desktop"
contribute = "\n".join(information["Contribute"]) contribute = "\n".join(information["Contribute"])
@ -1006,6 +1178,24 @@ if not os.path.exists(get_home() + "/.config/uengine-runner/SaveApkIcon.json"):
write_txt(get_home() + "/.config/uengine-runner/SaveApkIcon.json", json.dumps({"path": "~"})) # 写入(创建)一个配置文件 write_txt(get_home() + "/.config/uengine-runner/SaveApkIcon.json", json.dumps({"path": "~"})) # 写入(创建)一个配置文件
if not os.path.exists(get_home() + "/.config/uengine-runner/SaveApk.json"): # 如果没有配置文件 if not os.path.exists(get_home() + "/.config/uengine-runner/SaveApk.json"): # 如果没有配置文件
write_txt(get_home() + "/.config/uengine-runner/SaveApk.json", json.dumps({"path": "~"})) # 写入(创建)一个配置文件 write_txt(get_home() + "/.config/uengine-runner/SaveApk.json", json.dumps({"path": "~"})) # 写入(创建)一个配置文件
if not os.path.exists(get_home() + "/.config/uengine-runner/setting.json"):
choose = None
choose = easygui.indexbox(msg="""在使用本程序前请选择安装Apk包的设置以便更好的运行下列选项的详细介绍
不备份Apk包直接安装适用于Deepin旧版UEngine安装较快不受/tmp大小所限但Deepin23和UOS新版UEngine不推荐此选项因为安装后会自动删除Apk安装包
备份Apk包然后在安装后自动拷贝原先目录适用于Deepin23和UOS新版UEngine安装较慢受/tmp大小所限安装后不会丢失ApkDeepin旧版UEngine不推荐使用该选项
后期可以在程序主界面的菜单栏的“程序”=>“设置”里进行修改,
如果不知道正在使用的系统是什么版本可以打开系统设置查看。
""", title="设置", choices=["不备份Apk包直接安装", "备份Apk包然后在安装后自动拷贝原先目录"])
if choose == None:
root = tk.Tk()
root.withdraw()
messagebox.showinfo(title="提示", message="必须选择一个选项!否则无法进入程序!")
sys.exit()
write_txt(get_home() + "/.config/uengine-runner/setting.json", json.dumps({"SaveApk": int(choose)}))
########################### ###########################
# 设置变量 # 设置变量
@ -1079,12 +1269,32 @@ def showhelp():
def ChgTips(): def ChgTips():
HelpStr.set(tips) HelpStr.set(tips)
LabText.config(wraplength=350) LabText.config(wraplength=350)
def Egg(event):
try:
lists = json.loads(requests.get("http://120.25.153.144/uengine-runner/VersionList.json").text)
data = []
for i in lists:
data.append(int(requests.get("http://120.25.153.144/uengine-runner/{}/data.txt".format(i)).text))
except:
messagebox.showerror(title="错误", message="服务器出错!数据获取失败!")
return
fig = matplotlib.pylab.figure()
fig.canvas.set_window_title("“UEngine 运行器”安装数(数据只供参考)")
matplotlib.pylab.plot(lists, data)
index = numpy.arange(len(lists))
fonts = matplotlib.font_manager.FontProperties(fname='/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc') # 用于支持中文显示需要依赖fonts-noto-cjk
matplotlib.pylab.xlabel("版本号", fontproperties=fonts)
matplotlib.pylab.ylabel("安装数", fontproperties=fonts)
matplotlib.pylab.title("“UEngine 运行器”安装数(数据只供参考)", fontproperties=fonts)
matplotlib.pylab.show()
BtnReadme = ttk.Button(FrmMenu, text="使用说明",width=14,command=ChgTips) BtnReadme = ttk.Button(FrmMenu, text="使用说明",width=14,command=ChgTips)
BtnLog = ttk.Button(FrmMenu, text="更新内容",width=14,command=ChgLog) BtnLog = ttk.Button(FrmMenu, text="更新内容",width=14,command=ChgLog)
BtnZujian = ttk.Button(FrmMenu, text="程序依赖的组件",width=14,command=ChgDep) BtnZujian = ttk.Button(FrmMenu, text="程序依赖的组件",width=14,command=ChgDep)
BtnGongxian = ttk.Button(FrmMenu, text="有贡献的开发者",width=14,command=ChgCon) BtnGongxian = ttk.Button(FrmMenu, text="有贡献的开发者",width=14,command=ChgCon)
BtnAbout = ttk.Button(FrmMenu, text="关于",width=14,command=ChgAbout) BtnAbout = ttk.Button(FrmMenu, text="关于",width=14,command=ChgAbout)
BtnAbout.bind("<Double-Button-1>", Egg)
#layout #layout
@ -1109,7 +1319,7 @@ def showhelp():
########################### ###########################
# 窗口创建 # 窗口创建
########################### ###########################
win = tk.Tk() # 创建窗口
# 设置窗口 # 设置窗口
style = ttkthemes.ThemedStyle(win) style = ttkthemes.ThemedStyle(win)
@ -1134,13 +1344,10 @@ win.geometry(""+"+{:.0f}+{:.0f}".format(x, y))
FrmInstall = ttk.Frame(window) FrmInstall = ttk.Frame(window)
#FrmUninstall = ttk.Frame(window) #FrmUninstall = ttk.Frame(window)
LabApkPath = ttk.Label(window, text=langFile[lang]["Main"]["MainWindow"]["LabApkPath"]) LabApkPath = ttk.Label(window, text=langFile[lang]["Main"]["MainWindow"]["LabApkPath"])
#LabUninstallPath = ttk.Label(window, text=langFile[lang]["Main"]["MainWindow"]["LabUninstallPath"])
ComboInstallPath = ttk.Combobox(window, width=50) ComboInstallPath = ttk.Combobox(window, width=50)
#ComboUninstallPath = ttk.Combobox(window, width=50)
BtnFindApk = ttk.Button(FrmInstall, text=langFile[lang]["Main"]["MainWindow"]["BtnFindApk"], command=FindApk) BtnFindApk = ttk.Button(FrmInstall, text=langFile[lang]["Main"]["MainWindow"]["BtnFindApk"], command=FindApk)
BtnInstall = ttk.Button(FrmInstall, text=langFile[lang]["Main"]["MainWindow"]["BtnInstall"], command=Button3Install) BtnInstall = ttk.Button(FrmInstall, text=langFile[lang]["Main"]["MainWindow"]["BtnInstall"], command=Button3Install)
BtnShowUengineApp = ttk.Button(window, text=langFile[lang]["Main"]["MainWindow"]["BtnShowUengineApp"], command=Button5Click) 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(FrmInstall, text=langFile[lang]["Main"]["MainWindow"]["BtnUninstall"], command=ButtonClick8) BtnUninstall = ttk.Button(FrmInstall, text=langFile[lang]["Main"]["MainWindow"]["BtnUninstall"], command=ButtonClick8)
Btngeticon = ttk.Button(FrmInstall, text=langFile[lang]["Main"]["MainWindow"]["Btngeticon"], command=SaveIconToOtherPath) Btngeticon = ttk.Button(FrmInstall, text=langFile[lang]["Main"]["MainWindow"]["Btngeticon"], command=SaveIconToOtherPath)
BtnSaveApk = ttk.Button(FrmInstall, text=langFile[lang]["Main"]["MainWindow"]["BtnSaveApk"], command=SaveInstallUengineApp) BtnSaveApk = ttk.Button(FrmInstall, text=langFile[lang]["Main"]["MainWindow"]["BtnSaveApk"], command=SaveInstallUengineApp)
@ -1168,6 +1375,7 @@ menu.add_cascade(label=langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Name"],
menu.add_cascade(label=langFile[lang]["Main"]["MainWindow"]["Menu"][3]["Name"], menu=help) menu.add_cascade(label=langFile[lang]["Main"]["MainWindow"]["Menu"][3]["Name"], menu=help)
programmenu.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][0]["Menu"][0], command=CleanProgramHistory) programmenu.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][0]["Menu"][0], command=CleanProgramHistory)
programmenu.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][0]["Menu"][2], command=SettingWindow.ShowWindow)
programmenu.add_separator() # 设置分界线 programmenu.add_separator() # 设置分界线
programmenu.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][0]["Menu"][1], command=window.quit) # 设置“退出程序” programmenu.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][0]["Menu"][1], command=window.quit) # 设置“退出程序”
@ -1188,7 +1396,6 @@ adbServer.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][1]["Men
adbServer.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][1]["Menu"][1]["Menu"][1], command=AdbStopServer) adbServer.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][1]["Menu"][1]["Menu"][1], command=AdbStopServer)
adbServer.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][1]["Menu"][1]["Menu"][2], command=AdbKillAdbProgress) adbServer.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][1]["Menu"][1]["Menu"][2], command=AdbKillAdbProgress)
#uengine.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][0], command=UengineSettingShow)
uengine.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][1], command=OpenUengineDebBuilder) uengine.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][1], command=OpenUengineDebBuilder)
uengine.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][7], command=KeyboardToMouse) uengine.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][7], command=KeyboardToMouse)
uengine.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][8], command=UengineCheckCpu) uengine.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][8], command=UengineCheckCpu)
@ -1202,7 +1409,9 @@ uengine.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"
uengine.add_cascade(label=langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][11]["Name"], menu=uengineRoot) uengine.add_cascade(label=langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][11]["Name"], menu=uengineRoot)
help.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][3]["Menu"][0], command=OpenProgramURL) # 设置“程序官网”项 help.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][3]["Menu"][0], command=OpenProgramURL) # 设置“程序官网”项
help.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][3]["Menu"][2], command=UengineRunnerBugUpload) # 设置“程序官网”项 help.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][3]["Menu"][2], command=UengineRunnerBugUpload) # 设置“传bug”项
help.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][3]["Menu"][4], command=ShowHelp) # 设置“更多帮助”项
help.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][3]["Menu"][3], command=UpdateWindow.ShowWindow)
help.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][3]["Menu"][1], command=showhelp) # 设置“关于这个程序”项 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=StartUengine)
@ -1249,7 +1458,6 @@ uengineUseAdb.configure(activebackground="dodgerblue")
uengineData.configure(activebackground="dodgerblue") uengineData.configure(activebackground="dodgerblue")
# 设置控件 # 设置控件
#ComboUninstallPath['value'] = fineUninstallApkHistory
ComboInstallPath['value'] = findApkHistory ComboInstallPath['value'] = findApkHistory
try: try:
if sys.argv[1] == "-i": if sys.argv[1] == "-i":

View File

@ -49,7 +49,7 @@ updateThingsString = "\n".join(information["Update"])
title = "UEngine 运行器 {}".format(version) title = "UEngine 运行器 {}".format(version)
updateTime = information["Time"] updateTime = information["Time"]
updateThings = "{} 更新内容:\n{}\n更新时间{}".format(version, updateThingsString, updateTime, time.strftime("%Y")) updateThings = "{} 更新内容:\n{}\n更新时间{}".format(version, updateThingsString, updateTime, time.strftime("%Y"))
iconPath = "{}/icon.png".format(os.path.split(os.path.realpath(__file__))[0]) iconPath = "{}/runner.png".format(os.path.split(os.path.realpath(__file__))[0])
desktop = "/opt/apps/uengine-runner/UengineAndroidProgramList.desktop" desktop = "/opt/apps/uengine-runner/UengineAndroidProgramList.desktop"
desktopName = "UengineAndroidProgramList.desktop" desktopName = "UengineAndroidProgramList.desktop"
contribute = "\n".join(information["Contribute"]) contribute = "\n".join(information["Contribute"])

View File

@ -49,7 +49,7 @@ def OpenGithubIssues():
########################### ###########################
# 程序信息 # 程序信息
########################### ###########################
iconPath = "{}/icon.png".format(os.path.split(os.path.realpath(__file__))[0]) iconPath = "{}/runner.png".format(os.path.split(os.path.realpath(__file__))[0])
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
information = json.loads(readtxt(programPath + "/information.json")) information = json.loads(readtxt(programPath + "/information.json"))
version = information["Version"] version = information["Version"]

View File

@ -4,7 +4,6 @@
# 更新时间2021年08月30日 # 更新时间2021年08月30日
######################################### #########################################
import os import os
import shutil
import sys import sys
import traceback import traceback
import ttkthemes import ttkthemes

View File

@ -4,7 +4,7 @@ Comment=UEngine App List
Comment[zh]=UEngine 程序菜单 Comment[zh]=UEngine 程序菜单
Encoding=UTF-8 Encoding=UTF-8
Exec=/usr/bin/uengine launch --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 Icon=/opt/apps/uengine-runner/menu.svg
MimeType= MimeType=
Name=UEngine App List Name=UEngine App List
Name[zh]=UEngine 程序菜单 Name[zh]=UEngine 程序菜单

View File

@ -4,7 +4,7 @@ Encoding=UTF-8
Categories=System; Categories=System;
Terminal=false Terminal=false
Exec=/usr/bin/uengine-apk-builder %F Exec=/usr/bin/uengine-apk-builder %F
Icon=/opt/apps/uengine-runner/icon.png Icon=/opt/apps/uengine-runner/builer.svg
Name=Build Apk To Deb(UEngine Runner) Name=Build Apk To Deb(UEngine Runner)
Comment=Build Apk To Deb(UEngine Runner) Comment=Build Apk To Deb(UEngine Runner)
Comment[zh]=打包 debUEngine 运行器) Comment[zh]=打包 debUEngine 运行器)

View File

@ -4,7 +4,7 @@ Encoding=UTF-8
Categories=System; Categories=System;
Terminal=false Terminal=false
Exec=/usr/bin/uengine-runner -i %F Exec=/usr/bin/uengine-runner -i %F
Icon=/opt/apps/uengine-runner/icon.png Icon=/opt/apps/uengine-runner/runner.svg
Name=Install Or Uninstall APK(UEngine runner) Name=Install Or Uninstall APK(UEngine runner)
Comment=Install Or Uninstall APK(UEngine runner) Comment=Install Or Uninstall APK(UEngine runner)
Comment[zh]=安装/卸载 APKUEngine 运行器) Comment[zh]=安装/卸载 APKUEngine 运行器)

View File

@ -4,7 +4,7 @@ Encoding=UTF-8
Categories=System; Categories=System;
Terminal=false Terminal=false
Exec=/usr/bin/uengine-apk-builder %F Exec=/usr/bin/uengine-apk-builder %F
Icon=/opt/apps/uengine-runner/icon.png Icon=/opt/apps/uengine-runner/builer.svg
Name=uengine Apk Builder Name=uengine Apk Builder
Comment=UEngine Apk Builder Comment=UEngine Apk Builder
Comment[zh]=UEngine 应用打包器 Comment[zh]=UEngine 应用打包器

View File

@ -4,7 +4,7 @@ Encoding=UTF-8
Categories=System; Categories=System;
Terminal=false Terminal=false
Exec=/usr/bin/uengine-runner Exec=/usr/bin/uengine-runner
Icon=/opt/apps/uengine-runner/icon.png Icon=/opt/apps/uengine-runner/runner.svg
Name=UEngine Runner Name=UEngine Runner
Comment=UEngine Runner Comment=UEngine Runner
Comment[zh]=UEngine 运行器 Comment[zh]=UEngine 运行器

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 19 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

152
information-new.json Executable file
View File

@ -0,0 +1,152 @@
{
"Package": "com.gitee.uengine.runner.spark",
"Url": [
"https://gitee.com/gfdgd-xi/uengine-runner",
"https://github.com/gfdgd-xi/uengine-runner"
],
"Version": "1.6.0",
"System": "Linuxdeepin/UOS",
"Tips": [
"更多可见https://gitee.com/gfdgd-xi/uengine-runner/wikis",
"安装APK点浏览按钮选中需要安装的APK然后点安装按钮",
"卸载APK在卸载APK下面的输入框内输入需要卸载的APK包名点卸载按钮如果无法获取包名可以通过浏览APK文件程序自动获取包名进行卸载。",
"保存APK图标在安装APK下面的输入框浏览或输入APK的路径然后点击“保存图标”按钮选择保存位置即可",
"重置删除UEngine数据点击菜单栏的“UEngine”的“清空UEngine数据”输入密码重启即可",
" 注意如果任何安卓一遍打不开多打开几遍应该就可以重新加载UEngine配置了",
"打开UEngine应用列表打开系统已安装的应用列表安卓界面",
"提示:",
"※1、近期升级的 UEngine 安装时会自动把要安装的 apk 删除,如果这个 apk 文件非常重要请拷贝一个备份版并安装这个备份版",
"2、需要你有使用 root 权限的能力;",
"3、需要安装 UEngine 才能使用;",
"4、提取 apk 图标的 apk 路径以“安装 apk”那栏为准;",
"5、如果想要使用adb连接UEngine或其他手机请使用 1.2.0 以前的版本。如需连接UEngine请安装adb补丁"
],
"Update": [
"V1.6.0",
"※1、更换了新的图标",
"※2、支持程序的评分和查看分数详情的功能如果炸了我的服务器这个就作废了",
"※3、修复了在安装奇奇怪怪的安装包如格式、标识不正确的时的快捷方式图标为空以及快捷方式文本的变化",
"※4、添加更新功能可以自行升级到最新版本如果炸了我的服务器这个就作废了",
"※5、新增程序帮助",
"6、新填彩蛋在“关于”=>“关于”显示的窗口双击“关于”开启)(如果炸了我的服务器,这个就作废了)",
"7、修复了“UEngine 打包器”前缀选项勾选设置不生效的问题",
"",
"V1.5.3",
"※1、修复了在 UOS 家庭版安装 apk 文件安装包信息为 None 的问题",
"※2、“添加/删除 UEngine 图标”窗口的写入按钮在目录~/.local/share/icons/hicolor/256x256/apps不存在时点击无反应参考报错",
"※3、修复了“UEngine APK应用打包器”打包的deb包的.desktop文件的Icon和Exec字段有误的问题以及使用“使用前缀uengine-dc”前缀的问题",
"4、“UEngine APK应用打包器”支持打包完后自动删除临时目录",
"5、“UEngine APK应用打包器”以及“添加/删除UEngine图标”支持在运行出现错误时显示报错",
"",
"V1.5.2",
"※1、支持安装和构建带Root的UEngine的镜像",
"2、更新了反馈链接",
"",
"V1.5.1",
"※1、精简用户界面合并安装和卸载输入框和浏览按钮等",
"※2、修复安装以其的程序图标无法点击进入的问题deepin 社区版不存在此问题)",
"※3、支持在程序本体反馈问题",
"4、修复了菜单栏的部分显示问题",
"5、支持显示 apk 的部分信息",
"6、支持删除 UEngine 程序运行检查以及重新安装 UEngine 的功能",
"7、自带有跳过家庭版必须有指定包名才能运行程序限制的脚本",
"8、补回依赖包“adb”",
"",
"V1.5.0",
"※1、部分窗口支持英语",
"2、修复在英语状态下启动器图标名称异常的问题",
"",
"V1.4.3",
"※1、支持打包器打包的包名带前缀“uengine-dc”",
"※2、修复了两种情况可能导致程序卡住/出错无法继续运行的情况(配置文件夹不齐全和获取版本信息卡住两种情况)",
"※3、修改了 UEngine 打包器打包的应用包名可能有大写的情况",
"4、支持一键使用 Scrcpy 连接 UEngine①先安装 adb 破解补丁②请确保是使用snap安装的 Scrcpy【目前只支持 snap 安装的 Scrcpy 进行连接】)",
"5、支持右键打包 apk",
"",
"V1.4.2",
"※1、添加adb破解补丁用于可以让adb连接UEngine并支持adb的部分操作;",
"2、菜单栏的项目添加以及外观优化;",
"3、修复键盘映射无法添加新映射的问题并修改键盘映射启动方式;",
"4、把 uengine 改为 UEngine;",
"5、修改 pkexec 获取密码时显示的图标和文本;",
"6、添加了 UEngine 系统设置的快捷方式;",
"",
"V1.4.1",
"※1、初步支持键盘映射",
"2、修复新版包在发送uengine列表快捷方式时会提示找不到文件",
"",
"V1.4.0",
"※1、添加新版打包方式deepin打包方式;",
"※2、支持测试运行/创建/删除uengine图标;",
"※3、支持提取安装的apk;",
"※4、支持打包deb包;",
"5、修改菜单栏布局;",
"6、支持打开uengine数据目录和用户数据目录;",
"7、程序信息保存到json,非直接写入程序本体;",
"8、更多命令操作;",
"",
"V.1.3.2",
"※1、支持uengine数据重置;",
"※2、支持修改uengine网络桥接的启动状态;",
"※3、支持右键安装/卸载;",
"※4、支持启用或禁用uengine;",
"※5、修复打包问题不会出现“dpkg:警告:卸载spark-uengine-runner时目录/opt/apps/uengine-runner非空因而不会删除该目录”的错误;",
"",
"V1.3.1",
"※1、修复打包问题防止部分用户安装出错的问题;",
"※2、修复了程序无法提取图标时可以提取默认图标使用;",
"",
"V1.3.0",
"※1、修改了界面布局;",
"※2、修复大多数新安装普通用户的路图标及启动菜单文件路径不存在导致安装APK报错的bugs;",
"3、删除少量冗余代码调整代码顺序;",
"4、支持提取apk图标。",
"",
"V1.2.3",
"1、调整部分控件名称",
"2、调整界面布局及界面风格",
"",
"V1.2.2",
"1、对程序错误的显示更加人性化",
"2、对 icon 的获取方式进行了升级;",
"3、增加了注释、删除部分冗余代码。",
"",
"V1.2.1",
"※1、进行了安装方式的修改不使用 adb修复原无法安装和卸载的问题",
"2、进行了部分优化",
"3、进行了功能缩水",
"4、修复 deb 打包错误。",
"",
"V1.2.0",
"1、支持安装自动添加快捷方式、卸载删除快捷方式",
"2、支持使用包名或 APK 文件卸载程序;",
"3、支持查看安装的所有包名",
"4、进行了部分优化",
"",
"V1.1.0",
"暂无数据",
"",
"V1.0.0",
"暂无数据"
],
"Use": [
"1、UEngine相关软件包基于anbox开发",
"2、Python3",
"3、tkintertkinter.tk、ttkthemes、tkinter.messagebox、tkinter.simpledialog、tkinter.filedialog 和 tkinter.ttk",
"4、aapt",
"5、dpkg",
"6、tree",
"7、mkdir",
"8、echo",
"9、chmod",
"10、adb",
"11、deepin 终端",
"……"
],
"Time": "2021年08月30日",
"Contribute": [
"gfdgd xi<3025613752@qq.com>",
"actionchen<917981399@qq.com>",
"柚子<https://gitee.com/Limexb>"
]
}

View File

@ -23,12 +23,14 @@
], ],
"Update": [ "Update": [
"V1.6.0", "V1.6.0",
"※1、更换了新的图标(暂未全部更新完成!)", "※1、更换了新的图标",
"※2、支持程序的评分和查看分数详情的功能如果炸了我的服务器这个就作废了", "※2、支持程序的评分和查看分数详情的功能如果炸了我的服务器这个就作废了",
"※3、修复了在安装奇奇怪怪的安装包如格式、标识不正确的时的快捷方式图标为空以及快捷方式文本的变化", "※3、修复了在安装奇奇怪怪的安装包如格式、标识不正确的时的快捷方式图标为空以及快捷方式文本的变化",
"※4、添加更新功能可以自行升级到最新版本如果炸了我的服务器这个就作废了", "※4、添加更新功能可以自行升级到最新版本如果炸了我的服务器这个就作废了",
"※5、新增程序帮助", "※5、新增程序帮助",
"6、新填彩蛋在“关于”=>“关于”显示的窗口双击“关于”开启)(如果炸了我的服务器,这个就作废了)", "6、新填彩蛋在“关于”=>“关于”显示的窗口双击“关于”开启)(如果炸了我的服务器,这个就作废了)",
"7、修复了“UEngine 打包器”前缀选项勾选设置不生效的问题",
"",
"V1.5.3", "V1.5.3",
"※1、修复了在 UOS 家庭版安装 apk 文件安装包信息为 None 的问题", "※1、修复了在 UOS 家庭版安装 apk 文件安装包信息为 None 的问题",
"※2、“添加/删除 UEngine 图标”窗口的写入按钮在目录~/.local/share/icons/hicolor/256x256/apps不存在时点击无反应参考报错", "※2、“添加/删除 UEngine 图标”窗口的写入按钮在目录~/.local/share/icons/hicolor/256x256/apps不存在时点击无反应参考报错",

View File

@ -3,7 +3,7 @@ Source: com.gitee.uengine.runner.spark
Version: 1.6.0 Version: 1.6.0
Architecture: all Architecture: all
Maintainer: gfdgd xi <3025613752@qq.com>, actionchen<917981399@qq.com> Maintainer: gfdgd xi <3025613752@qq.com>, actionchen<917981399@qq.com>
Depends: deepin-elf-verify (>= 0.0.16.7-1), python3, python3-tk, python3-pip, aapt, uengine, python3-setuptools, deepin-terminal, curl, python3-pil, python3-pil.imagetk, python3-requests, adb, translate-shell, python3-xlib, python3-requests, fonts-noto-cjk, python3-numpy Depends: deepin-elf-verify (>= 0.0.16.7-1), python3, python3-tk, python3-pip, aapt, uengine, python3-setuptools, deepin-terminal, curl, python3-pil, python3-pil.imagetk, python3-requests, adb, translate-shell, python3-xlib, fonts-noto-cjk, python3-numpy
Section: utils Section: utils
Priority: optional Priority: optional
Conflicts: spark-uengine-runner, spark-uengine-apk-builder Conflicts: spark-uengine-runner, spark-uengine-apk-builder

View File

@ -2,7 +2,6 @@
# 使用 pip 安装所需库 # 使用 pip 安装所需库
python3 -m pip install --upgrade pip -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com python3 -m pip install --upgrade pip -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
python3 -m pip install --upgrade ttkthemes -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com python3 -m pip install --upgrade ttkthemes -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
#python3 -m pip install --upgrade requests -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
python3 -m pip install --upgrade pyautogui -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com python3 -m pip install --upgrade pyautogui -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
python3 -m pip install --upgrade keyboard -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com python3 -m pip install --upgrade keyboard -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
# 建立软链接 # 建立软链接

View File

@ -3,7 +3,7 @@ Categories=System;
Comment=UEngine 程序菜单 Comment=UEngine 程序菜单
Encoding=UTF-8 Encoding=UTF-8
Exec=/usr/bin/uengine launch --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/com.gitee.uengine.runner.spark/files/icon.png Icon=/opt/apps/com.gitee.uengine.runner.spark/files/menu.svg
MimeType= MimeType=
Name=UEngine App List Name=UEngine App List
Name[zh]=UEngine 程序菜单 Name[zh]=UEngine 程序菜单

View File

@ -4,7 +4,7 @@ Encoding=UTF-8
Categories=System; Categories=System;
Terminal=false Terminal=false
Exec=/usr/bin/uengine-apk-builder %F Exec=/usr/bin/uengine-apk-builder %F
Icon=/opt/apps/com.gitee.uengine.runner.spark/files/icon.png Icon=/opt/apps/com.gitee.uengine.runner.spark/files/builer.svg
Name=Build Apk To Deb(UEngine Runner) Name=Build Apk To Deb(UEngine Runner)
Comment=Build Apk To Deb(UEngine Runner) Comment=Build Apk To Deb(UEngine Runner)
Comment[zh]=打包 debUEngine 运行器) Comment[zh]=打包 debUEngine 运行器)

View File

@ -4,7 +4,7 @@ Encoding=UTF-8
Categories=System; Categories=System;
Terminal=false Terminal=false
Exec=/usr/bin/uengine-runner -i %F Exec=/usr/bin/uengine-runner -i %F
Icon=/opt/apps/com.gitee.uengine.runner.spark/files/icon.png Icon=/opt/apps/com.gitee.uengine.runner.spark/files/runner.svg
Name=Install Or Uninstall APK(uengine runner) Name=Install Or Uninstall APK(uengine runner)
Comment=Install Or Uninstall APK(UEngine runner) Comment=Install Or Uninstall APK(UEngine runner)
Comment[zh]=安装/卸载 APKUEngine 运行器) Comment[zh]=安装/卸载 APKUEngine 运行器)

View File

@ -4,7 +4,7 @@ Encoding=UTF-8
Categories=System; Categories=System;
Terminal=false Terminal=false
Exec=/usr/bin/uengine-apk-builder %F Exec=/usr/bin/uengine-apk-builder %F
Icon=/opt/apps/com.gitee.uengine.runner.spark/files/icon.png Icon=/opt/apps/com.gitee.uengine.runner.spark/files/builer.svg
Name=uengine Apk Builder Name=uengine Apk Builder
Comment=UEngine Apk Builder Comment=UEngine Apk Builder
Comment[zh]=UEngine 应用打包器 Comment[zh]=UEngine 应用打包器

View File

@ -4,7 +4,7 @@ Encoding=UTF-8
Categories=System; Categories=System;
Terminal=false Terminal=false
Exec=/usr/bin/uengine-runner Exec=/usr/bin/uengine-runner
Icon=/opt/apps/com.gitee.uengine.runner.spark/files/icon.png Icon=/opt/apps/com.gitee.uengine.runner.spark/files/runner.svg
Name=uengine Runner Name=uengine Runner
Comment=UEngine Runner Comment=UEngine Runner
Comment[zh]=UEngine 运行器 Comment[zh]=UEngine 运行器

View File

@ -0,0 +1,12 @@
<head>
<title>UEngine 运行器 1.6.0 帮助</title>
</head>
<body>
<h1>UEngine 运行器 1.6.0 帮助</h1>
<hr/>
<h2>安装自定义 APK 应用</h2>
<h3>方法1</h3>
<h3>方法2</h3>
<hr/>
<h2>高级功能</h2>
</body>

View File

@ -18,7 +18,8 @@
"Name": "程序", "Name": "程序",
"Menu": [ "Menu": [
"清空软件历史记录", "清空软件历史记录",
"退出程序" "退出程序",
"程序设置"
] ]
}, },
{ {
@ -112,7 +113,9 @@
"Menu": [ "Menu": [
"程序官网", "程序官网",
"关于", "关于",
"反馈程序问题和建议" "反馈程序问题和建议",
"检查更新",
"更多帮助"
] ]
} }
] ]
@ -152,7 +155,8 @@
"Name": "Program", "Name": "Program",
"Menu": [ "Menu": [
"Clean Program History", "Clean Program History",
"Exit The Program" "Exit The Program",
"Program Setting"
] ]
}, },
{ {
@ -246,7 +250,9 @@
"Menu": [ "Menu": [
"Program WebSize", "Program WebSize",
"Program Help", "Program Help",
"Upload Problem And Advice" "Upload Problem And Advice",
"ABout This Program",
"More Help"
] ]
} }
] ]

View File

@ -0,0 +1,273 @@
# uengine 运行器 1.5.3
### 介绍
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;新版本Deepin/UOS发布后可以在应用商店安装部分官方已适配的安卓应用对爱好者来说不能自己安装APK软件包始终差点意思本程序可以为Deepin/UOS上的UEngine安卓运行环境安装自定义APK软件包并能发送安装的APK包启动菜单到桌面或系统菜单。
![1.5.3](https://storage.deepin.org/thread/202112121231595786_截图_选择区域_20211212123106.png)
测试平台UOS 家庭版 21.1deepin 20.3,UOS 专业版 1040
(自己美术功底太差,图标直接用 anbox 的了)
## 安装前必读
+ releases 里有两个 deb 包,**是一样的除了包名和打包标准不同****只能选择其中一个安装****两个都安装会产生冲突**两个deb包的作用如下
- 包名为`spark-uengine-runner`的,是旧包,按照**正常标准打包**,适用于从**星火应用商店安装**以及**从低版本即1.3.2即以下版本升级上来的用户)升级**或者**之前就安装该版本的用户**甚至**想跨平台的用户**等等
- 包名为`com.gitee.uengine.runner.spark`的,是按照**deepin/UOS的标准打包的**,适用于**之前就安装该版本并升级上来的用户**以及**希望按照该方法打包的用户**等等
+ **近期升级的 UEngine 安装时会自动把要安装的 apk 删除**,如果这个 apk 文件非常重要请**拷贝一个备份版并安装这个备份版**
### 更新内容
#### V1.6.0(开学版,即将完成!!!)
##### 目前更新内容
**※1、更换了新的图标暂未全部更新完成**
**※2、支持程序的评分和查看分数详情的功能如果炸了我的服务器这个就作废了**
**※3、修复了在安装奇奇怪怪的安装包如格式、标识不正确的时的快捷方式图标为空以及快捷方式文本的变化**
**※4、添加更新功能可以自行升级到最新版本如果炸了我的服务器这个就作废了**
**※5、新增程序帮助**
6、新填彩蛋在“关于”=>“关于”显示的窗口双击“关于”开启)(如果炸了我的服务器,这个就作废了)
#### V1.5.32021-12-12DDUC11版
##### 更新内容
**※1、修复了在 UOS 家庭版安装 apk 文件安装包信息为 None 的问题**
**※2、“添加/删除 UEngine 图标”窗口的写入按钮在目录**`~/.local/share/icons/hicolor/256x256/apps`**不存在时点击无反应参考报错1.5.3-1**
**※3、修复了“UEngine APK 应用打包器”打包的deb包的.desktop文件的**`Icon`**和**`Exec`**字段有误的问题以及使用“使用前缀uengine-dc”前缀的问题**
4、“UEngine APK 应用打包器”支持打包完后自动删除临时目录
5、“UEngine APK 应用打包器”以及“添加/删除 UEngine 图标”支持在运行出现错误时显示报错
##### 报错:
*1.5.3-1*
```bash
Exception in Tkinter callback
Traceback (most recent call last):
File "/usr/lib/python3.7/tkinter/__init__.py", line 1705, in __call__
return self.func(*args)
File "/home/gfdgd_xi/Desktop/uengine-runner/main.py", line 865, in SaveDesktopLink
shutil.copy(programPath + "/defult.png", iconSavePath)
File "/usr/lib/python3.7/shutil.py", line 245, in copy
copyfile(src, dst, follow_symlinks=follow_symlinks)
File "/usr/lib/python3.7/shutil.py", line 121, in copyfile
with open(dst, 'wb') as fdst:
FileNotFoundError: [Errno 2] No such file or directory: '/home/gfdgd_xi/.local/share/icons/hicolor/256x256/apps/com.miHoYo.cloudgames.ys.png'
```
##### 截图
![1.5.3](https://storage.deepin.org/thread/202112121231595786_截图_选择区域_20211212123106.png)
#### V1.5.22021-11-28
**※1、支持安装和构建带 Root 的 UEngine 的镜像**
2、更新了反馈链接
![](https://storage.deepin.org/thread/202111281607295590_截图_选择区域_20211128160706.png)
#### V1.5.12021-10-05国庆节版
**※1、精简用户界面合并安装和卸载输入框和浏览按钮等**
**※2、修复安装以其的程序图标无法点击进入的问题deepin 社区版不存在此问题)**
**※3、支持在程序本体反馈问题**
4、修复了菜单栏的部分显示问题
5、支持显示 apk 的部分信息
6、支持删除 UEngine 程序运行检查以及重新安装 UEngine 的功能
7、自带有跳过家庭版必须有指定包名才能运行程序限制的脚本
8、补回依赖包“adb”
![1.5.1](https://storage.deepin.org/thread/202110051821076836_截图_dde-desktop_20211005182021.png)
#### V1.5.02021-09-21中秋节版
**没有什么实质性的功能,只是开始有多语言支持**
**※1、部分窗口支持英语**
2、修复在英语状态下启动器图标名称异常的问题
![1.5.0](https://storage.deepin.org/thread/202109202157289430_截图_选择区域_20210920215550.png)
#### V1.4.32021-09-11开学第一版
**※1、支持打包器打包的包名带前缀“uengine-dc”**
**※2、修复了两种情况可能导致程序卡住/出错无法继续运行的情况(配置文件夹不齐全和获取版本信息卡住两种情况)**
**※3、修改了 UEngine 打包器打包的应用包名可能有大写的情况**
4、支持一键使用 Scrcpy 连接 UEngine①先安装 adb 破解补丁②请确保是使用snap安装的 Scrcpy【目前只支持 snap 安装的 Scrcpy 进行连接】)
5、支持右键打包 apk
![1.4.3](https://storage.deepin.org/thread/202109111635389828_截图_选择区域_20210911163449.png)
#### V1.4.22021-08-30快开学了
**※1、添加adb破解补丁用于可以让adb连接UEngine并支持adb的部分操作;**
2、菜单栏的项目添加以及外观优化;
3、修复键盘映射无法添加新映射的问题并修改键盘映射启动方式;
4、把 uengine 改为 UEngine;
5、修改 pkexec 获取密码时显示的图标和文本;
6、添加了 UEngine 系统设置的快捷方式;
![1.4.2](https://storage.deepin.org/thread/202108301750554993_截图_选择区域_20210830134502.png)
#### V1.4.12021-08-26
**※1、初步支持键盘映射**
2、修复新版包在发送uengine列表快捷方式时会提示找不到文件
![1.4.1](https://storage.deepin.org/thread/20210826151947783_截图_选择区域_20210826151312.png)
#### V1.4.02021-08-19
**※1、添加新版打包方式deepin打包方式;**
**※2、支持测试运行/创建/删除uengine图标;**
**※3、支持提取安装的apk;**
**※4、支持打包deb包;**
5、修改菜单栏布局;
6、支持打开uengine数据目录和用户数据目录;
7、程序信息保存到json,非直接写入程序本体;
8、更多命令操作;
![1.4.0](https://storage.deepin.org/thread/202108191410327464_截图_选择区域_20210819140938.png)
#### V1.3.22021-08-16
**※1、支持uengine数据重置;**
**※2、支持修改uengine网络桥接的启动状态;**
**※3、支持右键安装/卸载;**
**※4、支持启用或禁用uengine;**
**※5、修复打包问题不会出现“dpkg:警告:卸载spark-uengine-runner时目录/opt/apps/uengine-runner非空因而不会删除该目录”的错误;**
![1.3.2](https://storage.deepin.org/thread/202108152141139401_截图_选择区域_20210815213948.png)
#### V1.3.12021-08-12
**※1、修复打包问题防止部分用户安装出错的问题;**
**※2、修复了程序无法提取图标时可以提取默认图标使用;**
![1.3.1](https://storage.deepin.org/thread/202108121509217807_截图_选择区域_20210812150849.png)
#### V1.3.02021-08-08
**※1、修改了界面布局;**
**※2、修复大多数新安装普通用户的路图标及启动菜单文件路径不存在导致安装APK报错的bugs;**
3、删除少量冗余代码调整代码顺序;
4、支持提取 apk 图标。
![1.3.0](https://storage.deepin.org/thread/202108082100582804_截图_tk_20210808210047.png)
#### V1.2.32021-08-02
1、调整部分控件名称
2、调整界面布局及界面风格
![1.2.3](https://images.gitee.com/uploads/images/2021/0802/080620_1dd289ca_7896131.png)
#### V1.2.22021-07-11
1、对程序错误的显示更加人性化
2、对 icon 的获取方式进行了升级;
3、增加了注释、删除部分冗余代码。
![1.2.2](https://images.gitee.com/uploads/images/2021/0711/145140_b04e51b7_7896131.png)
#### V1.2.12021-07-02
**※1、进行了安装方式的修改不使用 adb修复原无法安装和卸载的问题**
2、进行了部分优化
3、进行了功能缩水
4、修复 deb 打包错误。
![1.2.1](https://images.gitee.com/uploads/images/2021/0702/204040_6abb6f3f_7896131.png)
#### V1.2.02021-06-06
1、支持安装自动添加快捷方式、卸载删除快捷方式
2、支持使用包名或 APK 文件卸载程序;
3、支持查看安装的所有包名
4、进行了部分优化
![1.2.0](https://images.gitee.com/uploads/images/2021/0606/115536_0c0ddf38_7896131.png)
#### V1.1.02021-05-30
1、修改了因编写时出现的中、英文混用的情况
2、支持一键连接默认 IP
3、修复在不连接设备直接选择 apk 安装时会卡住的问题
4、修复在把“uengine 程序菜单”发送到桌面或启动器如果询问覆盖时点击取消会卡住的问题
5、修改了程序界面为白色调不和标题栏冲突矛盾
![1.1.0](https://images.gitee.com/uploads/images/2021/0530/133429_7e6bf629_7896131.png)
#### V1.0.02021-05-29
![1.0.0](https://images.gitee.com/uploads/images/2021/0529/173756_2e333c86_7896131.png)
### 源码安装教程
按下 <kbd>Ctrl</kbd>+<kbd>Alt</kbd>+<kbd>T</kbd> 打开终端,按以下内容操作:
1. 安装所需依赖
```bash
sudo apt install deepin-elf-verify python3 python3-tk python3-pip
sudo apt install aapt uengine python3-setuptools deepin-terminal curl
sudo apt install python3-pil python3-pil.imagetk python3-requests adb
sudo apt install translate-shell python3-xlib python3-requests fonts-noto-cjk python3-numpy
python3 -m pip install pip -U
python3 -m pip install --upgrade ttkthemes -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
python3 -m pip install --upgrade pyautogui -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
python3 -m pip install --upgrade keyboard -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
```
2. 下载本程序
```bash
git clone https://gitee.com/gfdgd-xi/uengine-runner.git
```
3. 运行本程序
```bash
sudo mkdir /opt/apps/uengine-runner
sudo cp uengine-runner /opt/apps/uengine-runner -rv
sudo cp getxmlimg.py /opt/apps/uengine-runner -rv
sudo cp icon.png /opt/apps/uengine-runner -rv
chmod 777 /opt/apps/uengine-runner/main.py
sudo cp /opt/apps/uengine-runner/main.py /usr/bin/uengine-runner
./main.py
```
4. 卸载本程序
```bash
sudo rm /usr/bin/uengine-runner -v
sudo rm /opt/apps/uengine-runner/ -rfv
pip3 uninstall ttkthemes
```
### 使用说明
1、需要你有使用 root 权限的能力;
2、需要安装 UEngine 才能使用UOS建议在商店安装一个安卓应用让系统自动安装 UEngine 及相关的依赖包;
3、提取 apk 图标的 apk 路径以“安装 apk”那栏为准;
4、如果报错是有关产生 .deksotp 文件有关,一般可以打开程序列表运行。如果想要连接其他手机,请使用 1.2.0 以前的版本,可以使用 adb 连接。
### 故障排除
提 issue 最好,当然有些问题自己无法解决,请大佬 push 一下
如果出现故障,尝试终端运行,如果是可以自行解决的问题,就**自行解决**,如果可以就**提 issues 并提供解决方案**,不行就**提 isscue 并提供程序和终端报错以及程序版本**
### 下载量
这里只统计蓝奏云的下载量,链接(懒得更了):
[https://kdocs.cn/l/smrvazWGuKcY](https://kdocs.cn/l/smrvazWGuKcY)
### 已知问题
<p align="center"><img src='https://bbs.deepin.org/assets/image/raccoon/[sad].gif'></p>
![Error](https://storage.deepin.org/thread/202108101105396531_截图___tk__messagebox_20210810110449.png)
部分 app 无法读取出图片,已知:
| 程序 | 下载链接 |
| :-: | :-: |
| Firefox For Android | https://www.firefox.com.cn/download/ |
| 网易云音乐 For Android | https://music.163.com/#/download |
| 抖音 | https://www.wandoujia.com/apps/7461948 |
| 360 手机浏览器 | https://mse.360.cn/ |
| E-Go | 忘了 |
| 其他待测试…… | 其他待测试…… |
**注意:提取不出图标不代表未安装成功!**
### 贡献
<p align="center"><img src='https://bbs.deepin.org/assets/image/raccoon/blush.gif'></p>
非常欢迎大家的贡献
贡献的开发者列表:
| 开发者 | 邮箱 |
| :-: | :-: |
| gfdgd xi | 3025613752@qq.com |
| actionchen | 917981399@qq.com |
| 柚子 | https://gitee.com/Limexb |
### 相关项目
| 项目名称 | 项目地址 |
| :-: | :-:|
| uengine-installer | https://gitee.com/Maicss/uengine-installer |
| uengine APK 打包器 | https://gitee.com/gfdgd-xi/uengine-apk-builder |
| Root UEngine | https://gitee.com/Limexb/root-uengine |
### 附测试生成图标无问题列表:
**至于能不能用就不测试了,这暂时不是重点**
**现在新加了评分功能,就看大家的评分了!**
| 程序 | 下载链接 |
|:-:|:-:|
| QQ 全家桶完整版、极速版、Android Pad 版) | https://im.qq.com |
| TIM | 忘了 |
| 微信 | https://weixin.qq.com |
| 百度翻译 | 忘了 |
| 百度网盘 | https://pan.baidu.com |
| 腾讯课堂 | 忘了 |
| 抖音极速版 | 忘了 |
| 豌豆荚 | 忘了 |
| 小猿口算 | 忘了 |
| Hyperbowl | 忘了 |
| bilibili | https://d.bilibili.com/download_app.html?bsource=app_bili |
| 蓝奏云 | https://up.woozooo.com/lanzouh5.apk |
| QQ 音乐完整版、Android Pad 版、TV 版、车载版) | https://y.qq.com/download/index.html |
| 360 手机卫士(完整版、极速版) | https://shouji.360.cn/v6/index.html |
| 360 清理大师(稳定版、尝鲜版) | http://shouji.360.cn/360cleandroid/ |
| 360 手机助手 | http://sj.360.cn/index.html |
| WPS Office For Android | https://www.wps.cn/ |
| 钉钉 for android | https://page.dingtalk.com/wow/dingtalk/act/download?spm=a3140.8196062.0.0.6f4c5c3dWBhYUM |
### ©2021-2022

View File

@ -1,11 +0,0 @@
[Desktop Entry]
Categories=System;
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 程序菜单
Terminal=false
Type=Application

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 312 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 35 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 15 KiB

View File

@ -1,9 +1,10 @@
{ {
"Package": "com.gitee.uengine.runner.spark",
"Url": [ "Url": [
"https://gitee.com/gfdgd-xi/uengine-runner", "https://gitee.com/gfdgd-xi/uengine-runner",
"https://github.com/gfdgd-xi/uengine-runner" "https://github.com/gfdgd-xi/uengine-runner"
], ],
"Version": "1.5.3", "Version": "1.6.0",
"System": "Linuxdeepin/UOS", "System": "Linuxdeepin/UOS",
"Tips": [ "Tips": [
"更多可见https://gitee.com/gfdgd-xi/uengine-runner/wikis", "更多可见https://gitee.com/gfdgd-xi/uengine-runner/wikis",
@ -21,6 +22,15 @@
"5、如果想要使用adb连接UEngine或其他手机请使用 1.2.0 以前的版本。如需连接UEngine请安装adb补丁" "5、如果想要使用adb连接UEngine或其他手机请使用 1.2.0 以前的版本。如需连接UEngine请安装adb补丁"
], ],
"Update": [ "Update": [
"V1.6.0",
"※1、更换了新的图标",
"※2、支持程序的评分和查看分数详情的功能如果炸了我的服务器这个就作废了",
"※3、修复了在安装奇奇怪怪的安装包如格式、标识不正确的时的快捷方式图标为空以及快捷方式文本的变化",
"※4、添加更新功能可以自行升级到最新版本如果炸了我的服务器这个就作废了",
"※5、新增程序帮助",
"6、新填彩蛋在“关于”=>“关于”显示的窗口双击“关于”开启)(如果炸了我的服务器,这个就作废了)",
"7、修复了“UEngine 打包器”前缀选项勾选设置不生效的问题",
"",
"V1.5.3", "V1.5.3",
"※1、修复了在 UOS 家庭版安装 apk 文件安装包信息为 None 的问题", "※1、修复了在 UOS 家庭版安装 apk 文件安装包信息为 None 的问题",
"※2、“添加/删除 UEngine 图标”窗口的写入按钮在目录~/.local/share/icons/hicolor/256x256/apps不存在时点击无反应参考报错", "※2、“添加/删除 UEngine 图标”窗口的写入按钮在目录~/.local/share/icons/hicolor/256x256/apps不存在时点击无反应参考报错",

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 19 KiB

View File

@ -3,7 +3,7 @@
########################################################################################### ###########################################################################################
# 作者gfdgd xi # 作者gfdgd xi
# 版本1.5.3 # 版本1.5.3
# 更新时间2021年12月12日DDUC11了) # 更新时间2022年02月07日要开学了)
# 感谢anbox、deepin 和 统信 # 感谢anbox、deepin 和 统信
# 基于 Python3 的 tkinter 构建 # 基于 Python3 的 tkinter 构建
########################################################################################### ###########################################################################################
@ -67,7 +67,10 @@ def BuildApkDeb(apkPath):
RunCommandShow("mkdir -pv '{}/usr/share/uengine/icons'".format(tempPath)) RunCommandShow("mkdir -pv '{}/usr/share/uengine/icons'".format(tempPath))
RunCommandShow("echo '写入文件,因为写入过程过于复杂,不显示写入命令……'") RunCommandShow("echo '写入文件,因为写入过程过于复杂,不显示写入命令……'")
apkPackageName = GetApkPackageName(apkPath, False) apkPackageName = GetApkPackageName(apkPath, False)
apkPackageNameNew = GetApkPackageName(apkPath, True) if qianZhui.get():
apkPackageNameNew = GetApkPackageName(apkPath, True)
else:
apkPackageNameNew = GetApkPackageName(apkPath, False)
apkPackageVersion = GetApkVersion(apkPath) apkPackageVersion = GetApkVersion(apkPath)
apkChineseLabel = GetApkChineseLabel(apkPath) apkChineseLabel = GetApkChineseLabel(apkPath)
apkActivityName = GetApkActivityName(apkPath) apkActivityName = GetApkActivityName(apkPath)
@ -285,6 +288,8 @@ def GetApkVersion(apkFilePath):
return line return line
def BuildUengineDesktop(packageName, activityName, showName, iconPath, savePath): def BuildUengineDesktop(packageName, activityName, showName, iconPath, savePath):
if showName == "" or showName == None:
showName = "未知应用"
things = ''' things = '''
[Desktop Entry] [Desktop Entry]
Categories=app; Categories=app;
@ -308,17 +313,6 @@ def GetApkChineseLabel(apkFilePath):
line = line.replace("'", "") line = line.replace("'", "")
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 文件的图标": def SaveApkIcon(apkFilePath, iconSavePath)->"获取 apk 文件的图标":
try: try:
@ -335,18 +329,14 @@ def SaveApkIcon(apkFilePath, iconSavePath)->"获取 apk 文件的图标":
iconData = zip.read(xmlpath) iconData = zip.read(xmlpath)
with open(iconSavePath, 'w+b') as saveIconFile: with open(iconSavePath, 'w+b') as saveIconFile:
saveIconFile.write(iconData) saveIconFile.write(iconData)
return
print("Show defult icon")
shutil.copy(programPath + "/defult.png", iconSavePath)
except: except:
traceback.print_exc() traceback.print_exc()
print("Error, show defult icon") print("Error, show defult icon")
shutil.copy(programPath + "/defult.png", iconSavePath) shutil.copy(programPath + "/defult.png", iconSavePath)
#def SaveApkIcon(apkFilePath, iconSavePath):
# zip = zipfile.ZipFile(apkFilePath)
# iconData = zip.read(GetApkIconInApk(apkFilePath))
# with open(iconSavePath, 'w+b') as saveIconFile:
# saveIconFile.write(iconData)
def TextboxAddText1(message): def TextboxAddText1(message):
global textbox1 global textbox1
textbox1.configure(state=tk.NORMAL) textbox1.configure(state=tk.NORMAL)
@ -383,7 +373,7 @@ if not lang in langFile.keys():
information = json.loads(readtxt(programPath + "/information.json")) information = json.loads(readtxt(programPath + "/information.json"))
version = information["Version"] version = information["Version"]
title = "{} {}".format(langFile[lang]["Uengine Apk Builder"]["Title"], version) title = "{} {}".format(langFile[lang]["Uengine Apk Builder"]["Title"], version)
iconPath = "{}/icon.png".format(os.path.split(os.path.realpath(__file__))[0]) iconPath = "{}/builer.png".format(os.path.split(os.path.realpath(__file__))[0])
########################### ###########################
# 加载配置 # 加载配置

View File

@ -1,16 +0,0 @@
[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

View File

@ -2,8 +2,8 @@
# 使用系统默认的 python3 运行 # 使用系统默认的 python3 运行
########################################################################################### ###########################################################################################
# 作者gfdgd xi<3025613752@qq.com> # 作者gfdgd xi<3025613752@qq.com>
# 版本1.5.3 # 版本1.6.1
# 更新时间2021年12月12日DDUC11了) # 更新时间2022年2月6日要开学了)
# 感谢anbox、deepin 和 UOS # 感谢anbox、deepin 和 UOS
# 基于 Python3 的 tkinter 构建 # 基于 Python3 的 tkinter 构建
# 更新gfdgd xi<3025613752@qq.com>、actionchen<917981399@qq.com> # 更新gfdgd xi<3025613752@qq.com>、actionchen<917981399@qq.com>
@ -19,9 +19,16 @@ import shutil
import zipfile import zipfile
import traceback import traceback
import threading import threading
import easygui
import ttkthemes import ttkthemes
import webbrowser import webbrowser
import subprocess import subprocess
import matplotlib
import requests
import numpy
import matplotlib.figure
import matplotlib.pylab
import matplotlib.font_manager
import PIL.Image as Image import PIL.Image as Image
import PIL.ImageTk as ImageTk import PIL.ImageTk as ImageTk
import tkinter as tk import tkinter as tk
@ -31,6 +38,7 @@ import tkinter.filedialog as filedialog
import tkinter.simpledialog as simpledialog import tkinter.simpledialog as simpledialog
from getxmlimg import getsavexml from getxmlimg import getsavexml
win = tk.Tk() # 创建窗口
# 卸载程序 # 卸载程序
def UninstallProgram(package: "apk 包名")->"卸载程序": def UninstallProgram(package: "apk 包名")->"卸载程序":
@ -38,8 +46,8 @@ def UninstallProgram(package: "apk 包名")->"卸载程序":
global fineUninstallApkHistory global fineUninstallApkHistory
Return = GetCommandReturn("pkexec /usr/bin/uengine-session-launch-helper -- uengine uninstall --pkg='{}'".format(package)) Return = GetCommandReturn("pkexec /usr/bin/uengine-session-launch-helper -- uengine uninstall --pkg='{}'".format(package))
print(Return) print(Return)
if os.path.exists("{}/.local/share/applications/{}.desktop".format(get_home(), package)): if os.path.exists("{}/.local/share/applications/uengine/{}.desktop".format(get_home(), package)):
os.remove("{}/.local/share/applications/{}.desktop".format(get_home(), package)) os.remove("{}/.local/share/applications/uengine/{}.desktop".format(get_home(), package))
if os.path.exists("{}/{}.desktop".format(get_desktop_path(), package)): if os.path.exists("{}/{}.desktop".format(get_desktop_path(), package)):
os.remove("{}/{}.desktop".format(get_desktop_path(), package)) os.remove("{}/{}.desktop".format(get_desktop_path(), package))
findApkHistory.append(ComboInstallPath.get()) findApkHistory.append(ComboInstallPath.get())
@ -53,16 +61,6 @@ def UninstallProgram(package: "apk 包名")->"卸载程序":
messagebox.showerror(title="错误", message=traceback.format_exc()) messagebox.showerror(title="错误", message=traceback.format_exc())
DisabledAndEnbled(False) 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 ButtonClick8(): def ButtonClick8():
if ComboInstallPath.get() is "": if ComboInstallPath.get() is "":
@ -73,6 +71,7 @@ def ButtonClick8():
path = GetApkPackageName(ComboInstallPath.get()) path = GetApkPackageName(ComboInstallPath.get())
else: else:
path = ComboInstallPath.get() path = ComboInstallPath.get()
print(path)
threading.Thread(target=UninstallProgram, args=[path]).start() threading.Thread(target=UninstallProgram, args=[path]).start()
# 浏览窗口 # 浏览窗口
@ -100,9 +99,14 @@ def Button3Install():
# 安装应用 # 安装应用
def InstallApk(path: "apk 路径", quit: "是否静默安装" = False): def InstallApk(path: "apk 路径", quit: "是否静默安装" = False):
try: try:
if not os.path.exists("/tmp/uengine-runner"):
os.makedirs("/tmp/uengine-runner")
if not os.path.exists("{}/.local/share/applications/uengine/".format(get_home())): if not os.path.exists("{}/.local/share/applications/uengine/".format(get_home())):
print("Mkdir") print("Mkdir")
os.makedirs("{}/.local/share/applications/uengine/".format(get_home())) os.makedirs("{}/.local/share/applications/uengine/".format(get_home()))
# 读取设置
setting = json.loads(readtxt(get_home() + "/.config/uengine-runner/setting.json"))
# 安装应用
print("start install apk") print("start install apk")
global findApkHistory global findApkHistory
print("start install apk12") print("start install apk12")
@ -113,6 +117,14 @@ def InstallApk(path: "apk 路径", quit: "是否静默安装" = False):
if not os.path.exists(iconSaveDir): if not os.path.exists(iconSaveDir):
os.makedirs(iconSaveDir,exist_ok=True) os.makedirs(iconSaveDir,exist_ok=True)
SaveApkIcon(path, iconSavePath) SaveApkIcon(path, iconSavePath)
try:
if setting["SaveApk"]:
shutil.copy(path, "/tmp/uengine-runner/bak.apk")
except:
if not messagebox.askyesno(title="错误", message="无法备份安装包,是否不备份安装包继续安装?\n提示新版UEngine安装后会自动删除安装包"):
DisabledAndEnbled(False)
return
setting["SaveApk"] = False
print("start install apk2") print("start install apk2")
BuildUengineDesktop(GetApkPackageName(path), GetApkActivityName(path), GetApkChineseLabel(path), iconSavePath, BuildUengineDesktop(GetApkPackageName(path), GetApkActivityName(path), GetApkChineseLabel(path), iconSavePath,
"{}/{}.desktop".format(get_desktop_path(), GetApkPackageName(path))) "{}/{}.desktop".format(get_desktop_path(), GetApkPackageName(path)))
@ -121,6 +133,11 @@ def InstallApk(path: "apk 路径", quit: "是否静默安装" = False):
"{}/.local/share/applications/uengine/{}.desktop".format(get_home(), GetApkPackageName(path))) "{}/.local/share/applications/uengine/{}.desktop".format(get_home(), GetApkPackageName(path)))
commandReturn = GetCommandReturn("pkexec /usr/bin/uengine-session-launch-helper -- uengine install --apk='{}'".format(path)) commandReturn = GetCommandReturn("pkexec /usr/bin/uengine-session-launch-helper -- uengine install --apk='{}'".format(path))
print(commandReturn) print(commandReturn)
try:
if setting["SaveApk"]:
shutil.copy("/tmp/uengine-runner/bak.apk", path)
except:
messagebox.showerror(title="错误", message="无法还原安装包\n提示新版UEngine安装后会自动删除安装包备份的Apk在/tmp/uengine-runner/bak.apk电脑重启后就会丢失")
print("\nprint install complete") print("\nprint install complete")
if quit: if quit:
print(commandReturn) print(commandReturn)
@ -324,6 +341,8 @@ def ReinstallUengineImage():
# 生成 uengine 启动文件到桌面 # 生成 uengine 启动文件到桌面
def BuildUengineDesktop(packageName: "软件包名", activityName: "activity", showName: "显示名称", iconPath: "程序图标所在目录", savePath:".desktop 文件保存路径")->"生成 uengine 启动文件到桌面": def BuildUengineDesktop(packageName: "软件包名", activityName: "activity", showName: "显示名称", iconPath: "程序图标所在目录", savePath:".desktop 文件保存路径")->"生成 uengine 启动文件到桌面":
if showName == "" or showName == None:
showName = "未知应用"
things = '''[Desktop Entry] things = '''[Desktop Entry]
Categories=app; Categories=app;
Encoding=UTF-8 Encoding=UTF-8
@ -350,6 +369,8 @@ def GetApkChineseLabel(apkFilePath)->"获取软件的中文名称":
# 保存apk图标 # 保存apk图标
def SaveApkIcon(apkFilePath, iconSavePath)->"保存 apk 文件的图标": def SaveApkIcon(apkFilePath, iconSavePath)->"保存 apk 文件的图标":
try: try:
if os.path.exists(iconSavePath):
os.remove(iconSavePath)
info = GetApkInformation(apkFilePath) info = GetApkInformation(apkFilePath)
for line in info.split('\n'): for line in info.split('\n'):
if "application:" in line: if "application:" in line:
@ -358,11 +379,15 @@ def SaveApkIcon(apkFilePath, iconSavePath)->"保存 apk 文件的图标":
xmlsave = getsavexml() xmlsave = getsavexml()
print(xmlpath) print(xmlpath)
xmlsave.savexml(apkFilePath,xmlpath,iconSavePath) xmlsave.savexml(apkFilePath,xmlpath,iconSavePath)
return
else: else:
zip = zipfile.ZipFile(apkFilePath) zip = zipfile.ZipFile(apkFilePath)
iconData = zip.read(xmlpath) iconData = zip.read(xmlpath)
with open(iconSavePath, 'w+b') as saveIconFile: with open(iconSavePath, 'w+b') as saveIconFile:
saveIconFile.write(iconData) saveIconFile.write(iconData)
return
print("None Icon! Show defult icon")
shutil.copy(programPath + "/defult.png", iconSavePath)
except: except:
traceback.print_exc() traceback.print_exc()
print("Error, show defult icon") print("Error, show defult icon")
@ -628,14 +653,111 @@ def GetApkVersion(apkFilePath):
line = line.replace(" ", "") line = line.replace(" ", "")
return line return line
def VersionCheck(version1, version2):
return version1 == version2
def ShowHelp():
webbrowser.open_new_tab(programPath + "/Help/index.html")
class SettingWindow():
saveApkOption = tk.IntVar()
def ShowWindow():
setting = tk.Toplevel()
setting.resizable(0, 0)
setting.iconphoto(False, tk.PhotoImage(file=iconPath))
setting.title("设置 UEngine 运行器" + version)
saveApkFrame = ttk.LabelFrame(setting, text="Apk 安装设置")
try:
data = json.loads(readtxt(get_home() + "/.config/uengine-runner/setting.json"))
except:
messagebox.showerror(title="错误", message="读取设置错误!无法打开设置窗口!")
setting.destroy()
SettingWindow.saveApkOption = tk.IntVar()
SettingWindow.saveApkOption.set(int(data["SaveApk"]))
ttk.Radiobutton(saveApkFrame, text="不备份Apk包直接安装", value=0, variable=SettingWindow.saveApkOption).pack(anchor=tk.W)
ttk.Radiobutton(saveApkFrame, text="备份Apk包然后在安装后自动拷贝原先目录", value=1, variable=SettingWindow.saveApkOption).pack(anchor=tk.W)
controlFrame = ttk.Frame(setting)
ttk.Button(controlFrame, text="取消", command=setting.destroy).grid(row=0, column=0)
ttk.Button(controlFrame, text="保存", command=SettingWindow.SaveSetting).grid(row=0, column=1)
saveApkFrame.pack()
controlFrame.pack(anchor=tk.E)
def SaveSetting():
try:
write_txt(get_home() + "/.config/uengine-runner/setting.json", json.dumps({"SaveApk": bool(SettingWindow.saveApkOption.get())}))
except:
traceback.print_exc()
messagebox.showerror(title="错误", message="保存设置错误!")
return
messagebox.showinfo(title="提示", message="设置保存完毕!")
class UpdateWindow():
data = {}
def ShowWindow():
update = tk.Toplevel()
update.title("检查更新")
update.resizable(0, 0)
update.iconphoto(False, tk.PhotoImage(file=iconPath))
versionLabel = ttk.Label(update, text="当前版本:{}\n最新版本未知\n更新内容".format(version))
updateText = tk.Text(update)
controlFrame = ttk.Frame(update)
ok = ttk.Button(controlFrame, text="更新更新过程中会关闭所有Python应用包括这个应用", command=UpdateWindow.Update)
cancel = ttk.Button(controlFrame, text="取消", command=update.destroy)
try:
UpdateWindow.data = json.loads(requests.get("http://120.25.153.144/uengine-runner/update.json").text)
versionLabel = ttk.Label(update, text="当前版本:{}\n最新版本{}\n更新内容".format(version, UpdateWindow.data["Version"]))
if UpdateWindow.data["Version"] == version:
updateText.insert("0.0", "此为最新版本,无需更新")
ok.configure(state=tk.DISABLED)
else:
updateText.insert("0.0", UpdateWindow.data["New"].replace("\\n", "\n"))
except:
traceback.print_exc()
messagebox.showerror(title="错误", message="无法连接服务器!")
updateText.configure(state=tk.DISABLED)
versionLabel.pack(anchor=tk.W)
updateText.pack()
controlFrame.pack(anchor=tk.E)
cancel.grid(row=0, column=0)
ok.grid(row=0, column=1)
update.mainloop()
def Update():
if not os.path.exists("/tmp/uengine-runner/update"):
os.makedirs("/tmp/uengine-runner/update")
try:
write_txt("/tmp/uengine-runner/update.sh", """#!/bin/bash
echo 删除多余的安装包
rm -rfv /tmp/uengine-runner/update/*
echo 关闭“UEngine 运行器”以及其它“Python 应用”
killall python3
echo 下载安装包
wget -P /tmp/uengine-runner/update {}
echo 安装安装包
dpkg -i /tmp/uengine-runner/update/*.deb
echo 修复依赖关系
apt install -f -y
notify-send -i uengine "更新完毕!"
zenity --info --text=\"更新完毕!\" --ellipsize
""".format(UpdateWindow.data["Url"][int(information["Package"] == "com.gitee.uengine.runner.spark")], iconPath))
except:
traceback.print_exc()
easygui.textbox(title="错误", msg="更新出现错误,无法继续更新!", text=traceback.format_exc())
os.system("deepin-terminal -e pkexec bash /tmp/uengine-runner/update.sh")
image = None
class ApkInformation(): class ApkInformation():
def ShowWindows(): def ShowWindows():
global fullInformation global fullInformation
global path global path
global tab1 global tab1
path = ComboInstallPath.get() path = ComboInstallPath.get()
package = GetApkPackageName(path)
if package == None or package == "":
messagebox.showerror(title="错误", message="该应用安装包异常,无法查询相关数据!")
return
message = tk.Toplevel() message = tk.Toplevel()
message.title("“{}“的Apk信息".format(GetApkChineseLabel(path)))
message.iconphoto(False, tk.PhotoImage(file=iconPath))
tab = ttk.Notebook(message) tab = ttk.Notebook(message)
@ -663,16 +785,64 @@ class ApkInformation():
# 获取图标 # 获取图标
SaveApkIcon(path, "/tmp/uengine-runner-android-app-icon.png") SaveApkIcon(path, "/tmp/uengine-runner-android-app-icon.png")
# 读取图标 # 读取图标
global image
image = Image.open("/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: if image.size[0] + image.size[1] <= 512:
ttk.Label(tab1, image=ImageTk.PhotoImage(image)).pack() ttk.Label(tab1, image=ImageTk.PhotoImage(Image.open("/tmp/uengine-runner-android-app-icon.png"))).pack()
else: else:
ttk.Label(tab1, image=ImageTk.PhotoImage(image.resize((256, 256), Image.ANTIALIAS))).pack() ttk.Label(tab1, image=ImageTk.PhotoImage(Image.open("/tmp/uengine-runner-android-app-icon.png").resize((256, 256), Image.ANTIALIAS))).pack()
image.close()
info = '''包名:{} info = '''包名:{}
中文名:{} 中文名:{}
Activity{} Activity{}
版本:{}'''.format(GetApkPackageName(path), GetApkChineseLabel(path), GetApkActivityName(path), GetApkVersion(path)) 版本:{}'''.format(GetApkPackageName(path), GetApkChineseLabel(path), GetApkActivityName(path), GetApkVersion(path))
ttk.Label(tab1, text=info).pack() ttk.Label(tab1, text=info).pack()
ttk.Button(tab1, text="查看程序评分情况", command=ApkInformation.ShowMap).pack()
ttk.Button(tab1, text="上传程序评分情况", command=ApkInformation.UpdateMark).pack()
def UpdateMark():
#message = tk.Toplevel()
#message.iconphoto(False, tk.PhotoImage(file=iconPath))
choose = easygui.indexbox(title="选择评分", choices=["含有不良信息", "0分", "1分", "2分", "3分", "4分", "5分", "取消"], msg="""选择应用“{}”的使用评分。建议参考如下规范进行评分:
含有不良信息(-1分含有违法违规信息如果有就不要选择其它选项了
0星完全无法使用连安装都有问题
1星完全无法使用但是能正常安装
2星可以打开但只能使用一点点功能
3星勉强能使用运行也不大流畅
4星大部分功能正常运行流畅可能会有点小卡
5星完全正常且非常流畅没有任何功能和性能问题就和直接在手机上用一样
""".format(GetApkChineseLabel(path)))
print(choose)
if choose == None or choose == 7:
return
try:
messagebox.showinfo(title="提示", message=requests.post("http://120.25.153.144/uengine-runner/app/check/add.php", {"Package": GetApkPackageName(path), "Type": choose}).text)
except:
messagebox.showerror(title="错误", message="无法连接服务器!无法进行评分!")
def ShowMap():
package = GetApkPackageName(path)
if package == None or package == "":
messagebox.showerror(title="错误", message="该应用安装包异常,无法查询相关数据!")
return
try:
data = json.loads(requests.get("http://120.25.153.144/uengine-runner/app/check/" + package +"/data.json").text)
print(data)
except:
messagebox.showinfo(title="错误", message="此程序暂时没有评分,欢迎您贡献第一个评分!")
return
index = numpy.arange(len(data))
print(index)
chinese = GetApkChineseLabel(path)
fig = matplotlib.pylab.figure()
fig.canvas.set_window_title("“" + chinese + "”的用户评分(数据只供参考)")
fonts = matplotlib.font_manager.FontProperties(fname='/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc') # 用于支持中文显示需要依赖fonts-noto-cjk
matplotlib.pylab.barh(index, data)
matplotlib.pylab.yticks(index, ["不良信息", "0分", "1分", "2分", "3分", "4分", "5分"], fontproperties=fonts)
matplotlib.pylab.xlabel("用户评分数", fontproperties=fonts)
matplotlib.pylab.ylabel("等级", fontproperties=fonts)
matplotlib.pylab.title("“" + chinese + "”的用户评分(数据只供参考)", fontproperties=fonts)
matplotlib.pylab.show()
class AdbChangeUengineDisplaySize(): class AdbChangeUengineDisplaySize():
@ -681,6 +851,7 @@ class AdbChangeUengineDisplaySize():
global displayY global displayY
global displaySize global displaySize
message = tk.Toplevel() message = tk.Toplevel()
message.iconphoto(False, tk.PhotoImage(file=iconPath))
messageFrame = ttk.Frame(message) messageFrame = ttk.Frame(message)
displaySize = tk.StringVar() displaySize = tk.StringVar()
@ -819,6 +990,7 @@ class AddNewUengineDesktopLink():
global activityName global activityName
global packageName global packageName
message = tk.Toplevel() message = tk.Toplevel()
message.iconphoto(False, tk.PhotoImage(file=iconPath))
tipsLabel = ttk.Label(message, text=AddNewUengineDesktopLink.addTips) tipsLabel = ttk.Label(message, text=AddNewUengineDesktopLink.addTips)
packageName = ttk.Combobox(message, width=30) packageName = ttk.Combobox(message, width=30)
@ -974,7 +1146,7 @@ updateThingsString = "\n".join(information["Update"])
title = "{} {}".format(langFile[lang]["Main"]["MainWindow"]["Title"], version) title = "{} {}".format(langFile[lang]["Main"]["MainWindow"]["Title"], version)
updateTime = information["Time"] updateTime = information["Time"]
updateThings = "{} 更新内容:\n{}\n更新时间{}".format(version, updateThingsString, updateTime, time.strftime("%Y")) updateThings = "{} 更新内容:\n{}\n更新时间{}".format(version, updateThingsString, updateTime, time.strftime("%Y"))
iconPath = "{}/icon.png".format(os.path.split(os.path.realpath(__file__))[0]) iconPath = "{}/runner.png".format(os.path.split(os.path.realpath(__file__))[0])
desktop = programPath + "/UengineAndroidProgramList.desktop" desktop = programPath + "/UengineAndroidProgramList.desktop"
desktopName = "UengineAndroidProgramList.desktop" desktopName = "UengineAndroidProgramList.desktop"
contribute = "\n".join(information["Contribute"]) contribute = "\n".join(information["Contribute"])
@ -1006,6 +1178,24 @@ if not os.path.exists(get_home() + "/.config/uengine-runner/SaveApkIcon.json"):
write_txt(get_home() + "/.config/uengine-runner/SaveApkIcon.json", json.dumps({"path": "~"})) # 写入(创建)一个配置文件 write_txt(get_home() + "/.config/uengine-runner/SaveApkIcon.json", json.dumps({"path": "~"})) # 写入(创建)一个配置文件
if not os.path.exists(get_home() + "/.config/uengine-runner/SaveApk.json"): # 如果没有配置文件 if not os.path.exists(get_home() + "/.config/uengine-runner/SaveApk.json"): # 如果没有配置文件
write_txt(get_home() + "/.config/uengine-runner/SaveApk.json", json.dumps({"path": "~"})) # 写入(创建)一个配置文件 write_txt(get_home() + "/.config/uengine-runner/SaveApk.json", json.dumps({"path": "~"})) # 写入(创建)一个配置文件
if not os.path.exists(get_home() + "/.config/uengine-runner/setting.json"):
choose = None
choose = easygui.indexbox(msg="""在使用本程序前请选择安装Apk包的设置以便更好的运行下列选项的详细介绍
不备份Apk包直接安装适用于Deepin旧版UEngine安装较快不受/tmp大小所限但Deepin23和UOS新版UEngine不推荐此选项因为安装后会自动删除Apk安装包
备份Apk包然后在安装后自动拷贝原先目录适用于Deepin23和UOS新版UEngine安装较慢受/tmp大小所限安装后不会丢失ApkDeepin旧版UEngine不推荐使用该选项
后期可以在程序主界面的菜单栏的“程序”=>“设置”里进行修改,
如果不知道正在使用的系统是什么版本可以打开系统设置查看。
""", title="设置", choices=["不备份Apk包直接安装", "备份Apk包然后在安装后自动拷贝原先目录"])
if choose == None:
root = tk.Tk()
root.withdraw()
messagebox.showinfo(title="提示", message="必须选择一个选项!否则无法进入程序!")
sys.exit()
write_txt(get_home() + "/.config/uengine-runner/setting.json", json.dumps({"SaveApk": int(choose)}))
########################### ###########################
# 设置变量 # 设置变量
@ -1079,12 +1269,32 @@ def showhelp():
def ChgTips(): def ChgTips():
HelpStr.set(tips) HelpStr.set(tips)
LabText.config(wraplength=350) LabText.config(wraplength=350)
def Egg(event):
try:
lists = json.loads(requests.get("http://120.25.153.144/uengine-runner/VersionList.json").text)
data = []
for i in lists:
data.append(int(requests.get("http://120.25.153.144/uengine-runner/{}/data.txt".format(i)).text))
except:
messagebox.showerror(title="错误", message="服务器出错!数据获取失败!")
return
fig = matplotlib.pylab.figure()
fig.canvas.set_window_title("“UEngine 运行器”安装数(数据只供参考)")
matplotlib.pylab.plot(lists, data)
index = numpy.arange(len(lists))
fonts = matplotlib.font_manager.FontProperties(fname='/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc') # 用于支持中文显示需要依赖fonts-noto-cjk
matplotlib.pylab.xlabel("版本号", fontproperties=fonts)
matplotlib.pylab.ylabel("安装数", fontproperties=fonts)
matplotlib.pylab.title("“UEngine 运行器”安装数(数据只供参考)", fontproperties=fonts)
matplotlib.pylab.show()
BtnReadme = ttk.Button(FrmMenu, text="使用说明",width=14,command=ChgTips) BtnReadme = ttk.Button(FrmMenu, text="使用说明",width=14,command=ChgTips)
BtnLog = ttk.Button(FrmMenu, text="更新内容",width=14,command=ChgLog) BtnLog = ttk.Button(FrmMenu, text="更新内容",width=14,command=ChgLog)
BtnZujian = ttk.Button(FrmMenu, text="程序依赖的组件",width=14,command=ChgDep) BtnZujian = ttk.Button(FrmMenu, text="程序依赖的组件",width=14,command=ChgDep)
BtnGongxian = ttk.Button(FrmMenu, text="有贡献的开发者",width=14,command=ChgCon) BtnGongxian = ttk.Button(FrmMenu, text="有贡献的开发者",width=14,command=ChgCon)
BtnAbout = ttk.Button(FrmMenu, text="关于",width=14,command=ChgAbout) BtnAbout = ttk.Button(FrmMenu, text="关于",width=14,command=ChgAbout)
BtnAbout.bind("<Double-Button-1>", Egg)
#layout #layout
@ -1109,7 +1319,7 @@ def showhelp():
########################### ###########################
# 窗口创建 # 窗口创建
########################### ###########################
win = tk.Tk() # 创建窗口
# 设置窗口 # 设置窗口
style = ttkthemes.ThemedStyle(win) style = ttkthemes.ThemedStyle(win)
@ -1134,13 +1344,10 @@ win.geometry(""+"+{:.0f}+{:.0f}".format(x, y))
FrmInstall = ttk.Frame(window) FrmInstall = ttk.Frame(window)
#FrmUninstall = ttk.Frame(window) #FrmUninstall = ttk.Frame(window)
LabApkPath = ttk.Label(window, text=langFile[lang]["Main"]["MainWindow"]["LabApkPath"]) LabApkPath = ttk.Label(window, text=langFile[lang]["Main"]["MainWindow"]["LabApkPath"])
#LabUninstallPath = ttk.Label(window, text=langFile[lang]["Main"]["MainWindow"]["LabUninstallPath"])
ComboInstallPath = ttk.Combobox(window, width=50) ComboInstallPath = ttk.Combobox(window, width=50)
#ComboUninstallPath = ttk.Combobox(window, width=50)
BtnFindApk = ttk.Button(FrmInstall, text=langFile[lang]["Main"]["MainWindow"]["BtnFindApk"], command=FindApk) BtnFindApk = ttk.Button(FrmInstall, text=langFile[lang]["Main"]["MainWindow"]["BtnFindApk"], command=FindApk)
BtnInstall = ttk.Button(FrmInstall, text=langFile[lang]["Main"]["MainWindow"]["BtnInstall"], command=Button3Install) BtnInstall = ttk.Button(FrmInstall, text=langFile[lang]["Main"]["MainWindow"]["BtnInstall"], command=Button3Install)
BtnShowUengineApp = ttk.Button(window, text=langFile[lang]["Main"]["MainWindow"]["BtnShowUengineApp"], command=Button5Click) 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(FrmInstall, text=langFile[lang]["Main"]["MainWindow"]["BtnUninstall"], command=ButtonClick8) BtnUninstall = ttk.Button(FrmInstall, text=langFile[lang]["Main"]["MainWindow"]["BtnUninstall"], command=ButtonClick8)
Btngeticon = ttk.Button(FrmInstall, text=langFile[lang]["Main"]["MainWindow"]["Btngeticon"], command=SaveIconToOtherPath) Btngeticon = ttk.Button(FrmInstall, text=langFile[lang]["Main"]["MainWindow"]["Btngeticon"], command=SaveIconToOtherPath)
BtnSaveApk = ttk.Button(FrmInstall, text=langFile[lang]["Main"]["MainWindow"]["BtnSaveApk"], command=SaveInstallUengineApp) BtnSaveApk = ttk.Button(FrmInstall, text=langFile[lang]["Main"]["MainWindow"]["BtnSaveApk"], command=SaveInstallUengineApp)
@ -1168,6 +1375,7 @@ menu.add_cascade(label=langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Name"],
menu.add_cascade(label=langFile[lang]["Main"]["MainWindow"]["Menu"][3]["Name"], menu=help) menu.add_cascade(label=langFile[lang]["Main"]["MainWindow"]["Menu"][3]["Name"], menu=help)
programmenu.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][0]["Menu"][0], command=CleanProgramHistory) programmenu.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][0]["Menu"][0], command=CleanProgramHistory)
programmenu.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][0]["Menu"][2], command=SettingWindow.ShowWindow)
programmenu.add_separator() # 设置分界线 programmenu.add_separator() # 设置分界线
programmenu.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][0]["Menu"][1], command=window.quit) # 设置“退出程序” programmenu.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][0]["Menu"][1], command=window.quit) # 设置“退出程序”
@ -1188,7 +1396,6 @@ adbServer.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][1]["Men
adbServer.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][1]["Menu"][1]["Menu"][1], command=AdbStopServer) adbServer.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][1]["Menu"][1]["Menu"][1], command=AdbStopServer)
adbServer.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][1]["Menu"][1]["Menu"][2], command=AdbKillAdbProgress) adbServer.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][1]["Menu"][1]["Menu"][2], command=AdbKillAdbProgress)
#uengine.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][0], command=UengineSettingShow)
uengine.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][1], command=OpenUengineDebBuilder) uengine.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][1], command=OpenUengineDebBuilder)
uengine.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][7], command=KeyboardToMouse) uengine.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][7], command=KeyboardToMouse)
uengine.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][8], command=UengineCheckCpu) uengine.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][8], command=UengineCheckCpu)
@ -1202,7 +1409,9 @@ uengine.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"
uengine.add_cascade(label=langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][11]["Name"], menu=uengineRoot) uengine.add_cascade(label=langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][11]["Name"], menu=uengineRoot)
help.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][3]["Menu"][0], command=OpenProgramURL) # 设置“程序官网”项 help.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][3]["Menu"][0], command=OpenProgramURL) # 设置“程序官网”项
help.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][3]["Menu"][2], command=UengineRunnerBugUpload) # 设置“程序官网”项 help.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][3]["Menu"][2], command=UengineRunnerBugUpload) # 设置“传bug”项
help.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][3]["Menu"][4], command=ShowHelp) # 设置“更多帮助”项
help.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][3]["Menu"][3], command=UpdateWindow.ShowWindow)
help.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][3]["Menu"][1], command=showhelp) # 设置“关于这个程序”项 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=StartUengine)
@ -1249,7 +1458,6 @@ uengineUseAdb.configure(activebackground="dodgerblue")
uengineData.configure(activebackground="dodgerblue") uengineData.configure(activebackground="dodgerblue")
# 设置控件 # 设置控件
#ComboUninstallPath['value'] = fineUninstallApkHistory
ComboInstallPath['value'] = findApkHistory ComboInstallPath['value'] = findApkHistory
try: try:
if sys.argv[1] == "-i": if sys.argv[1] == "-i":

View File

@ -49,7 +49,7 @@ updateThingsString = "\n".join(information["Update"])
title = "UEngine 运行器 {}".format(version) title = "UEngine 运行器 {}".format(version)
updateTime = information["Time"] updateTime = information["Time"]
updateThings = "{} 更新内容:\n{}\n更新时间{}".format(version, updateThingsString, updateTime, time.strftime("%Y")) updateThings = "{} 更新内容:\n{}\n更新时间{}".format(version, updateThingsString, updateTime, time.strftime("%Y"))
iconPath = "{}/icon.png".format(os.path.split(os.path.realpath(__file__))[0]) iconPath = "{}/runner.png".format(os.path.split(os.path.realpath(__file__))[0])
desktop = "/opt/apps/uengine-runner/UengineAndroidProgramList.desktop" desktop = "/opt/apps/uengine-runner/UengineAndroidProgramList.desktop"
desktopName = "UengineAndroidProgramList.desktop" desktopName = "UengineAndroidProgramList.desktop"
contribute = "\n".join(information["Contribute"]) contribute = "\n".join(information["Contribute"])

View File

@ -49,7 +49,7 @@ def OpenGithubIssues():
########################### ###########################
# 程序信息 # 程序信息
########################### ###########################
iconPath = "{}/icon.png".format(os.path.split(os.path.realpath(__file__))[0]) iconPath = "{}/runner.png".format(os.path.split(os.path.realpath(__file__))[0])
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
information = json.loads(readtxt(programPath + "/information.json")) information = json.loads(readtxt(programPath + "/information.json"))
version = information["Version"] version = information["Version"]

View File

@ -4,7 +4,6 @@
# 更新时间2021年08月30日 # 更新时间2021年08月30日
######################################### #########################################
import os import os
import shutil
import sys import sys
import traceback import traceback
import ttkthemes import ttkthemes

View File

@ -0,0 +1,59 @@
#!/usr/bin/env python3
import os
import sys
import json
import shutil
import requests
import traceback
# 读取文本文档
def read_txt(path):
f = open(path,"r") # 设置文件对象
str = f.read() # 获取内容
f.close() # 关闭文本对象
return str # 返回结果
def GetPackageUpdateInformation():
global setting
global package
for i in allJson['Program']:
if i['Package'] == package:
return i
try:
setting = json.loads(read_txt("{}/setting.json".format(os.path.split(os.path.realpath(__file__))[0])))
except:
traceback.print_exc()
print("配置文件无法访问!")
package = setting['Package']
nowVersion = setting['Version']
try:
jsons = requests.get(setting["Url"])
except:
traceback.print_exc()
print("服务器出现错误!")
sys.exit(1)
allJson = json.loads(jsons.text)
updateInformation = GetPackageUpdateInformation()
name = updateInformation['Name']
newVersion = updateInformation['Version']
print("更新程序:{}".format(name))
print("最新版本:{}".format(newVersion))
print("目前版本:{}".format(nowVersion))
if nowVersion == newVersion:
print("目前是最新版本,无需更新!")
quit()
print("更新内容:")
print(updateInformation['New Things'])
choose = input("更新?[Y/N]")
if choose.upper() == "N":
quit()
if os.path.exists("/tmp/update-console-{}".format(package)):
shutil.rmtree("/tmp/update-console-{}".format(package))
os.mkdir("/tmp/update-console-{}".format(package))
if updateInformation["Linux App Url"][0] == None:
print("没有可用包源")
quit()
os.system("wget '{}' -P '/tmp/update-console-{}'".format(updateInformation["Linux App Url"][0], package))
os.system("sudo dpkg -i /tmp/update-console-{}/*".format(package))
os.system("sudo apt install -f -y")

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 19 KiB

View File

@ -1,6 +0,0 @@
{
"Package": "com.gitee.uengine.runner.spark",
"Update": true,
"Version": "1.5.3",
"Url": "https://gfdgd-xi.github.io/update-program/data/UpdateInformation.json"
}

View File

@ -1,7 +0,0 @@
{
"Package": "spark-uengine-runner",
"Update": true,
"Version": "1.5.3",
"Url": "https://gfdgd-xi.github.io/update-program/data/UpdateInformation.json"
}

Binary file not shown.

Binary file not shown.

View File

@ -67,7 +67,10 @@ def BuildApkDeb(apkPath):
RunCommandShow("mkdir -pv '{}/usr/share/uengine/icons'".format(tempPath)) RunCommandShow("mkdir -pv '{}/usr/share/uengine/icons'".format(tempPath))
RunCommandShow("echo '写入文件,因为写入过程过于复杂,不显示写入命令……'") RunCommandShow("echo '写入文件,因为写入过程过于复杂,不显示写入命令……'")
apkPackageName = GetApkPackageName(apkPath, False) apkPackageName = GetApkPackageName(apkPath, False)
apkPackageNameNew = GetApkPackageName(apkPath, True) if qianZhui.get():
apkPackageNameNew = GetApkPackageName(apkPath, True)
else:
apkPackageNameNew = GetApkPackageName(apkPath, False)
apkPackageVersion = GetApkVersion(apkPath) apkPackageVersion = GetApkVersion(apkPath)
apkChineseLabel = GetApkChineseLabel(apkPath) apkChineseLabel = GetApkChineseLabel(apkPath)
apkActivityName = GetApkActivityName(apkPath) apkActivityName = GetApkActivityName(apkPath)
@ -334,13 +337,6 @@ def SaveApkIcon(apkFilePath, iconSavePath)->"获取 apk 文件的图标":
print("Error, show defult icon") print("Error, show defult icon")
shutil.copy(programPath + "/defult.png", iconSavePath) shutil.copy(programPath + "/defult.png", iconSavePath)
#def SaveApkIcon(apkFilePath, iconSavePath):
# zip = zipfile.ZipFile(apkFilePath)
# iconData = zip.read(GetApkIconInApk(apkFilePath))
# with open(iconSavePath, 'w+b') as saveIconFile:
# saveIconFile.write(iconData)
def TextboxAddText1(message): def TextboxAddText1(message):
global textbox1 global textbox1
textbox1.configure(state=tk.NORMAL) textbox1.configure(state=tk.NORMAL)

View File

@ -4,7 +4,7 @@ Encoding=UTF-8
Exec=uengine-runner -ci %F Exec=uengine-runner -ci %F
GenericName=APK Install(UEngine) GenericName=APK Install(UEngine)
GenericName[zh_CN]=APK 安装UEngine GenericName[zh_CN]=APK 安装UEngine
Icon=/opt/apps/uengine-runner/icon.png Icon=/opt/apps/uengine-runner/runner.svg
MimeType=application/apk; MimeType=application/apk;
Name=APK Install(UEngine) Name=APK Install(UEngine)
Name[zh_CN]=APK 安装UEngine Name[zh_CN]=APK 安装UEngine