From c77bbceeb2209eefbd32353cebac8e0465c2356c Mon Sep 17 00:00:00 2001 From: gfdgd xi <3025613752@qq.com> Date: Sat, 21 May 2022 12:06:17 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=87=BD=E6=95=B0=EF=BC=88?= =?UTF-8?q?=E5=8C=85=E6=8B=AC=E6=89=93=E5=8C=85deb=E7=9A=84=E5=87=BD?= =?UTF-8?q?=E6=95=B0=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/README.md | 37 ++++++---- api/__init__.py | 184 ++++++++++++++++++++++++++++++++++++++++++++---- api/defult.png | Bin 0 -> 35859 bytes main.py | 4 +- 4 files changed, 195 insertions(+), 30 deletions(-) create mode 100644 api/defult.png diff --git a/api/README.md b/api/README.md index 55d7cc4..41cbdf5 100644 --- a/api/README.md +++ b/api/README.md @@ -4,14 +4,16 @@ 2. 部分函数需要 root 权限 3. 这是 UEngine 运行器的函数重构,所以一些 UEngine 运行器上没有的 bug 可能在这个 API 里有 ## ProgramInformation -用于获取一些程序信息,详细如下(此为变量): -| 变量名 | 变量介绍 | +用于获取一些程序信息,详细如下(未特殊表明的是变量,否则是函数): +| 变量/函数名 | 变量/函数介绍 | |:-:|:-:| | programPath | 获取程序所在路径 | | version | API 版本 | | updateTime | 更新时间 | | websize | 程序官网 | | home | 用户 home(用户文件)目录 | +| developer | 参与的开发者列表 | +| DesktopPath() | (函数)用户桌面目录 | ## Check 用于检查 API 所需的东西是否完整,详细如下: @@ -34,8 +36,8 @@ xxx = api.APK("APK 所在路径") 具体函数介绍: | 函数名 | 函数介绍 | |:-:|:-:| -| xxx.install() | 安装这个 APK 包 | -| xxx.uninstall()| 卸载这个 APK 包 | +| xxx.install() | 安装这个 APK 包(需要 Root) | +| xxx.uninstall()| 卸载这个 APK 包(需要 Root) | | xxx.information()| 获取从 aapt 获取到的 APK 信息 | | xxx.activityName() | 获取 APK 的 Activity 信息 | | xxx.packageName() | 获取 APK 包名 | @@ -43,31 +45,36 @@ xxx = api.APK("APK 所在路径") | xxx.saveApkIcon("图标保存路径") | 保存 APK 的图标到指定路径 | | xxx.version() | 获取 APK 版本号 | | xxx.saveDesktopFile("图标保存路径", "快捷方式保存路径") | 保存支持 UEngine 启动的 APK 快捷方式 | +| xxx.run() | 运行该应用(需要保证已经安装) | +| xxx.buildDeb("deb 包保存路径", qianZhui) | 打包为 deb 包(“qianZhui”是布尔值,True代表有前缀为“uengine-dc”,False代表没有前缀) | ## UEngine 用于对 UEngine 进行一点点操控,详细如下: | 函数名 | 函数介绍 | |:-:|:-:| -| RemoveUengineCheck() | 删除 UEngine 的检查脚本 | +| UengineAppManager() | 显示 UEngine 安装应用程序管理器 | +| OpenApp("应用包名", "应用Activity") | 运行指定的应用(需要保证程序已经安装) | +| UengineDataClean() | 清空 UEngine 数据(需要 Root) | +| RemoveUengineCheck() | 删除 UEngine 的检查脚本(需要 Root) | | CPUCheck() | 检查 CPU 是否支持运行 UEngine | -| Services | 用于操控 UEngine 服务的类,见下 | -| InternetBridge | 用于操控 UEngine 网络桥接的类,见下 | +| Services | 用于操控 UEngine 服务的类,见下(需要 Root) | +| InternetBridge | 用于操控 UEngine 网络桥接的类,见下(需要 Root) | ### Services 关于 UEngine 的服务控制: | 函数名 | 函数介绍 | |:-:|:-:| -| Services.Open() | 打开 UEngine 服务 | -| Services.Close() | 关闭 UEngine 服务 | -| Services.Restart() | 重启 UEngine 服务 | +| Services.Open() | 打开 UEngine 服务(需要 Root) | +| Services.Close() | 关闭 UEngine 服务(需要 Root) | +| Services.Restart() | 重启 UEngine 服务(需要 Root) | ### InternetBridge 关于 UEngine 的网络桥接控制: | 函数名 | 函数介绍 | |:-:|:-:| -| InternetBridge.Open() | 打开 UEngine 网络桥接 | -| InternetBridge.Close() | 关闭 UEngine 网络桥接 | -| InternetBridge.Restart() | 重启 UEngine 网络桥接 | -| InternetBridge.Reload() | 重新加载 UEngine 网络桥接 | -| InternetBridge.ForceReload() | 强制加载 UEngine 网络桥接 | +| InternetBridge.Open() | 打开 UEngine 网络桥接(需要 Root) | +| InternetBridge.Close() | 关闭 UEngine 网络桥接(需要 Root) | +| InternetBridge.Restart() | 重启 UEngine 网络桥接(需要 Root) | +| InternetBridge.Reload() | 重新加载 UEngine 网络桥接(需要 Root) | +| InternetBridge.ForceReload() | 强制加载 UEngine 网络桥接(需要 Root) | ## Adb 用于对 Adb 的部分操控 | 函数名 | 函数介绍 | diff --git a/api/__init__.py b/api/__init__.py index a0cd500..623ae8b 100644 --- a/api/__init__.py +++ b/api/__init__.py @@ -1,4 +1,5 @@ import os +import random import shutil import zipfile import traceback @@ -7,10 +8,25 @@ from getxmlimg import getsavexml class ProgramInformation: programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string - version = "1.6.0Alpha1" - updateTime = "2022年05月15日" + version = "1.6.0Alpha2" + updateTime = "2022年05月21日" websize = ["https://gitee.com/gfdgd-xi/uengine-runner", "https://github.com/gfdgd-xi/uengine-runner"] home = os.path.expanduser('~') + developer = ["gfdgd xi", "为什么您不喜欢熊出没和阿布呢"] + # 获取用户桌面目录 + def DesktopPath() -> "获取用户桌面目录": + for line in open(get_home() + "/.config/user-dirs.dirs"): # 以行来读取配置文件 + desktop_index = line.find("XDG_DESKTOP_DIR=\"") # 寻找是否有对应项,有返回 0,没有返回 -1 + if desktop_index != -1: # 如果有对应项 + break # 结束循环 + if desktop_index == -1: # 如果是提前结束,值一定≠-1,如果是没有提前结束,值一定=-1 + return -1 + else: + get = line[17:-2] # 截取桌面目录路径 + get_index = get.find("$HOME") # 寻找是否有对应的项,需要替换内容 + if get != -1: # 如果有 + get = get.replace("$HOME", get_home()) # 则把其替换为用户目录(~) + return get # 返回目录 # 判断程序以正确方式运行 class Check: @@ -27,16 +43,12 @@ class ROOT: class APK: def __init__(self, apkPath): self.apkPath = apkPath - def install(self): os.system("pkexec /usr/bin/uengine-session-launch-helper -- uengine install --apk='{}'".format(self.apkPath)) - def uninstall(self): - os.system("pkexec /usr/bin/uengine-session-launch-helper -- uengine uninstall --pkg='{}'".format(self.apkPath)) - + os.system("pkexec /usr/bin/uengine-session-launch-helper -- uengine uninstall --pkg='{}'".format(self.packageName())) def information(self): return subprocess.getoutput("aapt dump badging '{}'".format(self.apkPath)) - def activityName(self): info = self.information() for line in info.split('\n'): @@ -49,7 +61,6 @@ class APK: line = line.replace("label=", "") line = line.replace("icon=", "") return line - # 获取 apk 包名 def packageName(self): info = self.information() @@ -61,7 +72,6 @@ class APK: line = line.replace("'", "") line = line.replace(" ", "") return line - # 获取软件的中文名称 def chineseLabel(self) -> "获取软件的中文名称": info = self.information() @@ -70,7 +80,6 @@ class APK: line = line.replace("application-label:", "") line = line.replace("'", "") return line - # 保存apk图标 def saveApkIcon(self, iconSavePath) -> "保存 apk 文件的图标": try: @@ -97,7 +106,6 @@ class APK: traceback.print_exc() print("Error, show defult icon") shutil.copy(ProgramInformation.programPath + "/defult.png", iconSavePath) - def version(self): info = self.information() for line in info.split('\n'): @@ -111,7 +119,6 @@ class APK: line = line.replace("'", "") line = line.replace(" ", "") return line - def saveDesktopFile(self, desktopPath, iconPath): showName = self.chineseLabel() if showName == "" or showName == None: @@ -130,8 +137,154 @@ class APK: Type=Application '''.format(self.packageName(), self.activityName(), showName, iconPath, showName, showName) File(desktopPath).write(things) + def run(self): + UEngine.OpenApp(self.packageName(), self.activityName()) + + def buildDeb(self, savePath, qianZhui = True): + tempPath = "/tmp/uengine-apk-builder-{}".format(int(random.randint(0, 1024))) + #RunCommandShow("echo '======================================New===================================='") + #RunCommandShow("echo '创建目录'") + os.makedirs("{}/DEBIAN".format(tempPath)) + os.makedirs("{}/usr/share/applications".format(tempPath)) + os.makedirs("{}/usr/share/uengine/apk".format(tempPath)) + os.makedirs("{}/usr/share/uengine/icons".format(tempPath)) + apkPackageName = self.packageName() + if qianZhui: + apkPackageNameNew = "uengine-dc-" + self.packageName().lower() + else: + apkPackageNameNew = self.packageName().lower() + apkPackageVersion = self.version() + if apkPackageVersion[0].upper() == "V": + package = list(apkPackageVersion) + package.pop(0) + apkPackageVersion = "".join(package) + apkChineseLabel = self.chineseLabel() + apkActivityName = self.activityName() + iconSavePath = "{}/usr/share/uengine/icons/{}.png".format(tempPath, apkPackageNameNew) + debControl = '''Package: {} +Version: {} +Architecture: all +Maintainer: {} +Depends: deepin-elf-verify (>= 0.0.16.7-1), uengine (>= 1.0.1) +Section: utils +Priority: optional +Description: {}\n'''.format(apkPackageNameNew, apkPackageVersion, apkChineseLabel, apkChineseLabel) + debPostinst = '''#!/bin/sh + +APK_DIR="/usr/share/uengine/apk" +APK_NAME="{}" +APK_PATH="$APK_DIR/$APK_NAME" +DESKTOP_FILE="{}" + + +if [ -f $APK_PATH ]; then + echo "Installing $APK_NAME" +else + echo "ERROR: $APK_NAME does not exist." + exit 0 +fi + +session_manager=`ps -ef | grep "uengine session-manager" | grep -v grep` +if test -z "$session_manager"; then + echo "ERROR: app install failed(session-manager is not running)." + sess_dir="/usr/share/uengine/session_install" + if [ ! -d $sess_dir ]; then + mkdir $sess_dir + chmod 777 $sess_dir + fi + apk_name=${{APK_PATH##*/}} + fileName="$sess_dir/$apk_name" + echo $DESKTOP_FILE > $fileName + abistr="" + if test -n "$abistr"; then + abi=`echo $abistr |awk -F \= '{{print $2}}'` + echo $abi >> $fileName + fi + chmod 766 $fileName +fi + +/usr/bin/uengine-session-launch-helper -- uengine install --apk="$APK_PATH" + +exit 0'''.format(apkPackageNameNew + ".apk", "/usr/share/applications/{}.desktop".format(apkPackageNameNew)) + debPrerm = '''#!/bin/sh + +APP_NAME="{}" +DESKTOP_FILE="{}" + +session_manager=`ps -ef | grep "uengine session-manager" | grep -v grep` +if test -z "$session_manager"; then + echo "ERROR: app uninstall failed(session-manager is not running)." + sess_dir="/usr/share/uengine/session_uninstall" + if [ ! -d $sess_dir ]; then + mkdir $sess_dir + chmod 777 $sess_dir + fi + fileName="$sess_dir/$APP_NAME" + echo $DESKTOP_FILE > $fileName + chmod 766 $fileName +fi + +echo "Uninstalling $APP_NAME" +/usr/bin/uengine-session-launch-helper -- uengine uninstall --pkg="$APP_NAME" + +exit 0'''.format(apkPackageName, "/usr/share/applications/{}.desktop".format(apkPackageNameNew)) + desktopFile = '''[Desktop Entry] +Categories=Other; +Exec=uengine launch --action=android.intent.action.MAIN --package={} --component={} +Icon=/usr/share/uengine/icons/{}.png +Terminal=false +Type=Application +GenericName={} +Name={} +''' + # RunCommandShow("echo '{}' > '{}/DEBIAN/control'".format(debControl, tempPath)) + #RunCommandShow("echo 正在写入文件:'{}/DEBIAN/control'".format(tempPath)) + File("{}/DEBIAN/control".format(tempPath)).write(debControl) + #RunCommandShow("echo 正在写入文件:'{}/DEBIAN/postinst'".format(tempPath)) + File("{}/DEBIAN/postinst".format(tempPath)).write(debPostinst) + #RunCommandShow("echo 正在写入文件:'{}/DEBIAN/prerm'".format(tempPath)) + File("{}/DEBIAN/prerm".format(tempPath)).write(debPrerm) + #RunCommandShow("echo 正在写入文件:'/usr/share/applications/{}.desktop'".format(apkPackageNameNew)) + # write_txt("{}/usr/share/applications/{}.desktop".format(tempPath, apkPackageNameNew), desktopFile) + self.saveDesktopFile("{}/usr/share/applications/{}.desktop".format(tempPath, apkPackageNameNew), + "{}/usr/share/uengine/icons/{}.png".format(tempPath, apkPackageNameNew)) + #BuildUengineDesktop(apkPackageName, apkActivityName, apkChineseLabel, + # "/usr/share/uengine/icons/{}.png".format(apkPackageNameNew), + # "{}/usr/share/applications/{}.desktop".format(tempPath, apkPackageNameNew)) + #RunCommandShow("echo '复制文件'") + #RunCommandShow("echo '写入 APK 软件图标'") + #SaveApkIcon(apkPath, iconSavePath) + self.saveApkIcon(iconSavePath) + #RunCommandShow("echo '复制 APK 文件'") + shutil.copy(self.apkPath, "{}/usr/share/uengine/apk/{}.apk".format(tempPath, apkPackageNameNew)) + #RunCommandShow("cp -rv '{}' '{}/usr/share/uengine/apk/{}.apk'".format(apkPath, tempPath, apkPackageNameNew)) + #RunCommandShow("echo '正在设置文件权限……'") + os.system("chmod 0775 -vR '{}/DEBIAN/postinst'".format(tempPath)) + os.system("chmod 0775 -vR '{}/DEBIAN/prerm'".format(tempPath)) + #RunCommandShow("echo '打包 deb 到桌面……'") + os.system( + "dpkg -b '{}' '{}'".format(tempPath, savePath)) + #RunCommandShow("echo '正在删除临时目录……'") + #shutil.rmtree(tempPath) + #RunCommandShow("rm -rfv '{}'".format(tempPath)) + #RunCommandShow("echo '完成!'") + #findApkHistory.append(apkPath) + #combobox1['value'] = findApkHistory + #write_txt(get_home() + "/.config/uengine-runner/FindApkBuildHistory.json", + # str(json.dumps(ListToDictionary(findApkHistory)))) # 将历史记录的数组转换为字典并写入 + #messagebox.showinfo(title="提示", message="打包完成") + #DisabledAndEnbled(False) + class UEngine: + def UengineAppManager(): + os.system("uengine launch --package=org.anbox.appmgr --component=org.anbox.appmgr.AppViewActivity") + def OpenApp(appPackage, appActivity): + os.system("uengine launch --package={} --component={}".format(appPackage, appActivity)) + # 清空 uengine 数据 + def UengineDataClean() -> "清空 uengine 数据": + shutil.rmtree("{}/.local/share/applications/uengine/".format(ProgramInformation.home)) + shutil.rmtree("/data/uengine") def RemoveUengineCheck(): os.remove("/usr/share/uengine/uengine-check-runnable.sh") def CPUCheck(): @@ -186,8 +339,13 @@ class File: if __name__ == "__main__": print("本 API 不支持直接运行,请通过引入的方式使用此 API") - apki = APK("/home/gfdgd_xi/下载/com.mihoyo.cloudgames.ys_1.0.0_liqucn.com.apk") + apki = APK("/home/gfdgd_xi/下载/60D3B51B76CCAC313B3F0809FD1A64FD.apk") print(apki.packageName()) + print(apki.chineseLabel()) + #print(apki.install()) + #apki.run() + #apki.buildDeb("/home/gfdgd_xi/下载/好奇时间.deb") + apki.uninstall() quit() if not ROOT.GetRoot(): diff --git a/api/defult.png b/api/defult.png new file mode 100644 index 0000000000000000000000000000000000000000..c836b687a2bf32dca02d1834024e2188dccde2b0 GIT binary patch literal 35859 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 W8k^~Ea@;i)z;XCsWN33pV)4I~8VDi) literal 0 HcmV?d00001 diff --git a/main.py b/main.py index da2ea10..1cd5588 100755 --- a/main.py +++ b/main.py @@ -3,10 +3,10 @@ ########################################################################################### # 作者:gfdgd xi<3025613752@qq.com> # 版本:1.6.1 -# 更新时间:2022年2月6日(要开学了) +# 更新时间:2022年5月21日(要开学了) # 感谢:anbox、deepin 和 UOS # 基于 Python3 的 tkinter 构建 -# 更新:gfdgd xi<3025613752@qq.com>、actionchen<917981399@qq.com> +# 更新:gfdgd xi<3025613752@qq.com>、actionchen<917981399@qq.com>、为什么您不喜欢熊出没和阿布呢 ########################################################################################### ################# # 引入所需的库