Compare commits
14 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 2b99554e02 | |||
| 37340dd3e9 | |||
| 6a22b1c170 | |||
| 951f41d57e | |||
| 33be2db48f | |||
| 1d7bd94908 | |||
|
|
ee49dcb19e | ||
| ea813fcc37 | |||
|
|
2485438303 | ||
|
|
b5e7884913 | ||
|
|
cee4ab77e2 | ||
|
|
efacc353d7 | ||
|
|
144c030036 | ||
| b028bbd8fa |
5
Download.py
Executable file
5
Download.py
Executable 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)
|
||||||
13
Makefile
13
Makefile
@@ -20,7 +20,7 @@ build:
|
|||||||
cp -rv uengine-app-install new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/
|
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 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.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 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 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/
|
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 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 Help new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/
|
||||||
cp -rv pkexec/* new-deb-build/usr/share/polkit-1/actions
|
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:
|
install:
|
||||||
make build
|
make build
|
||||||
echo "Install..."
|
echo "Install..."
|
||||||
sudo apt update
|
sudo apt update
|
||||||
sudo dpkg -i com.gitee.uengine.runner.spark.deb ; true
|
#sudo dpkg -i com.gitee.uengine.runner.spark.deb | true
|
||||||
sudo apt install -f
|
#sudo apt install -f
|
||||||
|
sudo apt reinstall ./com.gitee.uengine.runner.spark.deb
|
||||||
|
|
||||||
depend:
|
depend:
|
||||||
sudo apt install python3 python3-tk python3-pip aapt \
|
sudo apt install python3 python3-tk python3-pip aapt \
|
||||||
|
|||||||
460
README.md
460
README.md
@@ -1,129 +1,158 @@
|
|||||||
<p width=100px align="center"><img src="runner.svg"></p>
|
<p width=100px align="center"><img src="runner.svg"></p>
|
||||||
<h1 align="center">UEngine 运行器 1.8.2</h1>
|
<h1 align="center">UEngine 运行器 1.8.3</h1>
|
||||||
<hr>
|
<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>
|
||||||
|
|
||||||
### 介绍
|
### 介绍
|
||||||
新版本Deepin/UOS发布后,可以在应用商店安装部分官方已适配的安卓应用,对爱好者来说,不能自己安装APK软件包始终差点意思,本程序可以为Deepin/UOS上的UEngine安卓运行环境安装自定义APK软件包,并能发送安装的APK包启动菜单到桌面或系统菜单。
|
|
||||||

|
|
||||||
|
|
||||||
(测试平台:UOS 家庭版 21.3.1,deepin 20.6,UOS 专业版 1050)
|
新版本Deepin/UOS发布后,可以在应用商店安装部分官方已适配的安卓应用,对爱好者来说,不能自己安装APK软件包始终差点意思,本程序可以为Deepin/UOS上的UEngine安卓运行环境安装自定义APK软件包,并能发送安装的APK包启动菜单到桌面或系统菜单。
|
||||||
|

|
||||||
|
|
||||||
|
(测试平台:UOS 家庭版 21.3.1,deepin 20.8,UOS 专业版 1050)
|
||||||
|
|
||||||
## 安装前必读
|
## 安装前必读
|
||||||
+ **UEngine 安装时会自动把要安装的 apk 删除**,如果这个 apk 文件非常重要请**拷贝一个备份版并安装这个备份版或者在程序设置里面选择“备份APK包然后在安装后自动拷贝原先目录”选项**
|
|
||||||

|
+ **UEngine 安装时会自动把要安装的 apk 删除**,如果这个 apk 文件非常重要请**拷贝一个备份版并安装这个备份版或者在程序设置里面选择“备份APK包然后在安装后自动拷贝原先目录”选项**
|
||||||
|

|
||||||
|
|
||||||
## 如何升级至最新版本
|
## 如何升级至最新版本
|
||||||
|
|
||||||
### 一、使用星火应用商店更新到最新版本
|
### 一、使用星火应用商店更新到最新版本
|
||||||
**1、打开星火应用商店并打开到对应的界面,点击“升级”**
|
|
||||||
|
**1、打开星火应用商店并打开到对应的界面,点击“升级”**
|
||||||

|

|
||||||
**2、然后安装**
|
**2、然后安装**
|
||||||

|

|
||||||
**3、结束**
|
**3、结束**
|
||||||
|
|
||||||
### 二、通过源更新(需要添加星火应用商店源)
|
### 二、通过源更新(需要添加星火应用商店源)
|
||||||
输入以下命令即可:
|
|
||||||
|
输入以下命令即可:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo apt update
|
sudo apt update
|
||||||
sudo apt upgrade
|
sudo apt upgrade
|
||||||
```
|
```
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
### 三、使用程序自带的更新程序更新
|
### 三、使用程序自带的更新程序更新
|
||||||
**1、打开 UEngine 运行器然后点击“关于”=>“检查更新”,点击“更新(更新过程中会关闭所有Python应用,包括这个应用)”**
|
|
||||||
|
**1、打开 UEngine 运行器然后点击“关于”=>“检查更新”,点击“更新(更新过程中会关闭所有Python应用,包括这个应用)”**
|
||||||

|

|
||||||
**2、输入密码进行更新**
|
**2、输入密码进行更新**
|
||||||

|

|
||||||
**3、提示更新完毕即可**
|
**3、提示更新完毕即可**
|
||||||

|

|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
### 更新内容
|
### 更新内容
|
||||||
|
|
||||||
|
#### V1.8.3(2022年12月18日)
|
||||||
|
**※1、修复安装/打包程序时出现找不到图标的问题;**
|
||||||
|
**※2、修复部分无法正确获取程序中文名和 Activity 的问题;**
|
||||||
|
**※3、修复在运行器内打开打包器不会自动填充打包器 APK 路径;**
|
||||||
|
**※4、问题反馈新增论坛反馈入口。**
|
||||||
|

|
||||||
|
|
||||||
#### V1.8.2(2022年11月28日)
|
#### V1.8.2(2022年11月28日)
|
||||||
**※1、重新恢复 uengine-installer For Ubuntu**
|
|
||||||
**※2、修复 postrm 的问题**
|
**※1、重新恢复 uengine-installer For Ubuntu**
|
||||||
**※3、修复“添加UEngine应用快捷方式出现问题”的问题**
|
**※2、修复 postrm 的问题**
|
||||||
**※4、修复打包器无参数问题**
|
**※3、修复“添加UEngine应用快捷方式出现问题”的问题**
|
||||||
**※5、打包器默认勾选“使用 uengine-dc 前缀”**
|
**※4、修复打包器无参数问题**
|
||||||
6、修复Python主版本号判断时潜在的问题(By Bail)
|
**※5、打包器默认勾选“使用 uengine-dc 前缀”**
|
||||||
7、新增部分资源入口
|
6、修复Python主版本号判断时潜在的问题(By Bail)
|
||||||
|
7、新增部分资源入口
|
||||||

|

|
||||||
|
|
||||||
#### V1.8.1-1(2022年09月03日)
|
#### V1.8.1-1(2022年09月03日)
|
||||||
**※1、修复缺失依赖 python3-matplotlib 导致程序无法开启的问题**
|
|
||||||
**※2、移除在 Ubuntu 上用于安装 UEngine 的安装工具**
|
**※1、修复缺失依赖 python3-matplotlib 导致程序无法开启的问题**
|
||||||
**※3、解决了未输入密码自动回车的 bug**
|
**※2、移除在 Ubuntu 上用于安装 UEngine 的安装工具**
|
||||||
|
**※3、解决了未输入密码自动回车的 bug**
|
||||||
|
|
||||||
#### V1.8.1(2022年08月30日)
|
#### V1.8.1(2022年08月30日)
|
||||||
**※1、修复在 APK 详细信息中图标可能过大导致无法正常使用的问题**
|
|
||||||
**※2、修复 APK 路径带空格无法正常安装的问题**
|
**※1、修复在 APK 详细信息中图标可能过大导致无法正常使用的问题**
|
||||||
3、修复打包器打包的 APK 带下划线“_”无法正常打包的问题
|
**※2、修复 APK 路径带空格无法正常安装的问题**
|
||||||
4、修复打包器下方命令返回过多空白行的问题
|
3、修复打包器打包的 APK 带下划线“_”无法正常打包的问题
|
||||||
5、修复程序生成的默认图标任然是旧版图标的问题
|
4、修复打包器下方命令返回过多空白行的问题
|
||||||

|
5、修复程序生成的默认图标任然是旧版图标的问题
|
||||||
|

|
||||||
|
|
||||||
#### V1.8.0(2022年07月27日)
|
#### V1.8.0(2022年07月27日)
|
||||||
**※1、程序界面大部分由 Tkinter 转 PyQt5**
|
|
||||||
**※2、添加了自动/手动配置 UEngine 窗口大小文件(自动需要在设置里手动开启,配置窗口的配置文件需要 Root)**
|
**※1、程序界面大部分由 Tkinter 转 PyQt5**
|
||||||
**※3、增加了安装/卸载失败后的提示**
|
**※2、添加了自动/手动配置 UEngine 窗口大小文件(自动需要在设置里手动开启,配置窗口的配置文件需要 Root)**
|
||||||
**※4、补回谢明名单**
|
**※3、增加了安装/卸载失败后的提示**
|
||||||
**※5、支持免密安装/卸载 APK**
|
**※4、补回谢明名单**
|
||||||
6、pip 更换华为源,提升下载速度
|
**※5、支持免密安装/卸载 APK**
|
||||||
7、新增主题功能
|
6、pip 更换华为源,提升下载速度
|
||||||
8、支持在安装 APK 后手动指定分类(手动指定需要在设置里手动开启)
|
7、新增主题功能
|
||||||
|
8、支持在安装 APK 后手动指定分类(手动指定需要在设置里手动开启)
|
||||||

|

|
||||||
|
|
||||||
#### V1.7.0(2022年07月08日,暑假开始)
|
#### V1.7.0(2022年07月08日,暑假开始)
|
||||||
**※1、新增暗黑主题**
|
|
||||||
**※2、优化 deepin-terminal 在其它发行版显示奇奇怪怪的问题**
|
**※1、新增暗黑主题**
|
||||||
**※3、修复 UEngine 安装脚本在安装时不让用户选择,直接默认 N 无法安装的问题**
|
**※2、优化 deepin-terminal 在其它发行版显示奇奇怪怪的问题**
|
||||||
4、新增设置 UEngine 代理的功能
|
**※3、修复 UEngine 安装脚本在安装时不让用户选择,直接默认 N 无法安装的问题**
|
||||||
5、将执行命令和打包器的返回输出从命令结束后显示输出内容改为实时显示内容
|
4、新增设置 UEngine 代理的功能
|
||||||
|
5、将执行命令和打包器的返回输出从命令结束后显示输出内容改为实时显示内容
|
||||||

|

|
||||||
|
|
||||||
#### V1.6.2(2022年06月21日,中考假期+即将期末考试)
|
#### V1.6.2(2022年06月21日,中考假期+即将期末考试)
|
||||||
**※1、优化了 UEngine 运行器的英语翻译**
|
|
||||||
**※2、新增加了可以打开或关闭第三方应用安装的功能(使用此功能后在UEngine里可以使用默认的APK安装程序安装应用,此操作需要使用程序的Adb补丁)**
|
**※1、优化了 UEngine 运行器的英语翻译**
|
||||||
**※3、新增加了 UEngine 的 Ubuntu 安装程序**
|
**※2、新增加了可以打开或关闭第三方应用安装的功能(使用此功能后在UEngine里可以使用默认的APK安装程序安装应用,此操作需要使用程序的Adb补丁)**
|
||||||
**※4、双包合一,只保留了UOS打包标准,可以从旧标准无缝升级(推荐使用本程序的升级程序进行升级)**
|
**※3、新增加了 UEngine 的 Ubuntu 安装程序**
|
||||||
5、修复了本程序在 Ubuntu 上安装和卸载报错而无法继续的问题
|
**※4、双包合一,只保留了UOS打包标准,可以从旧标准无缝升级(推荐使用本程序的升级程序进行升级)**
|
||||||
6、优化帮助/关于窗口在高分辨率电脑上显示不全的问题
|
5、修复了本程序在 Ubuntu 上安装和卸载报错而无法继续的问题
|
||||||
|
6、优化帮助/关于窗口在高分辨率电脑上显示不全的问题
|
||||||

|

|
||||||
|
|
||||||
|
|
||||||
#### V1.6.1(2022年05月21日,521)
|
#### V1.6.1(2022年05月21日,521)
|
||||||
**※1、修复了打包 deb 包在 APK 的包名有大写时无法启动的问题**
|
|
||||||
**※2、提供新版本的 UEngine Root 镜像**
|
|
||||||
**※3、更新了 UEngine Root 的下载地址**
|
|
||||||
**※4、修复了本程序的“UEngine 键盘映射”无法启动的问题**
|
|
||||||
5、把构建 UEngine Root 镜像修改为多线程下载(wget=>aria2)
|
|
||||||
6、提供了 UEngine 运行器的 API(可以从项目地址中获取)
|
|
||||||
7、补上遗漏的项目参与者“星空露光”,新加参与者
|
|
||||||

|
|
||||||

|
|
||||||

|
|
||||||

|
|
||||||

|
|
||||||
|
|
||||||
|
**※1、修复了打包 deb 包在 APK 的包名有大写时无法启动的问题**
|
||||||
|
**※2、提供新版本的 UEngine Root 镜像**
|
||||||
|
**※3、更新了 UEngine Root 的下载地址**
|
||||||
|
**※4、修复了本程序的“UEngine 键盘映射”无法启动的问题**
|
||||||
|
5、把构建 UEngine Root 镜像修改为多线程下载(wget=>aria2)
|
||||||
|
6、提供了 UEngine 运行器的 API(可以从项目地址中获取)
|
||||||
|
7、补上遗漏的项目参与者“星空露光”,新加参与者
|
||||||
|

|
||||||
|

|
||||||
|

|
||||||
|

|
||||||
|

|
||||||
|
|
||||||
#### V1.6.0(开学版,开学前一天完成)
|
#### V1.6.0(开学版,开学前一天完成)
|
||||||
**※1、更换了新的图标已完成(感谢[@星空露光](https://gitee.com/Cynorkyle))**
|
|
||||||
**※2、支持程序的评分和查看分数详情的功能**
|
**※1、更换了新的图标已完成(感谢[@星空露光](https://gitee.com/Cynorkyle))**
|
||||||
**※3、修复了在安装奇奇怪怪的安装包(如格式、标识不正确的)时的快捷方式图标为空以及快捷方式文本的变化**
|
**※2、支持程序的评分和查看分数详情的功能**
|
||||||
**※4、添加更新功能,可以自行升级到最新版本**
|
**※3、修复了在安装奇奇怪怪的安装包(如格式、标识不正确的)时的快捷方式图标为空以及快捷方式文本的变化**
|
||||||
**※5、新增程序帮助**
|
**※4、添加更新功能,可以自行升级到最新版本**
|
||||||
6、新填彩蛋(在“关于”=>“关于”显示的窗口双击“关于”开启)
|
**※5、新增程序帮助**
|
||||||
7、修复了“UEngine 打包器”前缀选项勾选设置不生效的问题
|
6、新填彩蛋(在“关于”=>“关于”显示的窗口双击“关于”开启)
|
||||||
8、修复了“UEngine 打包器” 打包的安装包版本号带 V 无法打包的情况
|
7、修复了“UEngine 打包器”前缀选项勾选设置不生效的问题
|
||||||
|
8、修复了“UEngine 打包器” 打包的安装包版本号带 V 无法打包的情况
|
||||||

|

|
||||||
|
|
||||||
#### V1.5.3(2021-12-12,DDUC11版):
|
#### V1.5.3(2021-12-12,DDUC11版):
|
||||||
|
|
||||||
##### 更新内容
|
##### 更新内容
|
||||||
**※1、修复了在 UOS 家庭版安装 apk 文件安装包信息为 None 的问题**
|
|
||||||
**※2、“添加/删除 UEngine 图标”窗口的写入按钮在目录**`~/.local/share/icons/hicolor/256x256/apps`**不存在时点击无反应,参考报错1.5.3-1**
|
**※1、修复了在 UOS 家庭版安装 apk 文件安装包信息为 None 的问题**
|
||||||
**※3、修复了“UEngine APK 应用打包器”打包的deb包的.desktop文件的**`Icon`**和**`Exec`**字段有误的问题以及使用“使用前缀‘uengine-dc’”前缀的问题**
|
**※2、“添加/删除 UEngine 图标”窗口的写入按钮在目录** `~/.local/share/icons/hicolor/256x256/apps`**不存在时点击无反应,参考报错1.5.3-1**
|
||||||
4、“UEngine APK 应用打包器”支持打包完后自动删除临时目录
|
**※3、修复了“UEngine APK 应用打包器”打包的deb包的.desktop文件的** `Icon`**和** `Exec`**字段有误的问题以及使用“使用前缀‘uengine-dc’”前缀的问题**
|
||||||
5、“UEngine APK 应用打包器”以及“添加/删除 UEngine 图标”支持在运行出现错误时显示报错
|
4、“UEngine APK 应用打包器”支持打包完后自动删除临时目录
|
||||||
|
5、“UEngine APK 应用打包器”以及“添加/删除 UEngine 图标”支持在运行出现错误时显示报错
|
||||||
|
|
||||||
##### 报错:
|
##### 报错:
|
||||||
|
|
||||||
*1.5.3-1*
|
*1.5.3-1*
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
Exception in Tkinter callback
|
Exception in Tkinter callback
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
@@ -137,110 +166,127 @@ Traceback (most recent call last):
|
|||||||
with open(dst, 'wb') as fdst:
|
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'
|
FileNotFoundError: [Errno 2] No such file or directory: '/home/gfdgd_xi/.local/share/icons/hicolor/256x256/apps/com.miHoYo.cloudgames.ys.png'
|
||||||
```
|
```
|
||||||
|
|
||||||
##### 截图
|
##### 截图
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
#### V1.5.2(2021-11-28):
|
#### V1.5.2(2021-11-28):
|
||||||
**※1、支持安装和构建带 Root 的 UEngine 的镜像**
|
|
||||||
2、更新了反馈链接
|
**※1、支持安装和构建带 Root 的 UEngine 的镜像**
|
||||||

|
2、更新了反馈链接
|
||||||
|

|
||||||
|
|
||||||
#### V1.5.1(2021-10-05,国庆节版):
|
#### V1.5.1(2021-10-05,国庆节版):
|
||||||
**※1、精简用户界面,合并安装和卸载输入框和浏览按钮等**
|
|
||||||
**※2、修复安装以其的程序图标无法点击进入的问题(deepin 社区版不存在此问题)**
|
**※1、精简用户界面,合并安装和卸载输入框和浏览按钮等**
|
||||||
**※3、支持在程序本体反馈问题**
|
**※2、修复安装以其的程序图标无法点击进入的问题(deepin 社区版不存在此问题)**
|
||||||
4、修复了菜单栏的部分显示问题
|
**※3、支持在程序本体反馈问题**
|
||||||
5、支持显示 apk 的部分信息
|
4、修复了菜单栏的部分显示问题
|
||||||
6、支持删除 UEngine 程序运行检查以及重新安装 UEngine 的功能
|
5、支持显示 apk 的部分信息
|
||||||
7、自带有跳过家庭版必须有指定包名才能运行程序限制的脚本
|
6、支持删除 UEngine 程序运行检查以及重新安装 UEngine 的功能
|
||||||
8、补回依赖包“adb”
|
7、自带有跳过家庭版必须有指定包名才能运行程序限制的脚本
|
||||||
|
8、补回依赖包“adb”
|
||||||

|

|
||||||
|
|
||||||
#### V1.5.0(2021-09-21,中秋节版):
|
#### V1.5.0(2021-09-21,中秋节版):
|
||||||
**没有什么实质性的功能,只是开始有多语言支持**
|
|
||||||
**※1、部分窗口支持英语**
|
**没有什么实质性的功能,只是开始有多语言支持**
|
||||||
2、修复在英语状态下启动器图标名称异常的问题
|
**※1、部分窗口支持英语**
|
||||||
|
2、修复在英语状态下启动器图标名称异常的问题
|
||||||

|

|
||||||
|
|
||||||
#### V1.4.3(2021-09-11,开学第一版):
|
#### V1.4.3(2021-09-11,开学第一版):
|
||||||
**※1、支持打包器打包的包名带前缀“uengine-dc”**
|
|
||||||
**※2、修复了两种情况可能导致程序卡住/出错无法继续运行的情况(配置文件夹不齐全和获取版本信息卡住两种情况)**
|
**※1、支持打包器打包的包名带前缀“uengine-dc”**
|
||||||
**※3、修改了 UEngine 打包器打包的应用包名可能有大写的情况**
|
**※2、修复了两种情况可能导致程序卡住/出错无法继续运行的情况(配置文件夹不齐全和获取版本信息卡住两种情况)**
|
||||||
4、支持一键使用 Scrcpy 连接 UEngine(①先安装 adb 破解补丁;②请确保是使用snap安装的 Scrcpy【目前只支持 snap 安装的 Scrcpy 进行连接】)
|
**※3、修改了 UEngine 打包器打包的应用包名可能有大写的情况**
|
||||||
5、支持右键打包 apk
|
4、支持一键使用 Scrcpy 连接 UEngine(①先安装 adb 破解补丁;②请确保是使用snap安装的 Scrcpy【目前只支持 snap 安装的 Scrcpy 进行连接】)
|
||||||
|
5、支持右键打包 apk
|
||||||

|

|
||||||
|
|
||||||
#### V1.4.2(2021-08-30,快开学了):
|
#### V1.4.2(2021-08-30,快开学了):
|
||||||
**※1、添加adb破解补丁(用于可以让adb连接UEngine)并支持adb的部分操作;**
|
|
||||||
2、菜单栏的项目添加以及外观优化;
|
**※1、添加adb破解补丁(用于可以让adb连接UEngine)并支持adb的部分操作;**
|
||||||
3、修复键盘映射无法添加新映射的问题并修改键盘映射启动方式;
|
2、菜单栏的项目添加以及外观优化;
|
||||||
4、把 uengine 改为 UEngine;
|
3、修复键盘映射无法添加新映射的问题并修改键盘映射启动方式;
|
||||||
5、修改 pkexec 获取密码时显示的图标和文本;
|
4、把 uengine 改为 UEngine;
|
||||||
6、添加了 UEngine 系统设置的快捷方式;
|
5、修改 pkexec 获取密码时显示的图标和文本;
|
||||||
|
6、添加了 UEngine 系统设置的快捷方式;
|
||||||

|

|
||||||
|
|
||||||
#### V1.4.1(2021-08-26):
|
#### V1.4.1(2021-08-26):
|
||||||
**※1、初步支持键盘映射**
|
|
||||||
2、修复新版包在发送uengine列表快捷方式时会提示找不到文件
|
**※1、初步支持键盘映射**
|
||||||
|
2、修复新版包在发送uengine列表快捷方式时会提示找不到文件
|
||||||

|

|
||||||
|
|
||||||
#### V1.4.0(2021-08-19):
|
#### V1.4.0(2021-08-19):
|
||||||
**※1、添加新版打包方式(deepin打包方式);**
|
|
||||||
**※2、支持测试运行/创建/删除uengine图标;**
|
**※1、添加新版打包方式(deepin打包方式);**
|
||||||
**※3、支持提取安装的apk;**
|
**※2、支持测试运行/创建/删除uengine图标;**
|
||||||
**※4、支持打包deb包;**
|
**※3、支持提取安装的apk;**
|
||||||
5、修改菜单栏布局;
|
**※4、支持打包deb包;**
|
||||||
6、支持打开uengine数据目录和用户数据目录;
|
5、修改菜单栏布局;
|
||||||
7、程序信息保存到json,非直接写入程序本体;
|
6、支持打开uengine数据目录和用户数据目录;
|
||||||
8、更多命令操作;
|
7、程序信息保存到json,非直接写入程序本体;
|
||||||
|
8、更多命令操作;
|
||||||

|

|
||||||
|
|
||||||
#### V1.3.2(2021-08-16):
|
#### V1.3.2(2021-08-16):
|
||||||
**※1、支持uengine数据重置;**
|
|
||||||
**※2、支持修改uengine网络桥接的启动状态;**
|
**※1、支持uengine数据重置;**
|
||||||
**※3、支持右键安装/卸载;**
|
**※2、支持修改uengine网络桥接的启动状态;**
|
||||||
**※4、支持启用或禁用uengine;**
|
**※3、支持右键安装/卸载;**
|
||||||
**※5、修复打包问题,不会出现“dpkg:警告:卸载spark-uengine-runner时,目录/opt/apps/uengine-runner非空,因而不会删除该目录”的错误;**
|
**※4、支持启用或禁用uengine;**
|
||||||

|
**※5、修复打包问题,不会出现“dpkg:警告:卸载spark-uengine-runner时,目录/opt/apps/uengine-runner非空,因而不会删除该目录”的错误;**
|
||||||
|

|
||||||
|
|
||||||
#### V1.3.1(2021-08-12):
|
#### V1.3.1(2021-08-12):
|
||||||
**※1、修复打包问题,防止部分用户安装出错的问题;**
|
|
||||||
**※2、修复了程序无法提取图标时可以提取默认图标使用;**
|
**※1、修复打包问题,防止部分用户安装出错的问题;**
|
||||||
|
**※2、修复了程序无法提取图标时可以提取默认图标使用;**
|
||||||

|

|
||||||
|
|
||||||
#### V1.3.0(2021-08-08):
|
#### V1.3.0(2021-08-08):
|
||||||
**※1、修改了界面布局;**
|
|
||||||
**※2、修复大多数新安装普通用户的路图标及启动菜单文件路径不存在导致安装APK报错的bugs;**
|
**※1、修改了界面布局;**
|
||||||
3、删除少量冗余代码,调整代码顺序;
|
**※2、修复大多数新安装普通用户的路图标及启动菜单文件路径不存在导致安装APK报错的bugs;**
|
||||||
4、支持提取 apk 图标。
|
3、删除少量冗余代码,调整代码顺序;
|
||||||
|
4、支持提取 apk 图标。
|
||||||

|

|
||||||
|
|
||||||
#### V1.2.3(2021-08-02):
|
#### V1.2.3(2021-08-02):
|
||||||
1、调整部分控件名称;
|
|
||||||
2、调整界面布局及界面风格;
|
1、调整部分控件名称;
|
||||||
|
2、调整界面布局及界面风格;
|
||||||

|

|
||||||
|
|
||||||
#### V1.2.2(2021-07-11):
|
#### V1.2.2(2021-07-11):
|
||||||
1、对程序错误的显示更加人性化;
|
|
||||||
2、对 icon 的获取方式进行了升级;
|
1、对程序错误的显示更加人性化;
|
||||||
3、增加了注释、删除部分冗余代码。
|
2、对 icon 的获取方式进行了升级;
|
||||||
|
3、增加了注释、删除部分冗余代码。
|
||||||

|

|
||||||
|
|
||||||
#### V1.2.1(2021-07-02):
|
#### V1.2.1(2021-07-02):
|
||||||
**※1、进行了安装方式的修改(不使用 adb),修复原无法安装和卸载的问题;**
|
|
||||||
2、进行了部分优化;
|
**※1、进行了安装方式的修改(不使用 adb),修复原无法安装和卸载的问题;**
|
||||||
3、进行了功能缩水;
|
2、进行了部分优化;
|
||||||
4、修复 deb 打包错误。
|
3、进行了功能缩水;
|
||||||
|
4、修复 deb 打包错误。
|
||||||

|

|
||||||
|
|
||||||
#### V1.2.0(2021-06-06):
|
#### V1.2.0(2021-06-06):
|
||||||
1、支持安装自动添加快捷方式、卸载删除快捷方式;
|
|
||||||
2、支持使用包名或 APK 文件卸载程序;
|
1、支持安装自动添加快捷方式、卸载删除快捷方式;
|
||||||
3、支持查看安装的所有包名;
|
2、支持使用包名或 APK 文件卸载程序;
|
||||||
4、进行了部分优化
|
3、支持查看安装的所有包名;
|
||||||

|
4、进行了部分优化
|
||||||
|

|
||||||
|
|
||||||
#### V1.1.0(2021-05-30):
|
#### V1.1.0(2021-05-30):
|
||||||
|
|
||||||
1、修改了因编写时出现的中、英文混用的情况
|
1、修改了因编写时出现的中、英文混用的情况
|
||||||
2、支持一键连接默认 IP
|
2、支持一键连接默认 IP
|
||||||
3、修复在不连接设备直接选择 apk 安装时会卡住的问题
|
3、修复在不连接设备直接选择 apk 安装时会卡住的问题
|
||||||
@@ -249,107 +295,121 @@ FileNotFoundError: [Errno 2] No such file or directory: '/home/gfdgd_xi/.local/s
|
|||||||

|

|
||||||
|
|
||||||
#### V1.0.0(2021-05-29):
|
#### V1.0.0(2021-05-29):
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
### 源码安装教程
|
### 源码安装教程
|
||||||
按下 <kbd>Ctrl</kbd>+<kbd>Alt</kbd>+<kbd>T</kbd> 打开终端,按以下内容操作:
|
|
||||||
1. 安装所需依赖
|
按下 `<kbd>`Ctrl`</kbd>`+`<kbd>`Alt`</kbd>`+`<kbd>`T`</kbd>` 打开终端,按以下内容操作:
|
||||||
|
|
||||||
|
1. 安装所需依赖
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo apt install make
|
sudo apt install make
|
||||||
```
|
```
|
||||||
|
|
||||||
2. 下载本程序
|
2. 下载本程序
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git clone https://gitee.com/gfdgd-xi/uengine-runner.git
|
git clone https://gitee.com/gfdgd-xi/uengine-runner.git
|
||||||
```
|
```
|
||||||
|
|
||||||
3. 运行本程序
|
3. 运行本程序
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd uengine-runner
|
cd uengine-runner
|
||||||
make run
|
make run
|
||||||
```
|
```
|
||||||
|
|
||||||
如果你想要安装到系统,只需要输入:
|
如果你想要安装到系统,只需要输入:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
make install
|
make install
|
||||||
```
|
```
|
||||||
即可
|
|
||||||
|
即可
|
||||||
|
|
||||||
### 使用说明
|
### 使用说明
|
||||||
1、需要你有使用 root 权限的能力;
|
|
||||||
2、需要安装 UEngine 才能使用,UOS建议在商店安装一个安卓应用,让系统自动安装 UEngine 及相关的依赖包;
|
1、需要你有使用 root 权限的能力;
|
||||||
3、提取 apk 图标的 apk 路径以“安装 apk”那栏为准;
|
2、需要安装 UEngine 才能使用,UOS建议在商店安装一个安卓应用,让系统自动安装 UEngine 及相关的依赖包;
|
||||||
4、如果报错是有关产生 .deksotp 文件有关,一般可以打开程序列表运行。如果想要连接其他手机,请使用 1.2.0 以前的版本,可以使用 adb 连接。
|
3、提取 apk 图标的 apk 路径以“安装 apk”那栏为准;
|
||||||
|
4、如果报错是有关产生 .deksotp 文件有关,一般可以打开程序列表运行。如果想要连接其他手机,请使用 1.2.0 以前的版本,可以使用 adb 连接。
|
||||||
|
|
||||||
### 故障排除
|
### 故障排除
|
||||||
|
|
||||||
提 issue 最好,当然有些问题自己无法解决,请大佬 push 一下
|
提 issue 最好,当然有些问题自己无法解决,请大佬 push 一下
|
||||||
如果出现故障,尝试终端运行,如果是可以自行解决的问题,就**自行解决**,如果可以就**提 issues 并提供解决方案**,不行就**提 isscue 并提供程序和终端报错以及程序版本**
|
如果出现故障,尝试终端运行,如果是可以自行解决的问题,就**自行解决**,如果可以就**提 issues 并提供解决方案**,不行就**提 isscue 并提供程序和终端报错以及程序版本**
|
||||||
|
|
||||||
### 已知问题
|
### 已知问题
|
||||||
<p align="center"><img src='https://bbs.deepin.org/assets/image/raccoon/[sad].gif'></p>
|
|
||||||
|
|
||||||

|
<p align="center"><img src='https://bbs.deepin.org/assets/image/raccoon/[sad].gif'></p>
|
||||||
|
|
||||||
|

|
||||||
部分 app 无法读取出图片,已知:
|
部分 app 无法读取出图片,已知:
|
||||||
| 程序 | 下载链接 |
|
|
||||||
| :-: | :-: |
|
| 程序 | 下载链接 |
|
||||||
| Firefox For Android | https://www.firefox.com.cn/download/ |
|
| :--------------------: | :------------------------------------: |
|
||||||
| 网易云音乐 For Android | https://music.163.com/#/download |
|
| Firefox For Android | https://www.firefox.com.cn/download/ |
|
||||||
| 抖音 | https://www.wandoujia.com/apps/7461948 |
|
| 网易云音乐 For Android | https://music.163.com/#/download |
|
||||||
| 360 手机浏览器 | https://mse.360.cn/ |
|
| 抖音 | https://www.wandoujia.com/apps/7461948 |
|
||||||
| E-Go | http://www.xiaojump.com/ |
|
| 360 手机浏览器 | https://mse.360.cn/ |
|
||||||
| 其他待测试…… | 其他待测试…… |
|
| E-Go | http://www.xiaojump.com/ |
|
||||||
Hyperbowl是电脑游戏,如果是手机版应该是HyperBowl Classic,但没官网
|
| 其他待测试…… | 其他待测试…… |
|
||||||
|
|
||||||
**注意:提取不出图标不代表未安装成功!**
|
**注意:提取不出图标不代表未安装成功!**
|
||||||
|
|
||||||
|
|
||||||
### 贡献
|
### 贡献
|
||||||
<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 |
|
| gfdgd xi | 3025613752@qq.com |
|
||||||
| 柚子 | https://gitee.com/Limexb |
|
| actionchen | 917981399@qq.com |
|
||||||
| 星空露光 | https://gitee.com/Cynorkyle |
|
| 柚子 | https://gitee.com/Limexb |
|
||||||
|
| 星空露光 | https://gitee.com/Cynorkyle |
|
||||||
| 为什么您不喜欢熊出没和阿布呢 | https://weibo.com/u/7755040136 |
|
| 为什么您不喜欢熊出没和阿布呢 | 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 |
|
| 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 运行器的部分技术介绍
|
### 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://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-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
13
RemovePycacheFile.py
Executable 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.
177
getxmlimg.py-bak
Executable file
177
getxmlimg.py-bak
Executable 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)
|
||||||
|
|
||||||
@@ -5,7 +5,7 @@
|
|||||||
"https://github.com/gfdgd-xi/uengine-runner",
|
"https://github.com/gfdgd-xi/uengine-runner",
|
||||||
"https://gitlink.org.cn/gfdgd_xi/uengine-runner"
|
"https://gitlink.org.cn/gfdgd_xi/uengine-runner"
|
||||||
],
|
],
|
||||||
"Version": "1.8.2",
|
"Version": "1.8.3",
|
||||||
"System": "Linux(deepin/UOS)",
|
"System": "Linux(deepin/UOS)",
|
||||||
"Tips": [
|
"Tips": [
|
||||||
"更多可见:https://gitee.com/gfdgd-xi/uengine-runner/wikis 或程序的更多帮助",
|
"更多可见:https://gitee.com/gfdgd-xi/uengine-runner/wikis 或程序的更多帮助",
|
||||||
@@ -23,6 +23,12 @@
|
|||||||
"5、如果想要使用adb连接UEngine或其他手机,请使用 1.2.0 以前的版本。(如需连接UEngine请安装adb补丁)"
|
"5、如果想要使用adb连接UEngine或其他手机,请使用 1.2.0 以前的版本。(如需连接UEngine请安装adb补丁)"
|
||||||
],
|
],
|
||||||
"Update": [
|
"Update": [
|
||||||
|
"<b>V1.8.3:</b>",
|
||||||
|
"※1、修复安装/打包程序时出现找不到图标的问题;",
|
||||||
|
"※2、修复部分无法正确获取程序中文名和 Activity 的问题;",
|
||||||
|
"※3、修复在运行器内打开打包器不会自动填充打包器 APK 路径;",
|
||||||
|
"※4、问题反馈新增论坛反馈入口。",
|
||||||
|
"",
|
||||||
"<b>V1.8.2:</b>",
|
"<b>V1.8.2:</b>",
|
||||||
"※1、重新恢复 uengine-installer For Ubuntu",
|
"※1、重新恢复 uengine-installer For Ubuntu",
|
||||||
"※2、修复 postrm 的问题",
|
"※2、修复 postrm 的问题",
|
||||||
@@ -199,27 +205,28 @@
|
|||||||
"11、deepin 终端",
|
"11、deepin 终端",
|
||||||
"……"
|
"……"
|
||||||
],
|
],
|
||||||
"Time": "2022年08月30日",
|
"Time": "2022年12月18日",
|
||||||
"Contribute": [
|
"Contribute": [
|
||||||
"<b>感谢以下用户提供的问题、建议、图标、代码等,如果有遗漏,请及时与开发者联系添加,以及如果侵犯到您的合法权益,也及时与开发者联系:</p>",
|
"<b>感谢以下用户提供的问题、建议、图标、代码等,如果有遗漏,请及时与开发者联系添加,以及如果侵犯到您的合法权益,也及时与开发者联系:</p>",
|
||||||
"<hr>",
|
"<hr>",
|
||||||
"感谢 Bail Pr 修复Python主版本号判断时潜在的问题的补丁",
|
"感谢 Bail、shenmo、Allen 反馈的图标无法正常拷贝的问题;",
|
||||||
"感谢 麻木法师(1312580754) 在星火应用商店QQ交流群展示的接口及其原理",
|
"感谢 Bail Pr 修复Python主版本号判断时潜在的问题的补丁;",
|
||||||
"感谢 Bail(https://github.com/BailPlus) 修复的函数未输入密码自动回车的 bug",
|
"感谢 麻木法师(1312580754) 在星火应用商店QQ交流群展示的接口及其原理;",
|
||||||
"感谢 actionchen(917981399@qq.com) 提供了新版页面布局(1.3.0 ~ 最新版本)以及布局代码(1.3.0 ~ 1.7.0)",
|
"感谢 Bail(https://github.com/BailPlus) 修复的函数未输入密码自动回车的 bug;",
|
||||||
"感谢 柚子(https://gitee.com/Limexb) 提供了 UEngine 构建 Root 镜像脚本",
|
"感谢 actionchen(917981399@qq.com) 提供了新版页面布局(1.3.0 ~ 最新版本)以及布局代码(1.3.0 ~ 1.7.0);",
|
||||||
"感谢 星空露光(https://gitee.com/Cynorkyle) 制作了 UEngine 新版图标和安装应用时能选择应用分类的建议",
|
"感谢 柚子(https://gitee.com/Limexb) 提供了 UEngine 构建 Root 镜像脚本;",
|
||||||
"感谢 shenmo(jifengshenmo@outlook.com) 反馈了许多程序的问题以及提供了 UEngine 在 Ubuntu 上的安装脚本",
|
"感谢 星空露光(https://gitee.com/Cynorkyle) 制作了 UEngine 新版图标和安装应用时能选择应用分类的建议;",
|
||||||
"感谢 desert(https://gitee.com/desert741) 提供了给软件增加启动成功后自动调整分辨率的功能的建议",
|
"感谢 shenmo(jifengshenmo@outlook.com) 反馈了许多程序的问题以及提供了 UEngine 在 Ubuntu 上的安装脚本;",
|
||||||
"感谢 云思浮(https://gitee.com/foresee_io) 反馈的 1.3.0 依赖缺失问题",
|
"感谢 desert(https://gitee.com/desert741) 提供了给软件增加启动成功后自动调整分辨率的功能的建议;",
|
||||||
"感谢 miaoys(https://bbs.deepin.org/user/271467)、zccrs(https://bbs.deepin.org/user/277780) 等用户反馈希望程序能和与系统 DTK 主题协调的建议",
|
"感谢 云思浮(https://gitee.com/foresee_io) 反馈的 1.3.0 依赖缺失问题;",
|
||||||
"感谢 jiutian123(https://bbs.deepin.org/user/258825) 反馈的 1.5.2、1.5.3 存在问题",
|
"感谢 miaoys(https://bbs.deepin.org/user/271467)、zccrs(https://bbs.deepin.org/user/277780) 等用户反馈希望程序能和与系统 DTK 主题协调的建议;",
|
||||||
"感谢 kero990(https://bbs.deepin.org/user/277932) 反馈的 README 表示不清的问题",
|
"感谢 jiutian123(https://bbs.deepin.org/user/258825) 反馈的 1.5.2、1.5.3 存在问题;",
|
||||||
"感谢 wang(https://gitee.com/wang1279476881) 反馈的 1.6.0 左键打不开 “安装与卸载APK”和打包时 APK 版本号开头带 V 无法正常打包的问题",
|
"感谢 kero990(https://bbs.deepin.org/user/277932) 反馈的 README 表示不清的问题;",
|
||||||
"感谢 通天灵宝(https://bbs.deepin.org/user/137230)、wuhaiou123(https://bbs.chinauos.com/zh/user/309117) 反馈的 图标生成错误导致无法生成 .desktop 文件的问题",
|
"感谢 wang(https://gitee.com/wang1279476881) 反馈的 1.6.0 左键打不开 “安装与卸载APK”和打包时 APK 版本号开头带 V 无法正常打包的问题;",
|
||||||
"感谢 潜伏(https://bbs.chinauos.com/zh/user/303339) 反馈的右键支持安装/卸载的建议",
|
"感谢 通天灵宝(https://bbs.deepin.org/user/137230)、wuhaiou123(https://bbs.chinauos.com/zh/user/309117) 反馈的 图标生成错误导致无法生成 .desktop 文件的问题;",
|
||||||
"感谢 z***g@gmx.de(https://bbs.chinauos.com/zh/user/312017) 反馈的 UEngine 更新后 uengine-launch.sh 的社区版检测问题",
|
"感谢 潜伏(https://bbs.chinauos.com/zh/user/303339) 反馈的右键支持安装/卸载的建议;",
|
||||||
"参考 忘记、过去(https://bbs.deepin.org/user/154730) 的帖子《如何更优雅地使用 pkexec》(https://bbs.deepin.org/post/202966)",
|
"感谢 z***g@gmx.de(https://bbs.chinauos.com/zh/user/312017) 反馈的 UEngine 更新后 uengine-launch.sh 的社区版检测问题;",
|
||||||
"感谢 U+解答组们 反馈的 1.8.0 带路径无法正常安装 APK 的问题"
|
"参考 忘记、过去(https://bbs.deepin.org/user/154730) 的帖子《如何更优雅地使用 pkexec》(https://bbs.deepin.org/post/202966);",
|
||||||
|
"感谢 U+解答组们 反馈的 1.8.0 带空格路径无法正常安装 APK 的问题。"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -411,6 +411,7 @@ def GetApkActivityName(apkFilePath: "apk 所在路径")->"获取 apk Activity":
|
|||||||
line = line.replace("label=", "")
|
line = line.replace("label=", "")
|
||||||
line = line.replace("icon=", "")
|
line = line.replace("icon=", "")
|
||||||
return line
|
return line
|
||||||
|
return f"{GetApkPackageName(apkFilePath)}.Main"
|
||||||
|
|
||||||
# 获取 apk 包名
|
# 获取 apk 包名
|
||||||
def GetApkPackageName(apkFilePath: "apk 所在路径")->"获取 apk 包名":
|
def GetApkPackageName(apkFilePath: "apk 所在路径")->"获取 apk 包名":
|
||||||
@@ -483,11 +484,17 @@ Type=Application
|
|||||||
# 获取软件的中文名称
|
# 获取软件的中文名称
|
||||||
def GetApkChineseLabel(apkFilePath)->"获取软件的中文名称":
|
def GetApkChineseLabel(apkFilePath)->"获取软件的中文名称":
|
||||||
info = GetApkInformation(apkFilePath)
|
info = GetApkInformation(apkFilePath)
|
||||||
|
name = None
|
||||||
for line in info.split('\n'):
|
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:
|
if "application-label:" in line:
|
||||||
line = line.replace("application-label:", "")
|
line = line.replace("application-label:", "")
|
||||||
line = line.replace("'", "")
|
line = line.replace("'", "")
|
||||||
return line
|
name = line
|
||||||
|
return name
|
||||||
|
|
||||||
# 保存apk图标
|
# 保存apk图标
|
||||||
def SaveApkIcon(apkFilePath, iconSavePath)->"保存 apk 文件的图标":
|
def SaveApkIcon(apkFilePath, iconSavePath)->"保存 apk 文件的图标":
|
||||||
@@ -680,7 +687,7 @@ def CleanAllUengineDesktopLink():
|
|||||||
|
|
||||||
# 打开 uengine 应用打包器
|
# 打开 uengine 应用打包器
|
||||||
def OpenUengineDebBuilder():
|
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 根目录
|
# 打开 uengine 根目录
|
||||||
def OpenUengineRootData():
|
def OpenUengineRootData():
|
||||||
|
|||||||
@@ -1,22 +1,18 @@
|
|||||||
Package: com.gitee.uengine.runner.spark
|
Package: com.gitee.uengine.runner.spark
|
||||||
Source: com.gitee.uengine.runner.spark
|
Source: com.gitee.uengine.runner.spark
|
||||||
Replaces: spark-uengine-runner, com.gitee.uengine.runner.spark.ubuntu
|
Replaces: spark-uengine-runner, com.gitee.uengine.runner.spark.ubuntu
|
||||||
Version: 1.8.2-uos
|
Version: 1.8.3
|
||||||
Architecture: all
|
Architecture: all
|
||||||
Section: utils
|
Section: utils
|
||||||
Installed-Size: 1600
|
Installed-Size: 1544
|
||||||
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>
|
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
|
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)
|
Recommends: uengine, deepin-elf-verify (>= 0.0.16.7-1)
|
||||||
Priority: optional
|
Priority: optional
|
||||||
Conflicts: spark-uengine-apk-builder, com.gitee.uengine.runner.spark.ubuntu
|
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]
|
Homepage: https://gitee.com/gfdgd-xi/uengine-runner
|
||||||
Description: UEngine 运行器,1.8.2 更新内容:
|
Description: UEngine 运行器,1.8.3 更新内容:
|
||||||
※1、重新恢复 uengine-installer For Ubuntu
|
※1、修复安装/打包程序时出现找不到图标的问题;
|
||||||
※2、修复 postrm 的问题
|
※2、修复部分无法正确获取程序中文名和 Activity 的问题
|
||||||
※3、修复“添加UEngine应用快捷方式出现问题”的问题
|
※3、修复在运行器内打开打包器不会自动填充打包器 APK 路径
|
||||||
※4、修复打包器无参数问题
|
※4、问题反馈新增论坛反馈入口
|
||||||
※5、打包器默认勾选“使用 uengine-dc 前缀”
|
|
||||||
6、修复Python主版本号判断时潜在的问题(By Bail)
|
|
||||||
7、新增部分资源入口
|
|
||||||
开发/参与者: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>
|
|
||||||
|
|||||||
@@ -1,9 +1,11 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
# 使用 pip 安装所需库
|
# 使用 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 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 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 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
|
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-runner /usr/bin/uengine-runner
|
||||||
ln -s /opt/apps/com.gitee.uengine.runner.spark/files/uengine-apk-builder /usr/bin/uengine-apk-builder
|
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 的问题,省略
|
# 因为 Ubuntu 的问题,省略
|
||||||
gtk-update-icon-cache /usr/share/icons/bloom > /dev/null | true
|
gtk-update-icon-cache /usr/share/icons/bloom > /dev/null | true
|
||||||
# 向服务器返回安装数加1(不显示内容且忽略错误)
|
# 向服务器返回安装数加1(不显示内容且忽略错误)
|
||||||
curl https://304626p927.goho.co/uengine-runner/Install.php?Version=1.8.1-1 -s > /dev/null | true
|
python3 /opt/apps/com.gitee.uengine.runner.spark/files/Download.py 1.8.3 > /dev/null | true
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/defult.png
Executable file
BIN
new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/defult.png
Executable file
Binary file not shown.
|
After Width: | Height: | Size: 35 KiB |
@@ -5,7 +5,7 @@
|
|||||||
"https://github.com/gfdgd-xi/uengine-runner",
|
"https://github.com/gfdgd-xi/uengine-runner",
|
||||||
"https://gitlink.org.cn/gfdgd_xi/uengine-runner"
|
"https://gitlink.org.cn/gfdgd_xi/uengine-runner"
|
||||||
],
|
],
|
||||||
"Version": "1.8.2",
|
"Version": "1.8.3",
|
||||||
"System": "Linux(deepin/UOS)",
|
"System": "Linux(deepin/UOS)",
|
||||||
"Tips": [
|
"Tips": [
|
||||||
"更多可见:https://gitee.com/gfdgd-xi/uengine-runner/wikis 或程序的更多帮助",
|
"更多可见:https://gitee.com/gfdgd-xi/uengine-runner/wikis 或程序的更多帮助",
|
||||||
@@ -23,6 +23,12 @@
|
|||||||
"5、如果想要使用adb连接UEngine或其他手机,请使用 1.2.0 以前的版本。(如需连接UEngine请安装adb补丁)"
|
"5、如果想要使用adb连接UEngine或其他手机,请使用 1.2.0 以前的版本。(如需连接UEngine请安装adb补丁)"
|
||||||
],
|
],
|
||||||
"Update": [
|
"Update": [
|
||||||
|
"<b>V1.8.3:</b>",
|
||||||
|
"※1、修复安装/打包程序时出现找不到图标的问题;",
|
||||||
|
"※2、修复部分无法正确获取程序中文名和 Activity 的问题;",
|
||||||
|
"※3、修复在运行器内打开打包器不会自动填充打包器 APK 路径;",
|
||||||
|
"※4、问题反馈新增论坛反馈入口。",
|
||||||
|
"",
|
||||||
"<b>V1.8.2:</b>",
|
"<b>V1.8.2:</b>",
|
||||||
"※1、重新恢复 uengine-installer For Ubuntu",
|
"※1、重新恢复 uengine-installer For Ubuntu",
|
||||||
"※2、修复 postrm 的问题",
|
"※2、修复 postrm 的问题",
|
||||||
@@ -199,27 +205,28 @@
|
|||||||
"11、deepin 终端",
|
"11、deepin 终端",
|
||||||
"……"
|
"……"
|
||||||
],
|
],
|
||||||
"Time": "2022年08月30日",
|
"Time": "2022年12月18日",
|
||||||
"Contribute": [
|
"Contribute": [
|
||||||
"<b>感谢以下用户提供的问题、建议、图标、代码等,如果有遗漏,请及时与开发者联系添加,以及如果侵犯到您的合法权益,也及时与开发者联系:</p>",
|
"<b>感谢以下用户提供的问题、建议、图标、代码等,如果有遗漏,请及时与开发者联系添加,以及如果侵犯到您的合法权益,也及时与开发者联系:</p>",
|
||||||
"<hr>",
|
"<hr>",
|
||||||
"感谢 Bail Pr 修复Python主版本号判断时潜在的问题的补丁",
|
"感谢 Bail、shenmo、Allen 反馈的图标无法正常拷贝的问题;",
|
||||||
"感谢 麻木法师(1312580754) 在星火应用商店QQ交流群展示的接口及其原理",
|
"感谢 Bail Pr 修复Python主版本号判断时潜在的问题的补丁;",
|
||||||
"感谢 Bail(https://github.com/BailPlus) 修复的函数未输入密码自动回车的 bug",
|
"感谢 麻木法师(1312580754) 在星火应用商店QQ交流群展示的接口及其原理;",
|
||||||
"感谢 actionchen(917981399@qq.com) 提供了新版页面布局(1.3.0 ~ 最新版本)以及布局代码(1.3.0 ~ 1.7.0)",
|
"感谢 Bail(https://github.com/BailPlus) 修复的函数未输入密码自动回车的 bug;",
|
||||||
"感谢 柚子(https://gitee.com/Limexb) 提供了 UEngine 构建 Root 镜像脚本",
|
"感谢 actionchen(917981399@qq.com) 提供了新版页面布局(1.3.0 ~ 最新版本)以及布局代码(1.3.0 ~ 1.7.0);",
|
||||||
"感谢 星空露光(https://gitee.com/Cynorkyle) 制作了 UEngine 新版图标和安装应用时能选择应用分类的建议",
|
"感谢 柚子(https://gitee.com/Limexb) 提供了 UEngine 构建 Root 镜像脚本;",
|
||||||
"感谢 shenmo(jifengshenmo@outlook.com) 反馈了许多程序的问题以及提供了 UEngine 在 Ubuntu 上的安装脚本",
|
"感谢 星空露光(https://gitee.com/Cynorkyle) 制作了 UEngine 新版图标和安装应用时能选择应用分类的建议;",
|
||||||
"感谢 desert(https://gitee.com/desert741) 提供了给软件增加启动成功后自动调整分辨率的功能的建议",
|
"感谢 shenmo(jifengshenmo@outlook.com) 反馈了许多程序的问题以及提供了 UEngine 在 Ubuntu 上的安装脚本;",
|
||||||
"感谢 云思浮(https://gitee.com/foresee_io) 反馈的 1.3.0 依赖缺失问题",
|
"感谢 desert(https://gitee.com/desert741) 提供了给软件增加启动成功后自动调整分辨率的功能的建议;",
|
||||||
"感谢 miaoys(https://bbs.deepin.org/user/271467)、zccrs(https://bbs.deepin.org/user/277780) 等用户反馈希望程序能和与系统 DTK 主题协调的建议",
|
"感谢 云思浮(https://gitee.com/foresee_io) 反馈的 1.3.0 依赖缺失问题;",
|
||||||
"感谢 jiutian123(https://bbs.deepin.org/user/258825) 反馈的 1.5.2、1.5.3 存在问题",
|
"感谢 miaoys(https://bbs.deepin.org/user/271467)、zccrs(https://bbs.deepin.org/user/277780) 等用户反馈希望程序能和与系统 DTK 主题协调的建议;",
|
||||||
"感谢 kero990(https://bbs.deepin.org/user/277932) 反馈的 README 表示不清的问题",
|
"感谢 jiutian123(https://bbs.deepin.org/user/258825) 反馈的 1.5.2、1.5.3 存在问题;",
|
||||||
"感谢 wang(https://gitee.com/wang1279476881) 反馈的 1.6.0 左键打不开 “安装与卸载APK”和打包时 APK 版本号开头带 V 无法正常打包的问题",
|
"感谢 kero990(https://bbs.deepin.org/user/277932) 反馈的 README 表示不清的问题;",
|
||||||
"感谢 通天灵宝(https://bbs.deepin.org/user/137230)、wuhaiou123(https://bbs.chinauos.com/zh/user/309117) 反馈的 图标生成错误导致无法生成 .desktop 文件的问题",
|
"感谢 wang(https://gitee.com/wang1279476881) 反馈的 1.6.0 左键打不开 “安装与卸载APK”和打包时 APK 版本号开头带 V 无法正常打包的问题;",
|
||||||
"感谢 潜伏(https://bbs.chinauos.com/zh/user/303339) 反馈的右键支持安装/卸载的建议",
|
"感谢 通天灵宝(https://bbs.deepin.org/user/137230)、wuhaiou123(https://bbs.chinauos.com/zh/user/309117) 反馈的 图标生成错误导致无法生成 .desktop 文件的问题;",
|
||||||
"感谢 z***g@gmx.de(https://bbs.chinauos.com/zh/user/312017) 反馈的 UEngine 更新后 uengine-launch.sh 的社区版检测问题",
|
"感谢 潜伏(https://bbs.chinauos.com/zh/user/303339) 反馈的右键支持安装/卸载的建议;",
|
||||||
"参考 忘记、过去(https://bbs.deepin.org/user/154730) 的帖子《如何更优雅地使用 pkexec》(https://bbs.deepin.org/post/202966)",
|
"感谢 z***g@gmx.de(https://bbs.chinauos.com/zh/user/312017) 反馈的 UEngine 更新后 uengine-launch.sh 的社区版检测问题;",
|
||||||
"感谢 U+解答组们 反馈的 1.8.0 带路径无法正常安装 APK 的问题"
|
"参考 忘记、过去(https://bbs.deepin.org/user/154730) 的帖子《如何更优雅地使用 pkexec》(https://bbs.deepin.org/post/202966);",
|
||||||
|
"感谢 U+解答组们 反馈的 1.8.0 带空格路径无法正常安装 APK 的问题。"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -293,6 +293,7 @@ def GetApkActivityName(apkFilePath):
|
|||||||
line = line.replace("label=", "")
|
line = line.replace("label=", "")
|
||||||
line = line.replace("icon=", "")
|
line = line.replace("icon=", "")
|
||||||
return line
|
return line
|
||||||
|
return f"{GetApkPackageName(apkFilePath, False)}.Main"
|
||||||
|
|
||||||
def GetApkPackageName(apkFilePath, setting):
|
def GetApkPackageName(apkFilePath, setting):
|
||||||
# 提示:此函数有被为此程序适配而调整,如果需要最原始(无调整的)请使用主程序(此为附属组件)里的函数
|
# 提示:此函数有被为此程序适配而调整,如果需要最原始(无调整的)请使用主程序(此为附属组件)里的函数
|
||||||
@@ -341,13 +342,20 @@ Type=Application
|
|||||||
'''.format(packageName, activityName, showName, iconPath, showName, showName)
|
'''.format(packageName, activityName, showName, iconPath, showName, showName)
|
||||||
write_txt(savePath, things)
|
write_txt(savePath, things)
|
||||||
|
|
||||||
def GetApkChineseLabel(apkFilePath):
|
# 获取软件的中文名称
|
||||||
|
def GetApkChineseLabel(apkFilePath)->"获取软件的中文名称":
|
||||||
info = GetApkInformation(apkFilePath)
|
info = GetApkInformation(apkFilePath)
|
||||||
|
name = None
|
||||||
for line in info.split('\n'):
|
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:
|
if "application-label:" in line:
|
||||||
line = line.replace("application-label:", "")
|
line = line.replace("application-label:", "")
|
||||||
line = line.replace("'", "")
|
line = line.replace("'", "")
|
||||||
return line
|
name = line
|
||||||
|
return name
|
||||||
|
|
||||||
#合并两个函数到一起
|
#合并两个函数到一起
|
||||||
def SaveApkIcon(apkFilePath, iconSavePath)->"获取 apk 文件的图标":
|
def SaveApkIcon(apkFilePath, iconSavePath)->"获取 apk 文件的图标":
|
||||||
@@ -367,11 +375,11 @@ def SaveApkIcon(apkFilePath, iconSavePath)->"获取 apk 文件的图标":
|
|||||||
saveIconFile.write(iconData)
|
saveIconFile.write(iconData)
|
||||||
return
|
return
|
||||||
print("Show defult icon")
|
print("Show defult icon")
|
||||||
shutil.copy(programPath + "/defult.png", iconSavePath)
|
shutil.copy(programPath + "/defult.svg", iconSavePath)
|
||||||
except:
|
except:
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
print("Error, show defult icon")
|
print("Error, show defult icon")
|
||||||
shutil.copy(programPath + "/defult.png", iconSavePath)
|
shutil.copy(programPath + "/defult.svg", iconSavePath)
|
||||||
|
|
||||||
def TextboxAddText1(message):
|
def TextboxAddText1(message):
|
||||||
global textbox1
|
global textbox1
|
||||||
|
|||||||
@@ -411,6 +411,7 @@ def GetApkActivityName(apkFilePath: "apk 所在路径")->"获取 apk Activity":
|
|||||||
line = line.replace("label=", "")
|
line = line.replace("label=", "")
|
||||||
line = line.replace("icon=", "")
|
line = line.replace("icon=", "")
|
||||||
return line
|
return line
|
||||||
|
return f"{GetApkPackageName(apkFilePath)}.Main"
|
||||||
|
|
||||||
# 获取 apk 包名
|
# 获取 apk 包名
|
||||||
def GetApkPackageName(apkFilePath: "apk 所在路径")->"获取 apk 包名":
|
def GetApkPackageName(apkFilePath: "apk 所在路径")->"获取 apk 包名":
|
||||||
@@ -483,11 +484,17 @@ Type=Application
|
|||||||
# 获取软件的中文名称
|
# 获取软件的中文名称
|
||||||
def GetApkChineseLabel(apkFilePath)->"获取软件的中文名称":
|
def GetApkChineseLabel(apkFilePath)->"获取软件的中文名称":
|
||||||
info = GetApkInformation(apkFilePath)
|
info = GetApkInformation(apkFilePath)
|
||||||
|
name = None
|
||||||
for line in info.split('\n'):
|
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:
|
if "application-label:" in line:
|
||||||
line = line.replace("application-label:", "")
|
line = line.replace("application-label:", "")
|
||||||
line = line.replace("'", "")
|
line = line.replace("'", "")
|
||||||
return line
|
name = line
|
||||||
|
return name
|
||||||
|
|
||||||
# 保存apk图标
|
# 保存apk图标
|
||||||
def SaveApkIcon(apkFilePath, iconSavePath)->"保存 apk 文件的图标":
|
def SaveApkIcon(apkFilePath, iconSavePath)->"保存 apk 文件的图标":
|
||||||
@@ -680,7 +687,7 @@ def CleanAllUengineDesktopLink():
|
|||||||
|
|
||||||
# 打开 uengine 应用打包器
|
# 打开 uengine 应用打包器
|
||||||
def OpenUengineDebBuilder():
|
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 根目录
|
# 打开 uengine 根目录
|
||||||
def OpenUengineRootData():
|
def OpenUengineRootData():
|
||||||
|
|||||||
@@ -49,6 +49,9 @@ def OpenGithubIssues():
|
|||||||
def OpenGitlinkIssues():
|
def OpenGitlinkIssues():
|
||||||
webbrowser.open_new_tab("https://www.gitlink.org.cn/gfdgd_xi/uengine-runner/issues")
|
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()->"获取用户主目录":
|
def get_home()->"获取用户主目录":
|
||||||
return os.path.expanduser('~')
|
return os.path.expanduser('~')
|
||||||
@@ -77,10 +80,12 @@ otherUpload = QtWidgets.QHBoxLayout()
|
|||||||
giteeButton = QtWidgets.QPushButton("Gitee Issues")
|
giteeButton = QtWidgets.QPushButton("Gitee Issues")
|
||||||
githubButton = QtWidgets.QPushButton("Github Issues")
|
githubButton = QtWidgets.QPushButton("Github Issues")
|
||||||
gitlinkButton = QtWidgets.QPushButton("Gitlink Issues")
|
gitlinkButton = QtWidgets.QPushButton("Gitlink Issues")
|
||||||
|
forumButton = QtWidgets.QPushButton("论坛反馈")
|
||||||
otherUpload.addWidget(QtWidgets.QLabel("如果无法正常反馈,可以用其他方式反馈:"))
|
otherUpload.addWidget(QtWidgets.QLabel("如果无法正常反馈,可以用其他方式反馈:"))
|
||||||
otherUpload.addWidget(giteeButton)
|
otherUpload.addWidget(giteeButton)
|
||||||
otherUpload.addWidget(githubButton)
|
otherUpload.addWidget(githubButton)
|
||||||
otherUpload.addWidget(gitlinkButton)
|
otherUpload.addWidget(gitlinkButton)
|
||||||
|
otherUpload.addWidget(forumButton)
|
||||||
otherUpload.addSpacerItem(QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum))
|
otherUpload.addSpacerItem(QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum))
|
||||||
starMenu.addItems(["5分", "4分", "3分", "2分", "1分"])
|
starMenu.addItems(["5分", "4分", "3分", "2分", "1分"])
|
||||||
widgetLayout.addWidget(QtWidgets.QLabel("你的昵称:"), 0, 0, 1, 1)
|
widgetLayout.addWidget(QtWidgets.QLabel("你的昵称:"), 0, 0, 1, 1)
|
||||||
@@ -97,6 +102,7 @@ giteeButton.clicked.connect(OpenGiteeIssues)
|
|||||||
githubButton.clicked.connect(OpenGithubIssues)
|
githubButton.clicked.connect(OpenGithubIssues)
|
||||||
gitlinkButton.clicked.connect(OpenGitlinkIssues)
|
gitlinkButton.clicked.connect(OpenGitlinkIssues)
|
||||||
updateButton.clicked.connect(UpdateButtonClick)
|
updateButton.clicked.connect(UpdateButtonClick)
|
||||||
|
forumButton.clicked.connect(OpenProgramForum)
|
||||||
widget.setLayout(widgetLayout)
|
widget.setLayout(widgetLayout)
|
||||||
window.setCentralWidget(widget)
|
window.setCentralWidget(widget)
|
||||||
window.setWindowTitle(f"UEngine 运行器 {version} 问题/建议反馈")
|
window.setWindowTitle(f"UEngine 运行器 {version} 问题/建议反馈")
|
||||||
|
|||||||
@@ -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>.
|
|
||||||
@@ -293,6 +293,7 @@ def GetApkActivityName(apkFilePath):
|
|||||||
line = line.replace("label=", "")
|
line = line.replace("label=", "")
|
||||||
line = line.replace("icon=", "")
|
line = line.replace("icon=", "")
|
||||||
return line
|
return line
|
||||||
|
return f"{GetApkPackageName(apkFilePath, False)}.Main"
|
||||||
|
|
||||||
def GetApkPackageName(apkFilePath, setting):
|
def GetApkPackageName(apkFilePath, setting):
|
||||||
# 提示:此函数有被为此程序适配而调整,如果需要最原始(无调整的)请使用主程序(此为附属组件)里的函数
|
# 提示:此函数有被为此程序适配而调整,如果需要最原始(无调整的)请使用主程序(此为附属组件)里的函数
|
||||||
@@ -341,13 +342,20 @@ Type=Application
|
|||||||
'''.format(packageName, activityName, showName, iconPath, showName, showName)
|
'''.format(packageName, activityName, showName, iconPath, showName, showName)
|
||||||
write_txt(savePath, things)
|
write_txt(savePath, things)
|
||||||
|
|
||||||
def GetApkChineseLabel(apkFilePath):
|
# 获取软件的中文名称
|
||||||
|
def GetApkChineseLabel(apkFilePath)->"获取软件的中文名称":
|
||||||
info = GetApkInformation(apkFilePath)
|
info = GetApkInformation(apkFilePath)
|
||||||
|
name = None
|
||||||
for line in info.split('\n'):
|
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:
|
if "application-label:" in line:
|
||||||
line = line.replace("application-label:", "")
|
line = line.replace("application-label:", "")
|
||||||
line = line.replace("'", "")
|
line = line.replace("'", "")
|
||||||
return line
|
name = line
|
||||||
|
return name
|
||||||
|
|
||||||
#合并两个函数到一起
|
#合并两个函数到一起
|
||||||
def SaveApkIcon(apkFilePath, iconSavePath)->"获取 apk 文件的图标":
|
def SaveApkIcon(apkFilePath, iconSavePath)->"获取 apk 文件的图标":
|
||||||
@@ -367,11 +375,11 @@ def SaveApkIcon(apkFilePath, iconSavePath)->"获取 apk 文件的图标":
|
|||||||
saveIconFile.write(iconData)
|
saveIconFile.write(iconData)
|
||||||
return
|
return
|
||||||
print("Show defult icon")
|
print("Show defult icon")
|
||||||
shutil.copy(programPath + "/defult.png", iconSavePath)
|
shutil.copy(programPath + "/defult.svg", iconSavePath)
|
||||||
except:
|
except:
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
print("Error, show defult icon")
|
print("Error, show defult icon")
|
||||||
shutil.copy(programPath + "/defult.png", iconSavePath)
|
shutil.copy(programPath + "/defult.svg", iconSavePath)
|
||||||
|
|
||||||
def TextboxAddText1(message):
|
def TextboxAddText1(message):
|
||||||
global textbox1
|
global textbox1
|
||||||
|
|||||||
@@ -49,6 +49,9 @@ def OpenGithubIssues():
|
|||||||
def OpenGitlinkIssues():
|
def OpenGitlinkIssues():
|
||||||
webbrowser.open_new_tab("https://www.gitlink.org.cn/gfdgd_xi/uengine-runner/issues")
|
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()->"获取用户主目录":
|
def get_home()->"获取用户主目录":
|
||||||
return os.path.expanduser('~')
|
return os.path.expanduser('~')
|
||||||
@@ -77,10 +80,12 @@ otherUpload = QtWidgets.QHBoxLayout()
|
|||||||
giteeButton = QtWidgets.QPushButton("Gitee Issues")
|
giteeButton = QtWidgets.QPushButton("Gitee Issues")
|
||||||
githubButton = QtWidgets.QPushButton("Github Issues")
|
githubButton = QtWidgets.QPushButton("Github Issues")
|
||||||
gitlinkButton = QtWidgets.QPushButton("Gitlink Issues")
|
gitlinkButton = QtWidgets.QPushButton("Gitlink Issues")
|
||||||
|
forumButton = QtWidgets.QPushButton("论坛反馈")
|
||||||
otherUpload.addWidget(QtWidgets.QLabel("如果无法正常反馈,可以用其他方式反馈:"))
|
otherUpload.addWidget(QtWidgets.QLabel("如果无法正常反馈,可以用其他方式反馈:"))
|
||||||
otherUpload.addWidget(giteeButton)
|
otherUpload.addWidget(giteeButton)
|
||||||
otherUpload.addWidget(githubButton)
|
otherUpload.addWidget(githubButton)
|
||||||
otherUpload.addWidget(gitlinkButton)
|
otherUpload.addWidget(gitlinkButton)
|
||||||
|
otherUpload.addWidget(forumButton)
|
||||||
otherUpload.addSpacerItem(QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum))
|
otherUpload.addSpacerItem(QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum))
|
||||||
starMenu.addItems(["5分", "4分", "3分", "2分", "1分"])
|
starMenu.addItems(["5分", "4分", "3分", "2分", "1分"])
|
||||||
widgetLayout.addWidget(QtWidgets.QLabel("你的昵称:"), 0, 0, 1, 1)
|
widgetLayout.addWidget(QtWidgets.QLabel("你的昵称:"), 0, 0, 1, 1)
|
||||||
@@ -97,6 +102,7 @@ giteeButton.clicked.connect(OpenGiteeIssues)
|
|||||||
githubButton.clicked.connect(OpenGithubIssues)
|
githubButton.clicked.connect(OpenGithubIssues)
|
||||||
gitlinkButton.clicked.connect(OpenGitlinkIssues)
|
gitlinkButton.clicked.connect(OpenGitlinkIssues)
|
||||||
updateButton.clicked.connect(UpdateButtonClick)
|
updateButton.clicked.connect(UpdateButtonClick)
|
||||||
|
forumButton.clicked.connect(OpenProgramForum)
|
||||||
widget.setLayout(widgetLayout)
|
widget.setLayout(widgetLayout)
|
||||||
window.setCentralWidget(widget)
|
window.setCentralWidget(widget)
|
||||||
window.setWindowTitle(f"UEngine 运行器 {version} 问题/建议反馈")
|
window.setWindowTitle(f"UEngine 运行器 {version} 问题/建议反馈")
|
||||||
|
|||||||
Reference in New Issue
Block a user