Compare commits

..

35 Commits
1.8.1 ... 1.8.3

Author SHA1 Message Date
2b99554e02 README 2022-12-18 19:18:36 +08:00
37340dd3e9 1.8.3 2022-12-18 19:17:04 +08:00
6a22b1c170 更换旧版的getxml 2022-12-18 18:53:21 +08:00
951f41d57e 1.8.3 2022-12-18 18:48:30 +08:00
33be2db48f 修复奇怪问题 2022-12-18 18:00:19 +08:00
1d7bd94908 修复部分无法正确获取程序中文名和 Activity 的问题 2022-12-14 22:11:50 +08:00
Allen
ee49dcb19e !5 README美化&文件名修改
Merge pull request !5 from oieryrn/main
2022-12-14 02:15:49 +00:00
ea813fcc37 更新Makefile文件 2022-12-04 19:33:06 +08:00
oieryrn
2485438303 update README.md.
Signed-off-by: oieryrn <oieryrn@163.com>
2022-11-29 04:53:07 +00:00
oieryrn
b5e7884913 美化README 2022-11-29 12:00:06 +08:00
oieryrn
cee4ab77e2 添加README中star与fork的tag 2022-11-29 11:44:38 +08:00
oieryrn
efacc353d7 添加README中star与fork的tag 2022-11-29 11:44:01 +08:00
oieryrn
144c030036 修正README和desktop文件名 2022-11-29 11:11:04 +08:00
b028bbd8fa 更新README 2022-11-29 08:12:01 +08:00
a5a06377a2 1.8.2complete 2022-11-28 22:25:09 +08:00
041f5bda39 Merge branch 'main' of https://gitee.com/gfdgd-xi/uengine-runner into main 2022-11-28 22:10:59 +08:00
ab3693c90a 1.9.0基本完成 2022-11-28 22:10:56 +08:00
a7595ff304 !3 update README.md.
Merge pull request !3 from oieryrn/N/A
2022-11-28 14:08:36 +00:00
777ff39f69 修复打包器无参数问题 2022-11-28 21:43:27 +08:00
oieryrn
ccfdf94342 update README.md.
抖音极速版没有官网,所以放了抖音官网下载
Hyperbowl是电脑游戏,如果是手机版应该是HyperBowl Classic,但没官网
另外在文件中的uengine-install (1).desktop是不是名字错了,应该是uengine-install.desktop吧...
2022-11-28 03:36:50 +00:00
70c687d862 !2 【轻量级 PR】:update README.md.
Merge pull request !2 from oieryrn/N/A
2022-11-28 03:04:42 +00:00
oieryrn
07d89f2605 update README.md.
加入了几个测试生成图标软件的地址

Signed-off-by: oieryrn <oieryrn@163.com>
2022-11-28 03:03:25 +00:00
gfdgd xi
501028ea30 Merge pull request #14 from BailPlus/main
修复Python主版本号判断时潜在的问题
2022-11-22 18:58:59 +08:00
Bail
fed7271ff4 修复Python主版本号判断时潜在的问题 2022-11-22 16:44:07 +08:00
34c3cd31d1 重新恢复uengine-installer For Ubuntu 2022-09-10 18:42:42 +08:00
1357a1be41 修复postrm 2022-09-10 18:33:31 +08:00
474babff87 修复'添加UEngine应用快捷方式出现问题'的问题 2022-09-10 18:29:35 +08:00
daa42d637c README 2022-09-03 22:23:07 +08:00
97b05ea056 增加Python判断 2022-09-03 19:20:12 +08:00
a9954f611b deb包提交 2022-09-03 18:40:25 +08:00
gfdgd xi
76d850b318 Merge pull request #11 from BailPlus/main
修复生成root镜像的bug
2022-09-03 18:30:31 +08:00
120041c2da 1.8.1-1初步 2022-09-03 18:25:18 +08:00
Bail
3a617e1bf3 Merge branch 'gfdgd-xi:main' into main 2022-09-03 16:50:42 +08:00
107a5c4396 修复依赖缺失问题 2022-09-03 09:34:09 +08:00
注意用户
56eaff9dfb Bail修改:
将以下5个函数的deepin-terminal的"-C"参数改为"-e",
解决了BuildRootUengineImage()函数未输入密码自动回车的bug
2022-08-30 22:06:56 +08:00
30 changed files with 772 additions and 976 deletions

5
Download.py Executable file
View File

@@ -0,0 +1,5 @@
#!/usr/bin/env python3
import sys
import base64
import requests
print(requests.get(base64.b64decode("aHR0cDovLzEyMC4yNS4xNTMuMTQ0L3VlbmdpbmUtcnVubmVyL0luc3RhbGwucGhwP1ZlcnNpb249").decode("utf-8") + sys.argv[1]).text)

View File

@@ -20,7 +20,7 @@ build:
cp -rv uengine-app-install new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/
cp -rv uengine_logo.svg new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/
cp -rv defult.svg new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/
cp -rv defult.png new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/
cp -rv runner.svg new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/
cp -rv root-uengine.sh new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/
cp -rv menu.svg new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/
@@ -31,14 +31,19 @@ build:
cp -rv api new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/
cp -rv Help new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/
cp -rv pkexec/* new-deb-build/usr/share/polkit-1/actions
dpkg -b new-deb-build com.gitee.uengine.runner.spark.deb
python3 RemovePycacheFile.py
cp -rv new-deb-build /tmp/uengine-runner-builder
sudo chown -R root:root /tmp/uengine-runner-builder
dpkg -b /tmp/uengine-runner-builder com.gitee.uengine.runner.spark.deb
sudo rm -rfv /tmp/uengine-runner-builder
install:
make build
echo "Install..."
sudo apt update
sudo dpkg -i com.gitee.uengine.runner.spark.deb ; true
sudo apt install -f
#sudo dpkg -i com.gitee.uengine.runner.spark.deb | true
#sudo apt install -f
sudo apt reinstall ./com.gitee.uengine.runner.spark.deb
depend:
sudo apt install python3 python3-tk python3-pip aapt \

454
README.md
View File

@@ -1,114 +1,158 @@
<p width=100px align="center"><img src="runner.svg"></p>
<h1 align="center">UEngine 运行器 1.8.1</h1>
<h1 align="center">UEngine 运行器 1.8.3</h1>
<hr>
<p align='center'><a href='https://gitee.com/gfdgd-xi/uengine-runner/stargazers'><img src='https://gitee.com/gfdgd-xi/uengine-runner/badge/star.svg?theme=dark' alt='star'></img></a>
<a href='https://gitee.com/gfdgd-xi/uengine-runner/members'><img src='https://gitee.com/gfdgd-xi/uengine-runner/badge/fork.svg?theme=dark' alt='fork'></img></a>
### 介绍
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;新版本Deepin/UOS发布后可以在应用商店安装部分官方已适配的安卓应用对爱好者来说不能自己安装APK软件包始终差点意思本程序可以为Deepin/UOS上的UEngine安卓运行环境安装自定义APK软件包并能发送安装的APK包启动菜单到桌面或系统菜单。
![image.png](https://storage.deepin.org/thread/202208302154473781_image.png)
测试平台UOS 家庭版 21.3.1deepin 20.6,UOS 专业版 1050
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;新版本Deepin/UOS发布后可以在应用商店安装部分官方已适配的安卓应用对爱好者来说不能自己安装APK软件包始终差点意思本程序可以为Deepin/UOS上的UEngine安卓运行环境安装自定义APK软件包并能发送安装的APK包启动菜单到桌面或系统菜单。
![图片.png](https://storage.deepin.org/thread/202212181918041904_图片.png)
测试平台UOS 家庭版 21.3.1deepin 20.8,UOS 专业版 1050
## 安装前必读
+ **UEngine 安装时会自动把要安装的 apk 删除**,如果这个 apk 文件非常重要请**拷贝一个备份版并安装这个备份版或者在程序设置里面选择“备份APK包然后在安装后自动拷贝原先目录”选项**
![image.png](https://storage.deepin.org/thread/202207271700517092_image.png)
+ **UEngine 安装时会自动把要安装的 apk 删除**,如果这个 apk 文件非常重要请**拷贝一个备份版并安装这个备份版或者在程序设置里面选择“备份APK包然后在安装后自动拷贝原先目录”选项**
![image.png](https://storage.deepin.org/thread/202207271700517092_image.png)
## 如何升级至最新版本
### 一、使用星火应用商店更新到最新版本
**1、打开星火应用商店并打开到对应的界面点击“升级”**
**1、打开星火应用商店并打开到对应的界面点击“升级”**
![image.png](https://storage.deepin.org/thread/202205220755222083_image.png)
**2、然后安装**
**2、然后安装**
![image.png](https://storage.deepin.org/thread/202205220756248090_image.png)
**3、结束**
### 二、通过源更新(需要添加星火应用商店源)
输入以下命令即可:
输入以下命令即可:
```bash
sudo apt update
sudo apt upgrade
```
![image.png](https://storage.deepin.org/thread/202205220758088497_image.png)
### 三、使用程序自带的更新程序更新
**1、打开 UEngine 运行器然后点击“关于”=>“检查更新”点击“更新更新过程中会关闭所有Python应用包括这个应用”**
**1、打开 UEngine 运行器然后点击“关于”=>“检查更新”点击“更新更新过程中会关闭所有Python应用包括这个应用**
![image.png](https://storage.deepin.org/thread/202205220759382269_image.png)
**2、输入密码进行更新**
**2、输入密码进行更新**
![image.png](https://storage.deepin.org/thread/202205220801175784_image.png)
**3、提示更新完毕即可**
**3、提示更新完毕即可**
![image.png](https://storage.deepin.org/thread/202205220801513371_image.png)
### 更新内容
#### V1.8.32022年12月18日
**※1、修复安装/打包程序时出现找不到图标的问题;**
**※2、修复部分无法正确获取程序中文名和 Activity 的问题;**
**※3、修复在运行器内打开打包器不会自动填充打包器 APK 路径;**
**※4、问题反馈新增论坛反馈入口。**
![图片.png](https://storage.deepin.org/thread/202212181918041904_图片.png)
#### V1.8.22022年11月28日
**※1、重新恢复 uengine-installer For Ubuntu**
**※2、修复 postrm 的问题**
**※3、修复“添加UEngine应用快捷方式出现问题”的问题**
**※4、修复打包器无参数问题**
**※5、打包器默认勾选“使用 uengine-dc 前缀”**
6、修复Python主版本号判断时潜在的问题By Bail
7、新增部分资源入口
![image.png](https://storage.deepin.org/thread/202211282224306611_image.png)
#### V1.8.1-12022年09月03日
**※1、修复缺失依赖 python3-matplotlib 导致程序无法开启的问题**
**※2、移除在 Ubuntu 上用于安装 UEngine 的安装工具**
**※3、解决了未输入密码自动回车的 bug**
#### V1.8.12022年08月30日
**※1、修复在 APK 详细信息中图标可能过大导致无法正常使用的问题**
**2、修复 APK 路径带空格无法正常安装的问题**
3、修复打包器打包的 APK 带下划线“_”无法正常打包的问题
4、修复打包器下方命令返回过多空白行的问题
5、修复程序生成的默认图标任然是旧版图标的问题
![image.png](https://storage.deepin.org/thread/202208302154473781_image.png)
**1、修复 APK 详细信息中图标可能过大导致无法正常使用的问题**
**※2、修复 APK 路径带空格无法正常安装的问题**
3、修复打包器打包的 APK 带下划线“_”无法正常打包的问题
4、修复打包器下方命令返回过多空白行的问题
5、修复程序生成的默认图标任然是旧版图标的问题
![image.png](https://storage.deepin.org/thread/202208302154473781_image.png)
#### V1.8.02022年07月27日
**※1、程序界面大部分由 Tkinter 转 PyQt5**
**2、添加了自动/手动配置 UEngine 窗口大小文件(自动需要在设置里手动开启,配置窗口的配置文件需要 Root**
**3、增加了安装/卸载失败后的提示**
**4、补回谢明名单**
**5、支持免密安装/卸载 APK**
6、pip 更换华为源,提升下载速度
7、新增主题功能
8、支持在安装 APK 后手动指定分类(手动指定需要在设置里手动开启)
**1、程序界面大部分由 Tkinter 转 PyQt5**
**2、添加了自动/手动配置 UEngine 窗口大小文件(自动需要在设置里手动开启,配置窗口的配置文件需要 Root**
**3、增加了安装/卸载失败后的提示**
**4、补回谢明名单**
**※5、支持免密安装/卸载 APK**
6、pip 更换华为源,提升下载速度
7、新增主题功能
8、支持在安装 APK 后手动指定分类(手动指定需要在设置里手动开启)
![image.png](https://storage.deepin.org/thread/202207271700065629_image.png)
#### V1.7.02022年07月08日暑假开始
**※1、新增暗黑主题**
**2、优化 deepin-terminal 在其它发行版显示奇奇怪怪的问题**
**3、修复 UEngine 安装脚本在安装时不让用户选择,直接默认 N 无法安装的问题**
4、新增设置 UEngine 代理的功能
5、将执行命令和打包器的返回输出从命令结束后显示输出内容改为实时显示内容
**1、新增暗黑主题**
**2、优化 deepin-terminal 在其它发行版显示奇奇怪怪的问题**
**※3、修复 UEngine 安装脚本在安装时不让用户选择,直接默认 N 无法安装的问题**
4、新增设置 UEngine 代理的功能
5、将执行命令和打包器的返回输出从命令结束后显示输出内容改为实时显示内容
![image.png](https://storage.deepin.org/thread/202207081157256904_image.png)
#### V1.6.22022年06月21日中考假期+即将期末考试)
**※1、优化了 UEngine 运行器的英语翻译**
**2、新增加了可以打开或关闭第三方应用安装的功能使用此功能后在UEngine里可以使用默认的APK安装程序安装应用此操作需要使用程序的Adb补丁**
**3、新增加了 UEngine 的 Ubuntu 安装程序**
**4、双包合一只保留了UOS打包标准可以从旧标准无缝升级推荐使用本程序的升级程序进行升级**
5、修复了本程序在 Ubuntu 上安装和卸载报错而无法继续的问题
6、优化帮助/关于窗口在高分辨率电脑上显示不全的问题
**1、优化了 UEngine 运行器的英语翻译**
**2、新增加了可以打开或关闭第三方应用安装的功能使用此功能后在UEngine里可以使用默认的APK安装程序安装应用此操作需要使用程序的Adb补丁**
**3、新增加了 UEngine 的 Ubuntu 安装程序**
**※4、双包合一只保留了UOS打包标准可以从旧标准无缝升级推荐使用本程序的升级程序进行升级**
5、修复了本程序在 Ubuntu 上安装和卸载报错而无法继续的问题
6、优化帮助/关于窗口在高分辨率电脑上显示不全的问题
![image.png](https://storage.deepin.org/thread/202206211816301171_image.png)
#### V1.6.12022年05月21日521
**※1、修复了打包 deb 包在 APK 的包名有大写时无法启动的问题**
**※2、提供新版本的 UEngine Root 镜像**
**※3、更新了 UEngine Root 的下载地址**
**※4、修复了本程序的“UEngine 键盘映射”无法启动的问题**
5、把构建 UEngine Root 镜像修改为多线程下载wget=>aria2
6、提供了 UEngine 运行器的 API可以从项目地址中获取
7、补上遗漏的项目参与者“星空露光”新加参与者
![截图_选择区域_20220521175308.png](https://storage.deepin.org/thread/202205211806261045_截图_选择区域_20220521175308.png)
![截图_选择区域_20220521175238.png](https://storage.deepin.org/thread/202205211806269003_截图_选择区域_20220521175238.png)
![截图_选择区域_20220521175156.png](https://storage.deepin.org/thread/202205211806255140_截图_选择区域_20220521175156.png)
![截图_tk_20220521175128.png](https://storage.deepin.org/thread/202205211806252353_截图_tk_20220521175128.png)
![截图_选择区域_20220521175342.png](https://storage.deepin.org/thread/202205211806254882_截图_选择区域_20220521175342.png)
**※1、修复了打包 deb 包在 APK 的包名有大写时无法启动的问题**
**※2、提供新版本的 UEngine Root 镜像**
**※3、更新了 UEngine Root 的下载地址**
**※4、修复了本程序的“UEngine 键盘映射”无法启动的问题**
5、把构建 UEngine Root 镜像修改为多线程下载wget=>aria2
6、提供了 UEngine 运行器的 API可以从项目地址中获取
7、补上遗漏的项目参与者“星空露光”新加参与者
![截图_选择区域_20220521175308.png](https://storage.deepin.org/thread/202205211806261045_截图_选择区域_20220521175308.png)
![截图_选择区域_20220521175238.png](https://storage.deepin.org/thread/202205211806269003_截图_选择区域_20220521175238.png)
![截图_选择区域_20220521175156.png](https://storage.deepin.org/thread/202205211806255140_截图_选择区域_20220521175156.png)
![截图_tk_20220521175128.png](https://storage.deepin.org/thread/202205211806252353_截图_tk_20220521175128.png)
![截图_选择区域_20220521175342.png](https://storage.deepin.org/thread/202205211806254882_截图_选择区域_20220521175342.png)
#### V1.6.0(开学版,开学前一天完成)
**※1、更换了新的图标已完成感谢[@星空露光](https://gitee.com/Cynorkyle)**
**2、支持程序的评分和查看分数详情的功能**
**3、修复了在安装奇奇怪怪的安装包如格式、标识不正确的时的快捷方式图标为空以及快捷方式文本的变化**
**4、添加更新功能可以自行升级到最新版本**
**5、新增程序帮助**
6、新填彩蛋在“关于”=>“关于”显示的窗口双击“关于”开启)
7、修复了“UEngine 打包器”前缀选项勾选设置不生效的问题
8、修复了“UEngine 打包器” 打包的安装包版本号带 V 无法打包的情况
**1、更换了新的图标已完成感谢[@星空露光](https://gitee.com/Cynorkyle)**
**2、支持程序的评分和查看分数详情的功能**
**3、修复了在安装奇奇怪怪的安装包如格式、标识不正确的时的快捷方式图标为空以及快捷方式文本的变化**
**4、添加更新功能可以自行升级到最新版本**
**※5、新增程序帮助**
6、新填彩蛋在“关于”=>“关于”显示的窗口双击“关于”开启)
7、修复了“UEngine 打包器”前缀选项勾选设置不生效的问题
8、修复了“UEngine 打包器” 打包的安装包版本号带 V 无法打包的情况
![1.6.0](https://storage.deepin.org/thread/202202122214208076_截图_选择区域_20220212221349.png)
#### 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、修复了在 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):
@@ -122,110 +166,127 @@ Traceback (most recent call last):
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)
**※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、精简用户界面合并安装和卸载输入框和浏览按钮等**
**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、部分窗口支持英语**
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、支持打包器打包的包名带前缀“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、添加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、初步支持键盘映射**
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、添加新版打包方式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)
**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、修复打包问题,防止部分用户安装出错的问题;**
**※2、修复了程序无法提取图标时可以提取默认图标使用;**
![1.3.1](https://storage.deepin.org/thread/202108121509217807_截图_选择区域_20210812150849.png)
#### V1.3.02021-08-08
**※1、修改了界面布局;**
**2、修复大多数新安装普通用户的路图标及启动菜单文件路径不存在导致安装APK报错的bugs;**
3、删除少量冗余代码调整代码顺序;
4、支持提取 apk 图标。
#### 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、调整界面布局及界面风格;
#### 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、增加了注释、删除部分冗余代码。
#### 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 打包错误。
#### 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.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 安装时会卡住的问题
@@ -234,106 +295,121 @@ FileNotFoundError: [Errno 2] No such file or directory: '/home/gfdgd_xi/.local/s
![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. 安装所需依赖
按下 `<kbd>`Ctrl`</kbd>`+`<kbd>`Alt`</kbd>`+`<kbd>`T`</kbd>` 打开终端,按以下内容操作:
1. 安装所需依赖
```bash
sudo apt install make
```
2. 下载本程序
2. 下载本程序
```bash
git clone https://gitee.com/gfdgd-xi/uengine-runner.git
```
3. 运行本程序
3. 运行本程序
```bash
cd uengine-runner
make run
```
如果你想要安装到系统,只需要输入:
如果你想要安装到系统,只需要输入:
```bash
make install
```
即可
即可
### 使用说明
1、需要你有使用 root 权限的能力;
2、需要安装 UEngine 才能使用UOS建议在商店安装一个安卓应用让系统自动安装 UEngine 及相关的依赖包;
3、提取 apk 图标的 apk 路径以“安装 apk”那栏为准;
4、如果报错是有关产生 .deksotp 文件有关,一般可以打开程序列表运行。如果想要连接其他手机,请使用 1.2.0 以前的版本,可以使用 adb 连接。
1、需要你有使用 root 权限的能力;
2、需要安装 UEngine 才能使用UOS建议在商店安装一个安卓应用让系统自动安装 UEngine 及相关的依赖包;
3、提取 apk 图标的 apk 路径以“安装 apk”那栏为准;
4、如果报错是有关产生 .deksotp 文件有关,一般可以打开程序列表运行。如果想要连接其他手机,请使用 1.2.0 以前的版本,可以使用 adb 连接。
### 故障排除
提 issue 最好,当然有些问题自己无法解决,请大佬 push 一下
如果出现故障,尝试终端运行,如果是可以自行解决的问题,就**自行解决**,如果可以就**提 issues 并提供解决方案**,不行就**提 isscue 并提供程序和终端报错以及程序版本**
### 已知问题
<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)
<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 | 忘了 |
| 其他待测试…… | 其他待测试…… |
| 程序 | 下载链接 |
| :--------------------: | :------------------------------------: |
| 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 | http://www.xiaojump.com/ |
| 其他待测试…… | 其他待测试…… |
**注意:提取不出图标不代表未安装成功!**
### 贡献
<p align="center"><img src='https://bbs.deepin.org/assets/image/raccoon/blush.gif'></p>
非常欢迎大家的贡献
<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 |
| 星空露光 | https://gitee.com/Cynorkyle |
| 开发者 | 邮箱 |
| :--------------------------: | :----------------------------: |
| gfdgd xi | 3025613752@qq.com |
| actionchen | 917981399@qq.com |
| 柚子 | https://gitee.com/Limexb |
| 星空露光 | https://gitee.com/Cynorkyle |
| 为什么您不喜欢熊出没和阿布呢 | https://weibo.com/u/7755040136 |
### 相关项目
| 项目名称 | 项目地址 |
| :-: | :-:|
| uengine-installer | https://gitee.com/Maicss/uengine-installer |
### 相关项目
| 项目名称 | 项目地址 |
| :----------------: | :--------------------------------------------: |
| 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 |
| Root UEngine | https://gitee.com/Limexb/root-uengine |
### UEngine 运行器的部分技术介绍
可见https://www.52pojie.cn/thread-1672077-1-1.html
可见https://www.52pojie.cn/thread-1672077-1-1.html
### 附测试生成图标无问题列表:
**至于能不能用就不测试了,这暂时不是重点**
**现在新加了评分功能,就看大家的评分了!**
| 程序 | 下载链接 |
|:-:|:-:|
| 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
**至于能不能用就不测试了,这暂时不是重点**
**现在新加了评分功能,就看大家的评分了!**
| 程序 | 下载链接 |
| :-----------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------: |
| QQ 全家桶完整版、极速版、Android Pad 版) | https://im.qq.com |
| TIM | https://office.qq.com/download.html |
| 微信 | https://weixin.qq.com |
| 百度翻译 | https://fanyi.baidu.com/appdownload/download.html |
| 百度网盘 | https://pan.baidu.com |
| 腾讯课堂 | https://ke.qq.com/download/app.html |
| 抖音极速版 | https://www.douyin.com/downloadpage/app |
| 豌豆荚 | https://www.wandoujia.com/ |
| 小猿口算 | http://kousuan.yuanfudao.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-Now

13
RemovePycacheFile.py Executable file
View File

@@ -0,0 +1,13 @@
#!/usr/bin/env python3
import os
def Remove(path):
for i in os.listdir(path):
nowPath = f"{path}/{i}"
if os.path.isdir(nowPath):
if i == "__pycache__":
os.system(f"rm -rfv '{nowPath}'")
else:
Remove(nowPath)
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
debPath = f"{programPath}/new-deb-build"
Remove(debPath)

Binary file not shown.

Binary file not shown.

177
getxmlimg.py-bak Executable file
View File

@@ -0,0 +1,177 @@
import PIL.Image as Image
import PIL.ImageDraw as ImageDraw
import xml.etree.ElementTree as ET
import zipfile
import subprocess
import re
#!/usr/bin/env python
# -*- coding: utf-8 -*-
'''import xml.etree.ElementTree as ET
def xml2svg(xml_file):
tree = ET.parse(xml_file)
root = tree.getroot()
svg_str = '<svg>'
for child in root:
svg_str += '<' + child.tag
for attr in child.attrib:
svg_str += ' ' + attr + '="' + child.attrib[attr] + '"'
svg_str += '>'
for sub_child in child:
svg_str += '<' + sub_child.tag
for attr in sub_child.attrib:
svg_str += ' ' + attr + '="' + sub_child.attrib[attr] + '"'
svg_str += '/>'
svg_str += '</' + child.tag + '>'
svg_str += '</svg>'
return svg_str'''
class getsavexml():
'''def xml2svg(xml_file):
tree = ET.parse(xml_file)
root = tree.getroot()
svg_str = '<svg>'
for child in root:
svg_str += '<' + child.tag
for attr in child.attrib:
svg_str += ' ' + attr + '="' + child.attrib[attr] + '"'
svg_str += '>'
for sub_child in child:
svg_str += '<' + sub_child.tag
for attr in sub_child.attrib:
svg_str += ' ' + attr + '="' + sub_child.attrib[attr] + '"'
svg_str += '/>'
svg_str += '</' + child.tag + '>'
svg_str += '</svg>'
return svg_str'''
def savexml(self,apkFilePath,xmlpath,iconSavePath):
cmddumpid = "aapt dump xmltree "+ apkFilePath + " " + xmlpath
print(cmddumpid)
xmltree = subprocess.getoutput(cmddumpid)
xmls = xmltree.splitlines()
# find strs ,print next line
def FindStrs(lines,strs):
i=0
while i < len(lines):
if re.search(strs,lines[i]):
tmpstr = lines[i+1]
i += 1
Resultstr = tmpstr.split(":")[-1].split("=")[-1].split("0x")[-1]
return Resultstr
else:
i += 1
#从apk的信息中获取前后景图片的ID号
backimgid = FindStrs(xmls,"background")
foreimgid = FindStrs(xmls,"foreground")
print(backimgid)
print(foreimgid)
# 直接从apk resource文件获取前后两层图片路径及ID字符串
resource = subprocess.getoutput("aapt dump --values resources " + apkFilePath + "| grep -iE -A1 " + "\"" + backimgid + "|" + foreimgid + "\"")
resourcelines = resource.splitlines()
print(resourcelines)
# 从过滤出的字符串中获取所有相同ID的图片路径
def Findpicpath(lines,imgid):
i=0
Resultstr = []
while i < len(lines):
if re.search(imgid,lines[i]) and re.search("string8",lines[i+1]) :
print(lines[i+1])
tmpstr = lines[i+1].replace("\"","")
i += 1
Resultstr.append(tmpstr.split()[-1])
else:
i += 1
return Resultstr
#获取所有带前后图片ID的图片路径相同背景或者前景的图片ID但分辨率不一样
backimgs = Findpicpath(resourcelines,backimgid)
foreimgs = Findpicpath(resourcelines,foreimgid)
print(backimgs)
print(foreimgs)
#获取分辨率最高的图片路径
def getmaxsize(imgs):
j = 0
size=(0,0)
zipapk = zipfile.ZipFile(apkFilePath)
imgpath = ""
while j < len(imgs):
print(imgs[j])
img = Image.open(zipapk.open(imgs[j]))
print(imgs[j])
print(img.size)
if size < img.size:
size = img.size
imgpath = imgs[j]
j += 1
return imgpath
# 获取到文件列表后,进行比较分辨率,选取分辨率最高的张图片
# /home/gfdgd_xi/Downloads/MT2.12.2.apk
try:
iconbackpath = getmaxsize(backimgs)
iconforepath = getmaxsize(foreimgs)
except:
if len(backimgs):
iconbackpath = backimgs[0]
else:
iconbackpath = ""
if len(foreimgs):
iconforepath = foreimgs[0]
else:
iconforepath = ""
print(iconbackpath, iconforepath)
#从APK文件获取最终图片
zipapk = zipfile.ZipFile(apkFilePath)
try:
iconback = zipapk.open(iconbackpath)
except:
iconback = None
try:
iconfore = zipapk.open(iconforepath)
except:
iconfore = None
# 叠加图片mask 设置前景为蒙版
try:
iconbackimg = Image.open(iconback).convert("RGBA")
except:
pass
iconforeimg = Image.open(iconfore).convert("RGBA")
iconbackimg.paste(iconforeimg,mask=iconforeimg)
# 圆角图片函数,网上拷贝的
def circle_corner(img, radii): #把原图片变成圆角,这个函数是从网上找的,原址 https://www.pyget.cn/p/185266
"""
圆角处理
:param img: 源图象。
:param radii: 半径30。
:return: 返回一个圆角处理后的图象。
"""
# 画圆用于分离4个角
circle = Image.new('L', (radii * 2, radii * 2), 0) # 创建一个黑色背景的画布
draw = ImageDraw.Draw(circle)
draw.ellipse((0, 0, radii * 2, radii * 2), fill=255) # 画白色圆形
# 原图
img = img.convert("RGBA")
w, h = img.size
# 画4个角将整圆分离为4个部分
alpha = Image.new('L', img.size, 255)
alpha.paste(circle.crop((0, 0, radii, radii)), (0, 0)) # 左上角
alpha.paste(circle.crop((radii, 0, radii * 2, radii)), (w - radii, 0)) # 右上角
alpha.paste(circle.crop((radii, radii, radii * 2, radii * 2)), (w - radii, h - radii)) # 右下角
alpha.paste(circle.crop((0, radii, radii, radii * 2)), (0, h - radii)) # 左下角
# alpha.show()
img.putalpha(alpha) # 白色区域透明可见,黑色区域不可见
return img
# 圆角半径1/8边长,保存icon图片
w,h = iconbackimg.size
iconimg = circle_corner(iconbackimg,int(w/8))
iconimg.save(iconSavePath)

View File

@@ -5,7 +5,7 @@
"https://github.com/gfdgd-xi/uengine-runner",
"https://gitlink.org.cn/gfdgd_xi/uengine-runner"
],
"Version": "1.8.1",
"Version": "1.8.3",
"System": "Linuxdeepin/UOS",
"Tips": [
"更多可见https://gitee.com/gfdgd-xi/uengine-runner/wikis 或程序的更多帮助",
@@ -23,6 +23,26 @@
"5、如果想要使用adb连接UEngine或其他手机请使用 1.2.0 以前的版本。如需连接UEngine请安装adb补丁"
],
"Update": [
"<b>V1.8.3</b>",
"※1、修复安装/打包程序时出现找不到图标的问题;",
"※2、修复部分无法正确获取程序中文名和 Activity 的问题;",
"※3、修复在运行器内打开打包器不会自动填充打包器 APK 路径;",
"※4、问题反馈新增论坛反馈入口。",
"",
"<b>V1.8.2</b>",
"※1、重新恢复 uengine-installer For Ubuntu",
"※2、修复 postrm 的问题",
"※3、修复“添加UEngine应用快捷方式出现问题”的问题",
"※4、修复打包器无参数问题",
"※5、打包器默认勾选“使用 uengine-dc 前缀”",
"6、修复Python主版本号判断时潜在的问题By Bail",
"7、新增部分资源入口",
"",
"<b>V1.8.1-1</b>",
"※1、修复缺失依赖 python3-matplotlib 导致程序无法开启的问题",
"※2、移除在 Ubuntu 上用于安装 UEngine 的安装工具",
"※3、解决了未输入密码自动回车的 bug",
"",
"<b>V1.8.1</b>",
"※1、修复在 APK 详细信息中图标可能过大导致无法正常使用的问题",
"※2、修复 APK 路径带空格无法正常安装的问题",
@@ -185,25 +205,28 @@
"11、deepin 终端",
"……"
],
"Time": "2022年08月30日",
"Time": "2022年12月18日",
"Contribute": [
"<b>感谢以下用户提供的问题、建议、图标、代码等,如果有遗漏,请及时与开发者联系添加,以及如果侵犯到您的合法权益,也及时与开发者联系:</p>",
"<hr>",
"感谢 麻木法师1312580754 在星火应用商店QQ交流群展示的接口及其原理",
"感谢 actionchen917981399@qq.com 提供了新版页面布局1.3.0 ~ 最新版本以及布局代码1.3.0 ~ 1.7.0",
"感谢 柚子https://gitee.com/Limexb 提供了 UEngine 构建 Root 镜像脚本",
"感谢 星空露光https://gitee.com/Cynorkyle 制作了 UEngine 新版图标和安装应用时能选择应用分类的建议",
"感谢 shenmojifengshenmo@outlook.com 反馈了许多程序的问题以及提供了 UEngine 在 Ubuntu 上的安装脚本",
"感谢 deserthttps://gitee.com/desert741 提供了给软件增加启动成功后自动调整分辨率的功能的建议",
"感谢 云思浮https://gitee.com/foresee_io 反馈的 1.3.0 依赖缺失问题",
"感谢 miaoyshttps://bbs.deepin.org/user/271467、zccrshttps://bbs.deepin.org/user/277780 等用户反馈希望程序能和与系统 DTK 主题协调的建议",
"感谢 jiutian123https://bbs.deepin.org/user/258825 反馈的 1.5.2、1.5.3 存在问题",
"感谢 kero990https://bbs.deepin.org/user/277932 反馈的 README 表示不清的问题",
"感谢 wanghttps://gitee.com/wang1279476881 反馈的 1.6.0 左键打不开 “安装与卸载APK”和打包时 APK 版本号开头带 V 无法正常打包的问题",
"感谢 通天灵宝https://bbs.deepin.org/user/137230、wuhaiou123https://bbs.chinauos.com/zh/user/309117 反馈的 图标生成错误导致无法生成 .desktop 文件的问题",
"感谢 潜伏https://bbs.chinauos.com/zh/user/303339 反馈的右键支持安装/卸载的建议",
"感谢 z***g@gmx.dehttps://bbs.chinauos.com/zh/user/312017 反馈的 UEngine 更新后 uengine-launch.sh 的社区版检测问题",
"参考 忘记、过去https://bbs.deepin.org/user/154730 的帖子《如何更优雅地使用 pkexec》https://bbs.deepin.org/post/202966",
"感谢 U+解答组们 反馈的 1.8.0 带路径无法正常安装 APK 的问题"
"感谢 Bail、shenmo、Allen 反馈的图标无法正常拷贝的问题;",
"感谢 Bail Pr 修复Python主版本号判断时潜在的问题的补丁",
"感谢 麻木法师1312580754 在星火应用商店QQ交流群展示的接口及其原理",
"感谢 Bailhttps://github.com/BailPlus 修复的函数未输入密码自动回车的 bug",
"感谢 actionchen917981399@qq.com 提供了新版页面布局1.3.0 ~ 最新版本以及布局代码1.3.0 ~ 1.7.0",
"感谢 柚子https://gitee.com/Limexb 提供了 UEngine 构建 Root 镜像脚本;",
"感谢 星空露光https://gitee.com/Cynorkyle 制作了 UEngine 新版图标和安装应用时能选择应用分类的建议;",
"感谢 shenmojifengshenmo@outlook.com 反馈了许多程序的问题以及提供了 UEngine 在 Ubuntu 上的安装脚本;",
"感谢 deserthttps://gitee.com/desert741 提供了给软件增加启动成功后自动调整分辨率的功能的建议;",
"感谢 云思浮https://gitee.com/foresee_io 反馈的 1.3.0 依赖缺失问题",
"感谢 miaoyshttps://bbs.deepin.org/user/271467、zccrshttps://bbs.deepin.org/user/277780 等用户反馈希望程序能和与系统 DTK 主题协调的建议;",
"感谢 jiutian123https://bbs.deepin.org/user/258825 反馈的 1.5.2、1.5.3 存在问题",
"感谢 kero990https://bbs.deepin.org/user/277932 反馈的 README 表示不清的问题;",
"感谢 wanghttps://gitee.com/wang1279476881 反馈的 1.6.0 左键打不开 “安装与卸载APK”和打包时 APK 版本号开头带 V 无法正常打包的问题",
"感谢 通天灵宝https://bbs.deepin.org/user/137230、wuhaiou123https://bbs.chinauos.com/zh/user/309117 反馈的 图标生成错误导致无法生成 .desktop 文件的问题;",
"感谢 潜伏https://bbs.chinauos.com/zh/user/303339 反馈的右键支持安装/卸载的建议;",
"感谢 z***g@gmx.dehttps://bbs.chinauos.com/zh/user/312017 反馈的 UEngine 更新后 uengine-launch.sh 的社区版检测问题;",
"参考 忘记、过去https://bbs.deepin.org/user/154730 的帖子《如何更优雅地使用 pkexec》https://bbs.deepin.org/post/202966",
"感谢 U+解答组们 反馈的 1.8.0 带空格路径无法正常安装 APK 的问题。"
]
}
}

View File

@@ -20,6 +20,7 @@ import numpy
import base64
import shutil
import zipfile
import platform
import requests
import traceback
import threading
@@ -36,6 +37,18 @@ import PyQt5.QtCore as QtCore
import PyQt5.QtWidgets as QtWidgets
from getxmlimg import getsavexml
def PythonLower():
app = QtWidgets.QApplication(sys.argv)
QtWidgets.QMessageBox.critical(None, "错误", "Python 至少需要 3.6 及以上版本,目前版本:" + platform.python_version() + "")
sys.exit(1)
# Python 版本检测,因为 f-string 格式化要至少 Python 3.6 及以上的版本,所以需要检测
# 判断主版本号
if sys.version_info[0] < 3:
PythonLower()
if sys.version_info[1] < 6:
PythonLower()
class UninstallProgram(QtCore.QThread):
info = QtCore.pyqtSignal(str)
error = QtCore.pyqtSignal(str)
@@ -398,6 +411,7 @@ def GetApkActivityName(apkFilePath: "apk 所在路径")->"获取 apk Activity":
line = line.replace("label=", "")
line = line.replace("icon=", "")
return line
return f"{GetApkPackageName(apkFilePath)}.Main"
# 获取 apk 包名
def GetApkPackageName(apkFilePath: "apk 所在路径")->"获取 apk 包名":
@@ -411,23 +425,29 @@ def GetApkPackageName(apkFilePath: "apk 所在路径")->"获取 apk 包名":
line = line.replace(" ", "")
return line
'''
Bail修改
将以下5个函数的deepin-terminal的"-C"参数改为"-e"
解决了BuildRootUengineImage()函数未输入密码自动回车的bug
'''
def InstallRootUengineImage():
if not os.path.exists:
os.mkdir("/tmp/uengine-runner")
write_txt("/tmp/uengine-runner/install.sh", "sudo dpkg -i /tmp/uengine-runner/u*.deb\nsudo apt install -f")
threading.Thread(target=os.system, args=[f"'{programPath}/launch.sh' deepin-terminal -C \"wget -P '/tmp/uengine-runner' 'https://hub.fastgit.xyz/gfdgd-xi/uengine-runner/releases/download/U1.2.15/uengine-android-image_1.2.15_amd64.deb' && pkexec bash '/tmp/uengine-runner/install.sh'\""]).start()
threading.Thread(target=os.system, args=[f"'{programPath}/launch.sh' deepin-terminal -e \"wget -P '/tmp/uengine-runner' 'https://hub.fastgit.xyz/gfdgd-xi/uengine-runner/releases/download/U1.2.15/uengine-android-image_1.2.15_amd64.deb' && pkexec bash '/tmp/uengine-runner/install.sh'\""]).start()
def UengineUbuntuInstall():
threading.Thread(target=os.system, args=[f"'{programPath}/launch.sh' deepin-terminal -C \"bash '{programPath + '/uengine-installer'}'\""]).start()
threading.Thread(target=os.system, args=[f"'{programPath}/launch.sh' deepin-terminal -e bash '{programPath + '/uengine-installer'}'"]).start()
def UbuntuInstallUengine():
threading.Thread(target=os.system, args=[f"'{programPath}/launch.sh' deepin-terminal -C \"bash '{programPath + '/uengine-installer'}'\""]).start()
threading.Thread(target=os.system, args=[f"'{programPath}/launch.sh' deepin-terminal -e bash '{programPath + '/uengine-installer'}'"]).start()
def BuildRootUengineImage():
threading.Thread(target=os.system, args=[f"'{programPath}/launch.sh' deepin-terminal -C \"bash '{programPath}/root-uengine.sh'\""]).start()
threading.Thread(target=os.system, args=[f"'{programPath}/launch.sh' deepin-terminal -e bash '{programPath}/root-uengine.sh'"]).start()
def ReinstallUengineImage():
threading.Thread(target=os.system, args=[f"'{programPath}/launch.sh' deepin-terminal -e ''pkexec apt reinstall uengine-android-image -y"]).start()
threading.Thread(target=os.system, args=[f"'{programPath}/launch.sh' deepin-terminal -e pkexec apt reinstall uengine-android-image -y"]).start()
# 生成 uengine 启动文件到桌面
def BuildUengineDesktop(packageName: "软件包名", activityName: "activity", showName: "显示名称", iconPath: "程序图标所在目录", savePath:".desktop 文件保存路径", choose="")->"生成 uengine 启动文件到桌面":
@@ -464,11 +484,17 @@ Type=Application
# 获取软件的中文名称
def GetApkChineseLabel(apkFilePath)->"获取软件的中文名称":
info = GetApkInformation(apkFilePath)
name = None
for line in info.split('\n'):
if "application-label-zh:" in line:
line = line.replace("application-label-zh:", "")
line = line.replace("'", "")
return line
if "application-label:" in line:
line = line.replace("application-label:", "")
line = line.replace("'", "")
return line
name = line
return name
# 保存apk图标
def SaveApkIcon(apkFilePath, iconSavePath)->"保存 apk 文件的图标":
@@ -661,7 +687,7 @@ def CleanAllUengineDesktopLink():
# 打开 uengine 应用打包器
def OpenUengineDebBuilder():
threading.Thread(target=os.system, args=[programPath + "/uengine-apk-builder"]).start()
threading.Thread(target=os.system, args=[f"'{programPath}/uengine-apk-builder' '{ComboInstallPath.currentText()}'"]).start()
# 打开 uengine 根目录
def OpenUengineRootData():
@@ -1367,18 +1393,18 @@ class AddNewUengineDesktopLink():
# 添加快捷方式
def SaveDesktopLink():
try:
if os.path.exists("{}/.local/share/applications/uengine/{}.desktop".format(get_home(), packageName.get())):
if os.path.exists("{}/.local/share/applications/uengine/{}.desktop".format(get_home(), packageName.text())):
if QtWidgets.QMessageBox.question(widget, "提示", "文件已存在,是否要覆盖?") == QtWidgets.QMessageBox.No:
return
if not os.path.exists("{}/.local/share/icons/hicolor/256x256/apps/".format(get_home())):
os.makedirs("{}/.local/share/icons/hicolor/256x256/apps/".format(get_home()))
global activityName
iconSavePath = "{}/.local/share/icons/hicolor/256x256/apps/{}.png".format(get_home(), packageName.get())
iconSavePath = "{}/.local/share/icons/hicolor/256x256/apps/{}.png".format(get_home(), packageName.text())
shutil.copy(programPath + "/defult.png", iconSavePath)
BuildUengineDesktop(packageName.get(), activityName, packageName.get(), iconSavePath,
"{}/.local/share/applications/uengine/{}.desktop".format(get_home(), packageName.get()))
BuildUengineDesktop(packageName.get(), activityName, packageName.get(), iconSavePath,
"{}/{}.desktop".format(get_desktop_path(), packageName.get()))
BuildUengineDesktop(packageName.text(), activityName, packageName.text(), iconSavePath,
"{}/.local/share/applications/uengine/{}.desktop".format(get_home(), packageName.text()))
BuildUengineDesktop(packageName.text(), activityName, packageName.text(), iconSavePath,
"{}/{}.desktop".format(get_desktop_path(), packageName.text()))
AddNewUengineDesktopLink.SaveHistory()
QtWidgets.QMessageBox.information(widget, "提示", "创建完毕!")
except:
@@ -1390,13 +1416,13 @@ class AddNewUengineDesktopLink():
def DelDesktopLink():
try:
global packageName
if not os.path.exists("{}/.local/share/applications/uengine/{}.desktop".format(get_home(), packageName.get())):
if not os.path.exists("{}/.local/share/applications/uengine/{}.desktop".format(get_home(), packageName.text())):
QtWidgets.QMessageBox.critical(widget, "错误", "此包名对应的 UEngine 桌面快捷方式不存在!")
return
if QtWidgets.QMessageBox.warning(widget, "警告", "你确定要删除吗?删除后将无法恢复!", QtWidgets.QMessageBox.Ok | QtWidgets.QMessageBox.Cancel, QtWidgets.QMessageBox.Cancel) == QtWidgets.QMessageBox.Cancel:
return
try:
os.remove("{}/.local/share/applications/uengine/{}.desktop".format(get_home(), packageName.get()))
os.remove("{}/.local/share/applications/uengine/{}.desktop".format(get_home(), packageName.text()))
AddNewUengineDesktopLink.SaveHistory()
QtWidgets.QMessageBox.information(widget, "提示", "已删除")
except:
@@ -1659,7 +1685,10 @@ if not os.path.exists("/usr/bin/uengine"):
os.system(f"'{programPath}/launch.sh' deepin-terminal -C \"pkexec apt install uengine -y\"")
sys.exit(0)
# 非 Deepin/UOS 用户
# 因为安装器出现问题,所以废弃
else:
#QtWidgets.QMessageBox.critical(None, "错误", "请安装 UEngine 后继续")
#sys.exit(0)
if QtWidgets.QMessageBox.question(None, "提示", "您的电脑没有安装 UEngine是否安装 UEngine 以便更好的使用\n这里将会使用 shenmo 提供的脚本进行安装\n安装完后重新启动该程序即可\n提示:无法保证此安装脚本安装的 UEngine 可以使用") == QtWidgets.QMessageBox.Yes:
os.system(f"'{programPath}/launch.sh' deepin-terminal -C \"bash '{programPath}/uengine-installer'\"")
sys.exit(0)
@@ -1820,6 +1849,7 @@ uengineData = uengine.addMenu(langFile[lang]["Main"]["MainWindow"]["Menu"][2]["M
uengine.addAction(uengineDeleteUengineCheck)
uengine.addAction(uengineReinstall)
uengineRoot = uengine.addMenu(langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][11]["Name"])
#uengineUbuntuInstall.setDisabled(True)
# 绑定信号
uengineAllowOrDisallowUpdateAndroidApp.triggered.connect(AllowOrDisallowUpdateAndroidApp)
uengineSetHttpProxy.triggered.connect(SetHttpProxy)
@@ -1902,12 +1932,18 @@ uengineBuildRootUengineImage.triggered.connect(BuildRootUengineImage)
uengineReinstallUengineImage.triggered.connect(ReinstallUengineImage)
helpOpenProgramUrl = QtWidgets.QAction(langFile[lang]["Main"]["MainWindow"]["Menu"][3]["Menu"][0])
makerWebsize = QtWidgets.QAction("作者个人站")
helpForum = QtWidgets.QAction("程序论坛")
uengineRunnerSearch = QtWidgets.QAction("查询指定程序在 UEngine 的运行情况")
helpUengineRunnerBugUpload = QtWidgets.QAction(langFile[lang]["Main"]["MainWindow"]["Menu"][3]["Menu"][2])
helpShowHelp = QtWidgets.QAction(langFile[lang]["Main"]["MainWindow"]["Menu"][3]["Menu"][4])
helpRunnerUpdate = QtWidgets.QAction(langFile[lang]["Main"]["MainWindow"]["Menu"][3]["Menu"][3])
helpAbout = QtWidgets.QAction(langFile[lang]["Main"]["MainWindow"]["Menu"][3]["Menu"][1])
helpAboutQt = QtWidgets.QAction(langFile[lang]["Main"]["MainWindow"]["Menu"][3]["Menu"][5])
help.addAction(helpOpenProgramUrl)
help.addAction(uengineRunnerSearch)
help.addAction(makerWebsize)
help.addAction(helpForum)
help.addAction(helpUengineRunnerBugUpload)
help.addAction(helpShowHelp)
help.addAction(helpRunnerUpdate)
@@ -1919,6 +1955,9 @@ hm1.addAction(hm1_1)
hm1_1.triggered.connect(lambda: webbrowser.open_new_tab("https://gitee.com/gfdgd-xi/deep-wine-runner"))
# 绑定信号
helpOpenProgramUrl.triggered.connect(OpenProgramURL)
uengineRunnerSearch.triggered.connect(lambda: webbrowser.open_new_tab("https://gfdgd-xi.github.io/uengine-runner-info/"))
makerWebsize.triggered.connect(lambda: webbrowser.open_new_tab("https://gfdgd-xi.github.io"))
helpForum.triggered.connect(lambda: webbrowser.open_new_tab("https://gfdgdxi.flarum.cloud/"))
helpUengineRunnerBugUpload.triggered.connect(UengineRunnerBugUpload)
helpShowHelp.triggered.connect(ShowHelp)
helpRunnerUpdate.triggered.connect(UpdateWindow.ShowWindow)
@@ -1932,4 +1971,4 @@ window.setWindowTitle(title)
window.show()
window.setWindowIcon(QtGui.QIcon(iconPath))
window.setFixedSize(window.frameSize().width(), window.frameSize().height())
sys.exit(app.exec_())
sys.exit(app.exec_())

View File

@@ -1,19 +1,18 @@
Package: com.gitee.uengine.runner.spark
Source: com.gitee.uengine.runner.spark
Replaces: spark-uengine-runner, com.gitee.uengine.runner.spark.ubuntu
Version: 1.8.1
Version: 1.8.3
Architecture: all
Section: utils
Installed-Size: 1600
Maintainer: gfdgd xi <3025613752@qq.com>, actionchen<917981399@qq.com>, 柚子<https://gitee.com/Limexb>, 为什么您不喜欢熊出没和阿布呢<https://weibo.com/u/7755040136>, 星空露光<https://gitee.com/Cynorkyle>, shenmo<jifengshenmo@outlook.com>
Depends: python3, python3-tk, python3-pip, aapt, python3-setuptools, deepin-terminal, curl, python3-pil, python3-requests, adb, fonts-noto-cjk, python3-numpy, wget, inotify-tools, aria2, python3-pyqt5
Recommends: python3-matplotlib, uengine, deepin-elf-verify (>= 0.0.16.7-1)
Installed-Size: 1544
Maintainer: gfdgd xi <3025613752@qq.com>
Depends: python3, python3-tk, python3-pip, aapt, python3-setuptools, deepin-terminal, curl, python3-pil, python3-requests, adb, fonts-noto-cjk, python3-numpy, wget, inotify-tools, aria2, python3-pyqt5, python3-matplotlib, python3-urllib3
Recommends: uengine, deepin-elf-verify (>= 0.0.16.7-1)
Priority: optional
Conflicts: spark-uengine-apk-builder, com.gitee.uengine.runner.spark.ubuntu
Homepage: [https://gitee.com/gfdgd-xi/uengine-runner, https://github.com/gfdgd-xi/uengine-runner, https://www.gitlink.org.cn/gfdgd_xi/uengine-runner]
Description: UEngine 运行器1.8.1 更新内容:
※1、修复在 APK 详细信息中图标可能过大导致无法正常使用的问题
※2、修复 APK 路径带空格无法正常安装的问题
3、修复打包器打包 APK 带下划线“_”无法正常打包的问题
4、修复打包器下方命令返回过多空白行的问题
开发/参与者gfdgd xi <3025613752@qq.com>, actionchen<917981399@qq.com>, 柚子<https://gitee.com/Limexb>, 为什么您不喜欢熊出没和阿布呢<https://weibo.com/u/7755040136>, 星空露光<https://gitee.com/Cynorkyle>, shenmo<jifengshenmo@outlook.com>
Homepage: https://gitee.com/gfdgd-xi/uengine-runner
Description: UEngine 运行器1.8.3 更新内容:
※1、修复安装/打包程序时出现找不到图标的问题
※2、修复部分无法正确获取程序中文名和 Activity 的问题
3、修复在运行器内打开打包器不会自动填充打包 APK 路径
4、问题反馈新增论坛反馈入口

View File

@@ -1,9 +1,11 @@
#!/bin/sh
# 使用 pip 安装所需库
echo 安装组件
python3 -m pip install --upgrade pip --trusted-host https://repo.huaweicloud.com -i https://repo.huaweicloud.com/repository/pypi/simple
python3 -m pip install --upgrade ttkthemes --trusted-host https://repo.huaweicloud.com -i https://repo.huaweicloud.com/repository/pypi/simple
python3 -m pip install --upgrade pyautogui --trusted-host https://repo.huaweicloud.com -i https://repo.huaweicloud.com/repository/pypi/simple
python3 -m pip install --upgrade keyboard --trusted-host https://repo.huaweicloud.com -i https://repo.huaweicloud.com/repository/pypi/simple
echo 执行完成
# 建立软链接
ln -s /opt/apps/com.gitee.uengine.runner.spark/files/uengine-runner /usr/bin/uengine-runner
ln -s /opt/apps/com.gitee.uengine.runner.spark/files/uengine-apk-builder /usr/bin/uengine-apk-builder
@@ -21,4 +23,4 @@ ln -s /opt/apps/com.gitee.uengine.runner.spark/files/uengine-runner-applist-laun
# 因为 Ubuntu 的问题,省略
gtk-update-icon-cache /usr/share/icons/bloom > /dev/null | true
# 向服务器返回安装数加1不显示内容且忽略错误
curl https://304626p927.goho.co/uengine-runner/Install.php?Version=1.8.1 -s > /dev/null | true
python3 /opt/apps/com.gitee.uengine.runner.spark/files/Download.py 1.8.3 > /dev/null | true

View File

@@ -14,6 +14,27 @@ rm -f /usr/bin/uengine-root
rm -fr /opt/apps/com.gitee.uengine.runner.spark/files/api/__pycache__
rm -fr /opt/apps/com.gitee.uengine.runner.spark/files/__pycache__
rm -f /usr/bin/uengine-runner-applist-launch.sh
# 删除软件配置文件只限“purge”
# 配置目录:~/.config/uengine-runner
if [ "$1" = "purge" ]; then
echo "清理程序配置文件"
for username in $(ls /home); do
echo /home/$username
if [ -d "/home/$username/.config/uengine-runner/" ]; then
rm -rf "/home/$username/.config/uengine-runner/"
fi
done
# 清理 root 用户的配置文件
echo /root
if [ -d "/root/.config/uengine-runner/" ]; then
rm -rf "/root/.config/uengine-runner/"
fi
else
echo "非 purge跳过清理"
fi
# 刷新图标缓存
# 因为 Ubuntu 的问题,省略
gtk-update-icon-cache /usr/share/icons/bloom > /dev/null | true

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

View File

@@ -5,7 +5,7 @@
"https://github.com/gfdgd-xi/uengine-runner",
"https://gitlink.org.cn/gfdgd_xi/uengine-runner"
],
"Version": "1.8.1",
"Version": "1.8.3",
"System": "Linuxdeepin/UOS",
"Tips": [
"更多可见https://gitee.com/gfdgd-xi/uengine-runner/wikis 或程序的更多帮助",
@@ -23,6 +23,26 @@
"5、如果想要使用adb连接UEngine或其他手机请使用 1.2.0 以前的版本。如需连接UEngine请安装adb补丁"
],
"Update": [
"<b>V1.8.3</b>",
"※1、修复安装/打包程序时出现找不到图标的问题;",
"※2、修复部分无法正确获取程序中文名和 Activity 的问题;",
"※3、修复在运行器内打开打包器不会自动填充打包器 APK 路径;",
"※4、问题反馈新增论坛反馈入口。",
"",
"<b>V1.8.2</b>",
"※1、重新恢复 uengine-installer For Ubuntu",
"※2、修复 postrm 的问题",
"※3、修复“添加UEngine应用快捷方式出现问题”的问题",
"※4、修复打包器无参数问题",
"※5、打包器默认勾选“使用 uengine-dc 前缀”",
"6、修复Python主版本号判断时潜在的问题By Bail",
"7、新增部分资源入口",
"",
"<b>V1.8.1-1</b>",
"※1、修复缺失依赖 python3-matplotlib 导致程序无法开启的问题",
"※2、移除在 Ubuntu 上用于安装 UEngine 的安装工具",
"※3、解决了未输入密码自动回车的 bug",
"",
"<b>V1.8.1</b>",
"※1、修复在 APK 详细信息中图标可能过大导致无法正常使用的问题",
"※2、修复 APK 路径带空格无法正常安装的问题",
@@ -185,25 +205,28 @@
"11、deepin 终端",
"……"
],
"Time": "2022年08月29日",
"Time": "2022年12月18日",
"Contribute": [
"<b>感谢以下用户提供的问题、建议、图标、代码等,如果有遗漏,请及时与开发者联系添加,以及如果侵犯到您的合法权益,也及时与开发者联系:</p>",
"<hr>",
"感谢 麻木法师1312580754 在星火应用商店QQ交流群展示的接口及其原理",
"感谢 actionchen917981399@qq.com 提供了新版页面布局1.3.0 ~ 最新版本以及布局代码1.3.0 ~ 1.7.0",
"感谢 柚子https://gitee.com/Limexb 提供了 UEngine 构建 Root 镜像脚本",
"感谢 星空露光https://gitee.com/Cynorkyle 制作了 UEngine 新版图标和安装应用时能选择应用分类的建议",
"感谢 shenmojifengshenmo@outlook.com 反馈了许多程序的问题以及提供了 UEngine 在 Ubuntu 上的安装脚本",
"感谢 deserthttps://gitee.com/desert741 提供了给软件增加启动成功后自动调整分辨率的功能的建议",
"感谢 云思浮https://gitee.com/foresee_io 反馈的 1.3.0 依赖缺失问题",
"感谢 miaoyshttps://bbs.deepin.org/user/271467、zccrshttps://bbs.deepin.org/user/277780 等用户反馈希望程序能和与系统 DTK 主题协调的建议",
"感谢 jiutian123https://bbs.deepin.org/user/258825 反馈的 1.5.2、1.5.3 存在问题",
"感谢 kero990https://bbs.deepin.org/user/277932 反馈的 README 表示不清的问题",
"感谢 wanghttps://gitee.com/wang1279476881 反馈的 1.6.0 左键打不开 “安装与卸载APK”和打包时 APK 版本号开头带 V 无法正常打包的问题",
"感谢 通天灵宝https://bbs.deepin.org/user/137230、wuhaiou123https://bbs.chinauos.com/zh/user/309117 反馈的 图标生成错误导致无法生成 .desktop 文件的问题",
"感谢 潜伏https://bbs.chinauos.com/zh/user/303339 反馈的右键支持安装/卸载的建议",
"感谢 z***g@gmx.dehttps://bbs.chinauos.com/zh/user/312017 反馈的 UEngine 更新后 uengine-launch.sh 的社区版检测问题",
"参考 忘记、过去https://bbs.deepin.org/user/154730 的帖子《如何更优雅地使用 pkexec》https://bbs.deepin.org/post/202966",
"感谢 U+解答组们 反馈的 1.8.0 带路径无法正常安装 APK 的问题"
"感谢 Bail、shenmo、Allen 反馈的图标无法正常拷贝的问题;",
"感谢 Bail Pr 修复Python主版本号判断时潜在的问题的补丁",
"感谢 麻木法师1312580754 在星火应用商店QQ交流群展示的接口及其原理",
"感谢 Bailhttps://github.com/BailPlus 修复的函数未输入密码自动回车的 bug",
"感谢 actionchen917981399@qq.com 提供了新版页面布局1.3.0 ~ 最新版本以及布局代码1.3.0 ~ 1.7.0",
"感谢 柚子https://gitee.com/Limexb 提供了 UEngine 构建 Root 镜像脚本;",
"感谢 星空露光https://gitee.com/Cynorkyle 制作了 UEngine 新版图标和安装应用时能选择应用分类的建议;",
"感谢 shenmojifengshenmo@outlook.com 反馈了许多程序的问题以及提供了 UEngine 在 Ubuntu 上的安装脚本;",
"感谢 deserthttps://gitee.com/desert741 提供了给软件增加启动成功后自动调整分辨率的功能的建议;",
"感谢 云思浮https://gitee.com/foresee_io 反馈的 1.3.0 依赖缺失问题",
"感谢 miaoyshttps://bbs.deepin.org/user/271467、zccrshttps://bbs.deepin.org/user/277780 等用户反馈希望程序能和与系统 DTK 主题协调的建议;",
"感谢 jiutian123https://bbs.deepin.org/user/258825 反馈的 1.5.2、1.5.3 存在问题",
"感谢 kero990https://bbs.deepin.org/user/277932 反馈的 README 表示不清的问题;",
"感谢 wanghttps://gitee.com/wang1279476881 反馈的 1.6.0 左键打不开 “安装与卸载APK”和打包时 APK 版本号开头带 V 无法正常打包的问题",
"感谢 通天灵宝https://bbs.deepin.org/user/137230、wuhaiou123https://bbs.chinauos.com/zh/user/309117 反馈的 图标生成错误导致无法生成 .desktop 文件的问题;",
"感谢 潜伏https://bbs.chinauos.com/zh/user/303339 反馈的右键支持安装/卸载的建议;",
"感谢 z***g@gmx.dehttps://bbs.chinauos.com/zh/user/312017 反馈的 UEngine 更新后 uengine-launch.sh 的社区版检测问题;",
"参考 忘记、过去https://bbs.deepin.org/user/154730 的帖子《如何更优雅地使用 pkexec》https://bbs.deepin.org/post/202966",
"感谢 U+解答组们 反馈的 1.8.0 带空格路径无法正常安装 APK 的问题。"
]
}
}

View File

@@ -293,6 +293,7 @@ def GetApkActivityName(apkFilePath):
line = line.replace("label=", "")
line = line.replace("icon=", "")
return line
return f"{GetApkPackageName(apkFilePath, False)}.Main"
def GetApkPackageName(apkFilePath, setting):
# 提示:此函数有被为此程序适配而调整,如果需要最原始(无调整的)请使用主程序(此为附属组件)里的函数
@@ -341,13 +342,20 @@ Type=Application
'''.format(packageName, activityName, showName, iconPath, showName, showName)
write_txt(savePath, things)
def GetApkChineseLabel(apkFilePath):
# 获取软件的中文名称
def GetApkChineseLabel(apkFilePath)->"获取软件的中文名称":
info = GetApkInformation(apkFilePath)
name = None
for line in info.split('\n'):
if "application-label-zh:" in line:
line = line.replace("application-label-zh:", "")
line = line.replace("'", "")
return line
if "application-label:" in line:
line = line.replace("application-label:", "")
line = line.replace("'", "")
return line
name = line
return name
#合并两个函数到一起
def SaveApkIcon(apkFilePath, iconSavePath)->"获取 apk 文件的图标":
@@ -367,11 +375,11 @@ def SaveApkIcon(apkFilePath, iconSavePath)->"获取 apk 文件的图标":
saveIconFile.write(iconData)
return
print("Show defult icon")
shutil.copy(programPath + "/defult.png", iconSavePath)
shutil.copy(programPath + "/defult.svg", iconSavePath)
except:
traceback.print_exc()
print("Error, show defult icon")
shutil.copy(programPath + "/defult.png", iconSavePath)
shutil.copy(programPath + "/defult.svg", iconSavePath)
def TextboxAddText1(message):
global textbox1
@@ -468,6 +476,7 @@ exitProgram = QtWidgets.QAction(langFile[lang]["Uengine Apk Builder"]["Menu"][0]
exitProgram.triggered.connect(window.close)
programmenu.addAction(exitProgram)
#
check.setChecked(True)
frame2.addWidget(check)
frame2.addWidget(sizes)
frame2.addWidget(button3)
@@ -476,5 +485,9 @@ window.setWindowTitle(title)
window.setCentralWidget(widget)
window.setWindowIcon(QtGui.QIcon(iconPath))
window.resize(window.frameSize().width() * 1.3, window.frameSize().height() * 1.1)
try:
combobox1.setCurrentText(sys.argv[1])
except:
print("无参数")
window.show()
sys.exit(app.exec_())

View File

@@ -2,14 +2,17 @@
is_tar_checked="0"
rm -rf /tmp/uengine
until [ "$is_tar_checked" = "1" ];do
echo "请拖入uengine.tar.xz并回车确认,可在 https://cowtransfer.com/s/44656ada129e42 下载获取。"
read tar_path
#echo "请拖入uengine.tar.xz并回车确认,可在 https://cowtransfer.com/s/44656ada129e42 下载获取。"
#read tar_path
mkdir -p /tmp/uengine
aria2c -x 16 -s 16 -d /tmp/uengine -o uenginetar.xz https://code.gitlink.org.cn/gfdgd_xi/uengine-installer/raw/branch/master/uenginetar.xz
tar_path="/tmp/uengine/uenginetar.xz"
tar_path=`echo "$tar_path" | sed $'s/\'//g'`
echo "路径为 $tar_path"
#echo "路径为 $tar_path"
tar_md5sum=`md5sum $tar_path`
tar_md5sum=`echo ${tar_md5sum%%/*}`
if [ "$tar_md5sum" = "b8429c4d8bfd507b9dc4547e0b71c962" ];then
if [ "$tar_md5sum" = "5668b6bb54d28406e527989348126982" ];then
is_tar_checked="1"
else
echo $tar_md5sum

View File

@@ -20,6 +20,7 @@ import numpy
import base64
import shutil
import zipfile
import platform
import requests
import traceback
import threading
@@ -36,6 +37,18 @@ import PyQt5.QtCore as QtCore
import PyQt5.QtWidgets as QtWidgets
from getxmlimg import getsavexml
def PythonLower():
app = QtWidgets.QApplication(sys.argv)
QtWidgets.QMessageBox.critical(None, "错误", "Python 至少需要 3.6 及以上版本,目前版本:" + platform.python_version() + "")
sys.exit(1)
# Python 版本检测,因为 f-string 格式化要至少 Python 3.6 及以上的版本,所以需要检测
# 判断主版本号
if sys.version_info[0] < 3:
PythonLower()
if sys.version_info[1] < 6:
PythonLower()
class UninstallProgram(QtCore.QThread):
info = QtCore.pyqtSignal(str)
error = QtCore.pyqtSignal(str)
@@ -398,6 +411,7 @@ def GetApkActivityName(apkFilePath: "apk 所在路径")->"获取 apk Activity":
line = line.replace("label=", "")
line = line.replace("icon=", "")
return line
return f"{GetApkPackageName(apkFilePath)}.Main"
# 获取 apk 包名
def GetApkPackageName(apkFilePath: "apk 所在路径")->"获取 apk 包名":
@@ -411,23 +425,29 @@ def GetApkPackageName(apkFilePath: "apk 所在路径")->"获取 apk 包名":
line = line.replace(" ", "")
return line
'''
Bail修改
将以下5个函数的deepin-terminal的"-C"参数改为"-e"
解决了BuildRootUengineImage()函数未输入密码自动回车的bug
'''
def InstallRootUengineImage():
if not os.path.exists:
os.mkdir("/tmp/uengine-runner")
write_txt("/tmp/uengine-runner/install.sh", "sudo dpkg -i /tmp/uengine-runner/u*.deb\nsudo apt install -f")
threading.Thread(target=os.system, args=[f"'{programPath}/launch.sh' deepin-terminal -C \"wget -P '/tmp/uengine-runner' 'https://hub.fastgit.xyz/gfdgd-xi/uengine-runner/releases/download/U1.2.15/uengine-android-image_1.2.15_amd64.deb' && pkexec bash '/tmp/uengine-runner/install.sh'\""]).start()
threading.Thread(target=os.system, args=[f"'{programPath}/launch.sh' deepin-terminal -e \"wget -P '/tmp/uengine-runner' 'https://hub.fastgit.xyz/gfdgd-xi/uengine-runner/releases/download/U1.2.15/uengine-android-image_1.2.15_amd64.deb' && pkexec bash '/tmp/uengine-runner/install.sh'\""]).start()
def UengineUbuntuInstall():
threading.Thread(target=os.system, args=[f"'{programPath}/launch.sh' deepin-terminal -C \"bash '{programPath + '/uengine-installer'}'\""]).start()
threading.Thread(target=os.system, args=[f"'{programPath}/launch.sh' deepin-terminal -e bash '{programPath + '/uengine-installer'}'"]).start()
def UbuntuInstallUengine():
threading.Thread(target=os.system, args=[f"'{programPath}/launch.sh' deepin-terminal -C \"bash '{programPath + '/uengine-installer'}'\""]).start()
threading.Thread(target=os.system, args=[f"'{programPath}/launch.sh' deepin-terminal -e bash '{programPath + '/uengine-installer'}'"]).start()
def BuildRootUengineImage():
threading.Thread(target=os.system, args=[f"'{programPath}/launch.sh' deepin-terminal -C \"bash '{programPath}/root-uengine.sh'\""]).start()
threading.Thread(target=os.system, args=[f"'{programPath}/launch.sh' deepin-terminal -e bash '{programPath}/root-uengine.sh'"]).start()
def ReinstallUengineImage():
threading.Thread(target=os.system, args=[f"'{programPath}/launch.sh' deepin-terminal -e ''pkexec apt reinstall uengine-android-image -y"]).start()
threading.Thread(target=os.system, args=[f"'{programPath}/launch.sh' deepin-terminal -e pkexec apt reinstall uengine-android-image -y"]).start()
# 生成 uengine 启动文件到桌面
def BuildUengineDesktop(packageName: "软件包名", activityName: "activity", showName: "显示名称", iconPath: "程序图标所在目录", savePath:".desktop 文件保存路径", choose="")->"生成 uengine 启动文件到桌面":
@@ -464,11 +484,17 @@ Type=Application
# 获取软件的中文名称
def GetApkChineseLabel(apkFilePath)->"获取软件的中文名称":
info = GetApkInformation(apkFilePath)
name = None
for line in info.split('\n'):
if "application-label-zh:" in line:
line = line.replace("application-label-zh:", "")
line = line.replace("'", "")
return line
if "application-label:" in line:
line = line.replace("application-label:", "")
line = line.replace("'", "")
return line
name = line
return name
# 保存apk图标
def SaveApkIcon(apkFilePath, iconSavePath)->"保存 apk 文件的图标":
@@ -661,7 +687,7 @@ def CleanAllUengineDesktopLink():
# 打开 uengine 应用打包器
def OpenUengineDebBuilder():
threading.Thread(target=os.system, args=[programPath + "/uengine-apk-builder"]).start()
threading.Thread(target=os.system, args=[f"'{programPath}/uengine-apk-builder' '{ComboInstallPath.currentText()}'"]).start()
# 打开 uengine 根目录
def OpenUengineRootData():
@@ -1367,18 +1393,18 @@ class AddNewUengineDesktopLink():
# 添加快捷方式
def SaveDesktopLink():
try:
if os.path.exists("{}/.local/share/applications/uengine/{}.desktop".format(get_home(), packageName.get())):
if os.path.exists("{}/.local/share/applications/uengine/{}.desktop".format(get_home(), packageName.text())):
if QtWidgets.QMessageBox.question(widget, "提示", "文件已存在,是否要覆盖?") == QtWidgets.QMessageBox.No:
return
if not os.path.exists("{}/.local/share/icons/hicolor/256x256/apps/".format(get_home())):
os.makedirs("{}/.local/share/icons/hicolor/256x256/apps/".format(get_home()))
global activityName
iconSavePath = "{}/.local/share/icons/hicolor/256x256/apps/{}.png".format(get_home(), packageName.get())
iconSavePath = "{}/.local/share/icons/hicolor/256x256/apps/{}.png".format(get_home(), packageName.text())
shutil.copy(programPath + "/defult.png", iconSavePath)
BuildUengineDesktop(packageName.get(), activityName, packageName.get(), iconSavePath,
"{}/.local/share/applications/uengine/{}.desktop".format(get_home(), packageName.get()))
BuildUengineDesktop(packageName.get(), activityName, packageName.get(), iconSavePath,
"{}/{}.desktop".format(get_desktop_path(), packageName.get()))
BuildUengineDesktop(packageName.text(), activityName, packageName.text(), iconSavePath,
"{}/.local/share/applications/uengine/{}.desktop".format(get_home(), packageName.text()))
BuildUengineDesktop(packageName.text(), activityName, packageName.text(), iconSavePath,
"{}/{}.desktop".format(get_desktop_path(), packageName.text()))
AddNewUengineDesktopLink.SaveHistory()
QtWidgets.QMessageBox.information(widget, "提示", "创建完毕!")
except:
@@ -1390,13 +1416,13 @@ class AddNewUengineDesktopLink():
def DelDesktopLink():
try:
global packageName
if not os.path.exists("{}/.local/share/applications/uengine/{}.desktop".format(get_home(), packageName.get())):
if not os.path.exists("{}/.local/share/applications/uengine/{}.desktop".format(get_home(), packageName.text())):
QtWidgets.QMessageBox.critical(widget, "错误", "此包名对应的 UEngine 桌面快捷方式不存在!")
return
if QtWidgets.QMessageBox.warning(widget, "警告", "你确定要删除吗?删除后将无法恢复!", QtWidgets.QMessageBox.Ok | QtWidgets.QMessageBox.Cancel, QtWidgets.QMessageBox.Cancel) == QtWidgets.QMessageBox.Cancel:
return
try:
os.remove("{}/.local/share/applications/uengine/{}.desktop".format(get_home(), packageName.get()))
os.remove("{}/.local/share/applications/uengine/{}.desktop".format(get_home(), packageName.text()))
AddNewUengineDesktopLink.SaveHistory()
QtWidgets.QMessageBox.information(widget, "提示", "已删除")
except:
@@ -1659,7 +1685,10 @@ if not os.path.exists("/usr/bin/uengine"):
os.system(f"'{programPath}/launch.sh' deepin-terminal -C \"pkexec apt install uengine -y\"")
sys.exit(0)
# 非 Deepin/UOS 用户
# 因为安装器出现问题,所以废弃
else:
#QtWidgets.QMessageBox.critical(None, "错误", "请安装 UEngine 后继续")
#sys.exit(0)
if QtWidgets.QMessageBox.question(None, "提示", "您的电脑没有安装 UEngine是否安装 UEngine 以便更好的使用\n这里将会使用 shenmo 提供的脚本进行安装\n安装完后重新启动该程序即可\n提示无法保证此安装脚本安装的 UEngine 可以使用") == QtWidgets.QMessageBox.Yes:
os.system(f"'{programPath}/launch.sh' deepin-terminal -C \"bash '{programPath}/uengine-installer'\"")
sys.exit(0)
@@ -1820,6 +1849,7 @@ uengineData = uengine.addMenu(langFile[lang]["Main"]["MainWindow"]["Menu"][2]["M
uengine.addAction(uengineDeleteUengineCheck)
uengine.addAction(uengineReinstall)
uengineRoot = uengine.addMenu(langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][11]["Name"])
#uengineUbuntuInstall.setDisabled(True)
# 绑定信号
uengineAllowOrDisallowUpdateAndroidApp.triggered.connect(AllowOrDisallowUpdateAndroidApp)
uengineSetHttpProxy.triggered.connect(SetHttpProxy)
@@ -1902,12 +1932,18 @@ uengineBuildRootUengineImage.triggered.connect(BuildRootUengineImage)
uengineReinstallUengineImage.triggered.connect(ReinstallUengineImage)
helpOpenProgramUrl = QtWidgets.QAction(langFile[lang]["Main"]["MainWindow"]["Menu"][3]["Menu"][0])
makerWebsize = QtWidgets.QAction("作者个人站")
helpForum = QtWidgets.QAction("程序论坛")
uengineRunnerSearch = QtWidgets.QAction("查询指定程序在 UEngine 的运行情况")
helpUengineRunnerBugUpload = QtWidgets.QAction(langFile[lang]["Main"]["MainWindow"]["Menu"][3]["Menu"][2])
helpShowHelp = QtWidgets.QAction(langFile[lang]["Main"]["MainWindow"]["Menu"][3]["Menu"][4])
helpRunnerUpdate = QtWidgets.QAction(langFile[lang]["Main"]["MainWindow"]["Menu"][3]["Menu"][3])
helpAbout = QtWidgets.QAction(langFile[lang]["Main"]["MainWindow"]["Menu"][3]["Menu"][1])
helpAboutQt = QtWidgets.QAction(langFile[lang]["Main"]["MainWindow"]["Menu"][3]["Menu"][5])
help.addAction(helpOpenProgramUrl)
help.addAction(uengineRunnerSearch)
help.addAction(makerWebsize)
help.addAction(helpForum)
help.addAction(helpUengineRunnerBugUpload)
help.addAction(helpShowHelp)
help.addAction(helpRunnerUpdate)
@@ -1919,6 +1955,9 @@ hm1.addAction(hm1_1)
hm1_1.triggered.connect(lambda: webbrowser.open_new_tab("https://gitee.com/gfdgd-xi/deep-wine-runner"))
# 绑定信号
helpOpenProgramUrl.triggered.connect(OpenProgramURL)
uengineRunnerSearch.triggered.connect(lambda: webbrowser.open_new_tab("https://gfdgd-xi.github.io/uengine-runner-info/"))
makerWebsize.triggered.connect(lambda: webbrowser.open_new_tab("https://gfdgd-xi.github.io"))
helpForum.triggered.connect(lambda: webbrowser.open_new_tab("https://gfdgdxi.flarum.cloud/"))
helpUengineRunnerBugUpload.triggered.connect(UengineRunnerBugUpload)
helpShowHelp.triggered.connect(ShowHelp)
helpRunnerUpdate.triggered.connect(UpdateWindow.ShowWindow)
@@ -1932,4 +1971,4 @@ window.setWindowTitle(title)
window.show()
window.setWindowIcon(QtGui.QIcon(iconPath))
window.setFixedSize(window.frameSize().width(), window.frameSize().height())
sys.exit(app.exec_())
sys.exit(app.exec_())

View File

@@ -18,10 +18,12 @@ else
"$dir/uengine-runner-applist-launch.sh" deepin-terminal -C "pkexec apt install uengine -y"
fi
else
echo "非 Deepin/UOS 系统,使用 shenmo 提供的脚本安装\n暂未保证此安装脚本一定安装成功"
zenity --question --text="您还未安装 UEngine,是否现在安装?\n将会使用 shenmo 提供的脚本进行安装\n暂未保证此安装脚本一定安装成功" --no-wrap
if [[ $? = 0 ]]; then
deepin-terminal -C "bash /opt/apps/com.gitee.uengine.runner.spark/files/uengine-installer"
fi
# 因为安装器出现问题,所以废弃
zenity --error --text="安装 UEngine 后继续" --no-wrap
#echo "非 Deepin/UOS 系统,使用 shenmo 提供的脚本安装\n暂未保证此安装脚本一定安装成功"
#zenity --question --text="您还未安装 UEngine是否现在安装\n将会使用 shenmo 提供的脚本进行安装\n暂未保证此安装脚本一定安装成功" --no-wrap
#if [[ $? = 0 ]]; then
# deepin-terminal -C "bash /opt/apps/com.gitee.uengine.runner.spark/files/uengine-installer"
#fi
fi
fi

View File

@@ -49,6 +49,9 @@ def OpenGithubIssues():
def OpenGitlinkIssues():
webbrowser.open_new_tab("https://www.gitlink.org.cn/gfdgd_xi/uengine-runner/issues")
def OpenProgramForum():
webbrowser.open_new_tab("https://gfdgdxi.flarum.cloud/t/bugs")
# 获取用户主目录
def get_home()->"获取用户主目录":
return os.path.expanduser('~')
@@ -77,10 +80,12 @@ otherUpload = QtWidgets.QHBoxLayout()
giteeButton = QtWidgets.QPushButton("Gitee Issues")
githubButton = QtWidgets.QPushButton("Github Issues")
gitlinkButton = QtWidgets.QPushButton("Gitlink Issues")
forumButton = QtWidgets.QPushButton("论坛反馈")
otherUpload.addWidget(QtWidgets.QLabel("如果无法正常反馈,可以用其他方式反馈:"))
otherUpload.addWidget(giteeButton)
otherUpload.addWidget(githubButton)
otherUpload.addWidget(gitlinkButton)
otherUpload.addWidget(forumButton)
otherUpload.addSpacerItem(QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum))
starMenu.addItems(["5分", "4分", "3分", "2分", "1分"])
widgetLayout.addWidget(QtWidgets.QLabel("你的昵称:"), 0, 0, 1, 1)
@@ -97,6 +102,7 @@ giteeButton.clicked.connect(OpenGiteeIssues)
githubButton.clicked.connect(OpenGithubIssues)
gitlinkButton.clicked.connect(OpenGitlinkIssues)
updateButton.clicked.connect(UpdateButtonClick)
forumButton.clicked.connect(OpenProgramForum)
widget.setLayout(widgetLayout)
window.setCentralWidget(widget)
window.setWindowTitle(f"UEngine 运行器 {version} 问题/建议反馈")

View File

@@ -1,674 +0,0 @@
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<http://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<http://www.gnu.org/philosophy/why-not-lgpl.html>.

View File

@@ -293,6 +293,7 @@ def GetApkActivityName(apkFilePath):
line = line.replace("label=", "")
line = line.replace("icon=", "")
return line
return f"{GetApkPackageName(apkFilePath, False)}.Main"
def GetApkPackageName(apkFilePath, setting):
# 提示:此函数有被为此程序适配而调整,如果需要最原始(无调整的)请使用主程序(此为附属组件)里的函数
@@ -341,13 +342,20 @@ Type=Application
'''.format(packageName, activityName, showName, iconPath, showName, showName)
write_txt(savePath, things)
def GetApkChineseLabel(apkFilePath):
# 获取软件的中文名称
def GetApkChineseLabel(apkFilePath)->"获取软件的中文名称":
info = GetApkInformation(apkFilePath)
name = None
for line in info.split('\n'):
if "application-label-zh:" in line:
line = line.replace("application-label-zh:", "")
line = line.replace("'", "")
return line
if "application-label:" in line:
line = line.replace("application-label:", "")
line = line.replace("'", "")
return line
name = line
return name
#合并两个函数到一起
def SaveApkIcon(apkFilePath, iconSavePath)->"获取 apk 文件的图标":
@@ -367,11 +375,11 @@ def SaveApkIcon(apkFilePath, iconSavePath)->"获取 apk 文件的图标":
saveIconFile.write(iconData)
return
print("Show defult icon")
shutil.copy(programPath + "/defult.png", iconSavePath)
shutil.copy(programPath + "/defult.svg", iconSavePath)
except:
traceback.print_exc()
print("Error, show defult icon")
shutil.copy(programPath + "/defult.png", iconSavePath)
shutil.copy(programPath + "/defult.svg", iconSavePath)
def TextboxAddText1(message):
global textbox1
@@ -468,6 +476,7 @@ exitProgram = QtWidgets.QAction(langFile[lang]["Uengine Apk Builder"]["Menu"][0]
exitProgram.triggered.connect(window.close)
programmenu.addAction(exitProgram)
#
check.setChecked(True)
frame2.addWidget(check)
frame2.addWidget(sizes)
frame2.addWidget(button3)
@@ -476,5 +485,9 @@ window.setWindowTitle(title)
window.setCentralWidget(widget)
window.setWindowIcon(QtGui.QIcon(iconPath))
window.resize(window.frameSize().width() * 1.3, window.frameSize().height() * 1.1)
try:
combobox1.setCurrentText(sys.argv[1])
except:
print("无参数")
window.show()
sys.exit(app.exec_())

View File

@@ -2,14 +2,17 @@
is_tar_checked="0"
rm -rf /tmp/uengine
until [ "$is_tar_checked" = "1" ];do
echo "请拖入uengine.tar.xz并回车确认,可在 https://cowtransfer.com/s/44656ada129e42 下载获取。"
read tar_path
#echo "请拖入uengine.tar.xz并回车确认,可在 https://cowtransfer.com/s/44656ada129e42 下载获取。"
#read tar_path
mkdir -p /tmp/uengine
aria2c -x 16 -s 16 -d /tmp/uengine -o uenginetar.xz https://code.gitlink.org.cn/gfdgd_xi/uengine-installer/raw/branch/master/uenginetar.xz
tar_path="/tmp/uengine/uenginetar.xz"
tar_path=`echo "$tar_path" | sed $'s/\'//g'`
echo "路径为 $tar_path"
#echo "路径为 $tar_path"
tar_md5sum=`md5sum $tar_path`
tar_md5sum=`echo ${tar_md5sum%%/*}`
if [ "$tar_md5sum" = "b8429c4d8bfd507b9dc4547e0b71c962" ];then
if [ "$tar_md5sum" = "5668b6bb54d28406e527989348126982" ];then
is_tar_checked="1"
else
echo $tar_md5sum

View File

@@ -18,10 +18,12 @@ else
"$dir/uengine-runner-applist-launch.sh" deepin-terminal -C "pkexec apt install uengine -y"
fi
else
echo "非 Deepin/UOS 系统,使用 shenmo 提供的脚本安装\n暂未保证此安装脚本一定安装成功"
zenity --question --text="您还未安装 UEngine,是否现在安装?\n将会使用 shenmo 提供的脚本进行安装\n暂未保证此安装脚本一定安装成功" --no-wrap
if [[ $? = 0 ]]; then
deepin-terminal -C "bash /opt/apps/com.gitee.uengine.runner.spark/files/uengine-installer"
fi
# 因为安装器出现问题,所以废弃
zenity --error --text="安装 UEngine 后继续" --no-wrap
#echo "非 Deepin/UOS 系统,使用 shenmo 提供的脚本安装\n暂未保证此安装脚本一定安装成功"
#zenity --question --text="您还未安装 UEngine是否现在安装\n将会使用 shenmo 提供的脚本进行安装\n暂未保证此安装脚本一定安装成功" --no-wrap
#if [[ $? = 0 ]]; then
# deepin-terminal -C "bash /opt/apps/com.gitee.uengine.runner.spark/files/uengine-installer"
#fi
fi
fi

View File

@@ -49,6 +49,9 @@ def OpenGithubIssues():
def OpenGitlinkIssues():
webbrowser.open_new_tab("https://www.gitlink.org.cn/gfdgd_xi/uengine-runner/issues")
def OpenProgramForum():
webbrowser.open_new_tab("https://gfdgdxi.flarum.cloud/t/bugs")
# 获取用户主目录
def get_home()->"获取用户主目录":
return os.path.expanduser('~')
@@ -77,10 +80,12 @@ otherUpload = QtWidgets.QHBoxLayout()
giteeButton = QtWidgets.QPushButton("Gitee Issues")
githubButton = QtWidgets.QPushButton("Github Issues")
gitlinkButton = QtWidgets.QPushButton("Gitlink Issues")
forumButton = QtWidgets.QPushButton("论坛反馈")
otherUpload.addWidget(QtWidgets.QLabel("如果无法正常反馈,可以用其他方式反馈:"))
otherUpload.addWidget(giteeButton)
otherUpload.addWidget(githubButton)
otherUpload.addWidget(gitlinkButton)
otherUpload.addWidget(forumButton)
otherUpload.addSpacerItem(QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum))
starMenu.addItems(["5分", "4分", "3分", "2分", "1分"])
widgetLayout.addWidget(QtWidgets.QLabel("你的昵称:"), 0, 0, 1, 1)
@@ -97,6 +102,7 @@ giteeButton.clicked.connect(OpenGiteeIssues)
githubButton.clicked.connect(OpenGithubIssues)
gitlinkButton.clicked.connect(OpenGitlinkIssues)
updateButton.clicked.connect(UpdateButtonClick)
forumButton.clicked.connect(OpenProgramForum)
widget.setLayout(widgetLayout)
window.setCentralWidget(widget)
window.setWindowTitle(f"UEngine 运行器 {version} 问题/建议反馈")