diff --git a/.idea/vcs.xml b/.idea/vcs.xml index 94a25f7..4fa1c7f 100644 --- a/.idea/vcs.xml +++ b/.idea/vcs.xml @@ -2,5 +2,6 @@ + \ No newline at end of file diff --git a/build/DEBIAN/control b/build/DEBIAN/control index df3d306..535bd7e 100644 --- a/build/DEBIAN/control +++ b/build/DEBIAN/control @@ -5,6 +5,6 @@ Homepage: [https://gitee.com/gfdgd-xi/uengine-runner, https://github.com/gfdgd-x Architecture: all Priority: optional Conflicts: com.gitee.uengine.runner.spark, spark-uengine-apk-builder -Depends: python3, python3-tk, python3-pip, aapt, uengine, python3-setuptools, deepin-terminal, curl, python3-pil, python3-pil.imagetk, python3-requests, adb, translate-shell, python3-xlib, fonts-noto-cjk, python3-numpy, python3-matplotlib, wget +Depends: python3, python3-tk, python3-pip, aapt, uengine, python3-setuptools, deepin-terminal, curl, python3-pil, python3-pil.imagetk, python3-requests, adb, translate-shell, python3-xlib, fonts-noto-cjk, python3-numpy, python3-matplotlib, wget, inotify-tools Description: UEngine Runner for deepin and UOS diff --git a/defult.png b/defult.png old mode 100755 new mode 100644 index 4cff476..c836b68 Binary files a/defult.png and b/defult.png differ diff --git a/icon.png b/icon.png deleted file mode 100644 index c836b68..0000000 Binary files a/icon.png and /dev/null differ diff --git a/icon.svg b/icon.svg deleted file mode 100755 index baaa994..0000000 --- a/icon.svg +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/information-new.json b/information-new.json index 0edbe3a..940fd37 100755 --- a/information-new.json +++ b/information-new.json @@ -4,7 +4,7 @@ "https://gitee.com/gfdgd-xi/uengine-runner", "https://github.com/gfdgd-xi/uengine-runner" ], - "Version": "1.6.0", + "Version": "1.6.1", "System": "Linux(deepin/UOS)", "Tips": [ "更多可见:https://gitee.com/gfdgd-xi/uengine-runner/wikis", @@ -22,6 +22,8 @@ "5、如果想要使用adb连接UEngine或其他手机,请使用 1.2.0 以前的版本。(如需连接UEngine请安装adb补丁)" ], "Update": [ + "V1.6.1:", + "※1、修复了打包 deb 包在 APK 的包名有大写时无法启动的问题", "V1.6.0:", "※1、更换了新的图标", "※2、支持程序的评分和查看分数详情的功能(如果炸了我的服务器,这个就作废了)", diff --git a/information.json b/information.json index 383fa29..2468f07 100755 --- a/information.json +++ b/information.json @@ -4,7 +4,7 @@ "https://gitee.com/gfdgd-xi/uengine-runner", "https://github.com/gfdgd-xi/uengine-runner" ], - "Version": "1.6.0", + "Version": "1.6.1", "System": "Linux(deepin/UOS)", "Tips": [ "更多可见:https://gitee.com/gfdgd-xi/uengine-runner/wikis", @@ -22,6 +22,8 @@ "5、如果想要使用adb连接UEngine或其他手机,请使用 1.2.0 以前的版本。(如需连接UEngine请安装adb补丁)" ], "Update": [ + "V1.6.1:", + "※1、修复了打包 deb 包在 APK 的包名有大写时无法启动的问题", "V1.6.0:", "※1、更换了新的图标", "※2、支持程序的评分和查看分数详情的功能(如果炸了我的服务器,这个就作废了)", diff --git a/mount-disk-uengine.py b/mount-disk-uengine.py new file mode 100644 index 0000000..986c94e --- /dev/null +++ b/mount-disk-uengine.py @@ -0,0 +1,57 @@ +import os +import psutil +import string +import ttkthemes +import tkinter as tk +import tkinter.ttk as ttk +import tkinter.messagebox as messagebox + +class Program: + def GetRoot(): + return os.geteuid() == 0 + + def MountDisk(): + Disk.MountDisk(diskChoose.get(), "/data/uengine/安卓应用文件/media/" + name.get()) + +class Disk: + def MountDisk(disk, path): + if not os.path.exists(path): + os.makedirs(path) + os.system("mount \"{}\" \"{}\"".format(disk, path)) + +class File: + def DiskList(): + diskList = [] + partitions = psutil.disk_partitions() + for p in partitions: + if not "loop" in p.device and not "boot" in p.device and not p.device in diskList: + #print(p.device) + diskList.append(p.device) + #print(p.mountpoint) + return diskList + +if __name__ == "__main__": + window = tk.Tk() + print(File.DiskList()) + if not Program.GetRoot(): + window.withdraw() + messagebox.showerror(title="错误", message="此程序必须在 root 下运行!") + quit() + if not os.path.exists("/data/uengine/安卓应用文件/media"): + os.makedirs("/data/uengine/安卓应用文件/media") + #window.withdraw() + #messagebox.showerror(title="错误", message="目录不存在,无法继续操作!") + #quit() + window.title("挂载磁盘") + diskList = File.DiskList() + diskChoose = tk.StringVar() + diskChoose.set(diskList[0]) + weight = ttk.Frame(window) + ttk.Label(weight, text="挂载磁盘:").grid(row=0, column=0) + ttk.OptionMenu(weight, diskChoose, diskList[0], *diskList).grid(row=0, column=1) + ttk.Label(weight, text="挂载名称:").grid(row=1, column=0) + name = ttk.Entry(weight) + ttk.Button(weight, text="挂载", command=Program.MountDisk).grid(row=2, column=1) + name.grid(row=1, column=1) + weight.pack() + window.mainloop() \ No newline at end of file diff --git a/new-deb-build/DEBIAN/control b/new-deb-build/DEBIAN/control index f0fec3a..caaa56c 100644 --- a/new-deb-build/DEBIAN/control +++ b/new-deb-build/DEBIAN/control @@ -3,7 +3,7 @@ Source: com.gitee.uengine.runner.spark Version: 1.6.0 Architecture: all Maintainer: gfdgd xi <3025613752@qq.com>, actionchen<917981399@qq.com> -Depends: deepin-elf-verify (>= 0.0.16.7-1), python3, python3-tk, python3-pip, aapt, uengine, python3-setuptools, deepin-terminal, curl, python3-pil, python3-pil.imagetk, python3-requests, adb, translate-shell, python3-xlib, fonts-noto-cjk, python3-numpy, python3-matplotlib, wget +Depends: deepin-elf-verify (>= 0.0.16.7-1), python3, python3-tk, python3-pip, aapt, uengine, python3-setuptools, deepin-terminal, curl, python3-pil, python3-pil.imagetk, python3-requests, adb, translate-shell, python3-xlib, fonts-noto-cjk, python3-numpy, python3-matplotlib, wget, inotify-tools Section: utils Priority: optional Conflicts: spark-uengine-runner, spark-uengine-apk-builder diff --git a/uengine-apk-builder b/uengine-apk-builder index 2f5756f..6a963bd 100755 --- a/uengine-apk-builder +++ b/uengine-apk-builder @@ -2,8 +2,8 @@ # 使用系统默认的 python3 运行 ########################################################################################### # 作者:gfdgd xi -# 版本:1.5.3 -# 更新时间:2022年02月07日(要开学了) +# 版本:1.6.1 +# 更新时间:2022年04月30日(五一了) # 感谢:anbox、deepin 和 统信 # 基于 Python3 的 tkinter 构建 ########################################################################################### @@ -68,9 +68,9 @@ def BuildApkDeb(apkPath): RunCommandShow("echo '写入文件,因为写入过程过于复杂,不显示写入命令……'") apkPackageName = GetApkPackageName(apkPath, False) if qianZhui.get(): - apkPackageNameNew = GetApkPackageName(apkPath, True) + apkPackageNameNew = GetApkPackageName(apkPath, True).lower() else: - apkPackageNameNew = GetApkPackageName(apkPath, False) + apkPackageNameNew = GetApkPackageName(apkPath, False).lower() apkPackageVersion = GetApkVersion(apkPath) if apkPackageVersion[0].upper() == "V": package = list(apkPackageVersion) @@ -274,8 +274,8 @@ def GetApkPackageName(apkFilePath, setting): line = line.replace(" ", "") # 此较为特殊,因为需要判断用户是否要添加前缀 if setting: - return "uengine-dc-{}".format(line).lower() - return line.lower() + return "uengine-dc-{}".format(line) + return line def GetApkVersion(apkFilePath): info = GetApkInformation(apkFilePath) diff --git a/uengine-runner-api/__init__.py b/uengine-runner-api/__init__.py new file mode 100644 index 0000000..226a2c7 --- /dev/null +++ b/uengine-runner-api/__init__.py @@ -0,0 +1,23 @@ +import os +import subprocess +import getxmlimg +# 判断程序以正确方式运行 +class ROOT: + def GetRoot(): + return os.geteuid() == 0 + +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 information(self): + return subprocess.getoutput("aapt dump badging '{}'".format(self.apkPath)) + +if __name__ == "__main__": + print("本 API 不支持直接运行,请通过引入的方式使用此 API") + quit() +if not ROOT.GetRoot(): + print("请获取 ROOT 权限以便更好的使用该 API") \ No newline at end of file diff --git a/uengine-runner-api/getxmlimg.py b/uengine-runner-api/getxmlimg.py new file mode 100755 index 0000000..af59a70 --- /dev/null +++ b/uengine-runner-api/getxmlimg.py @@ -0,0 +1,118 @@ +import PIL.Image as Image +import PIL.ImageDraw as ImageDraw +import zipfile +import subprocess +import re + +class getsavexml(): + + 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 + + # 获取到文件列表后,进行比较分辨率,选取分辨率最高的张图片 + iconbackpath = getmaxsize(backimgs) + iconforepath = getmaxsize(foreimgs) + print(iconbackpath + " " + iconforepath) + + #从APK文件获取最终图片 + zipapk = zipfile.ZipFile(apkFilePath) + iconback = zipapk.open(iconbackpath) + iconfore = zipapk.open(iconforepath) + + + # 叠加图片,mask 设置前景为蒙版 + iconbackimg = Image.open(iconback).convert("RGBA") + 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) +