欢迎光临散文网 会员登陆 & 注册

简单介绍QPython源码包组成及如何修改QPython

2022-02-26 01:24 作者:乘着船  | 我要投稿

开源软件QPython是一款手机Python编程软件,它突破了安卓平台不能很好运行Python的限制,下面介绍QPython源码包组成及如何修改QPython。


原版QPython

开源地址:https://github.com/qpython-android/qpython

魔改原版QPython的方法:https://www.bilibili.com/read/cv10833697


魔改版QPython(QPython 3C)

一、开源地址:

https://www.bilibili.com/read/cv13322251

这里重点介绍一下QPython 3C。


二、魔改QPython 3C需要Android Studio,Android SDK (minSdk=21,targetSdk=28,compileSdk=31) + NDK 22,签名仅V2。网盘里的源码文件已经从原版QPython那里组合好并经过深度修改,可直接用来构建。一开始构建可能会失败几次,主要是从我的电脑到你的电脑的路径和环境差异,简单修改下多试几次就可以成功编译了。


三、QPython 3C组成分为两部分:


(一)Java代码部分:

各模块含义:qbaselib(基础库),qftplib(FTP服务库),qpypluginman(插件管理),qpysdk(开发工具库),qpysl4a(安卓脚本层)、qpython(中心模块)、termemulator(终端模拟器)、termexec(终端执行器)。


(二)脚本代码部分

以Python为主,辅以shell、html和js等。主要文件是qpython-master\qpython\src\main\assets\resource.mp3。

 

四、首次启动(自释放)过程:

1. Android Java 检测 shared-preference,看下是否同意 QPython 3C 安全提示(security_tip),如果未同意,准备解压缩 resource.mp3

2. Android Java 解压缩 resource.mp3 (tar.gz) 到 /data/data/indi.czc.qpython/files/

a) resource.mp3-中心区 包括 7z模块(p7zip(去掉7z-shared,7z-rar,延迟到private2.7z释放),中英文 安全提示(text/zh/security_tip和text/en/security_tip),追加libc++_shared.so,libiconv.so),一级启动引导(qpython.sh,qpython-root.sh)

b) resource.mp3-外围区 包括 private1.7zprivate2.7zpublic.7z

3. Android Java 根据 系统语言 读取对应 security_tip,显示安全提示

4. 用户确认安全提示:

a) 如果不同意,退出 QPython 3C

b) 如果同意,记录 同意信息 到 shared-preference

5. Android Java 打开 /data/data/indi.czc.qpython/files/text/ver/qpython,检测为不存在或QPython版本号不相同,则启动自释放更新过程

6. Android Java 检查是否已经执行 resource.mp3 解压缩

a) 如果未执行,按照步骤(2)解压缩

b) 如果已执行,跳过此第(6)步

7. Android Java 写入 QPython当前版本号 到 /data/data/indi.czc.qpython/files/resource.version

8. Android Java 赋予 /data/data/indi.czc.qpython/files/bin/* 可执行权限,运行 一级启动引导 qpython.sh (一级启动引导 qpython-root.sh 通过启动 qpython.sh 来实现),一级启动引导 qpython.sh 写入 bin/7z,赋予 bin/7z 和 lib/p7zip/7z 可执行权限,调用 7z模块

9. 7z模块 解压缩 private1.7z 到 /data/data/indi.czc.qpython/files/ 并删除 private1.7z

  private1.7z 包括 Python内核,IPython模块,必要精简linux组件(不含libc++_shared.so,libiconv.so,这两so文件已提前在7z模块释放)

10. 7z模块 解压缩 private2.7z 到 /data/data/indi.czc.qpython/files/ 并删除 private2.7z

  private2.7z 包括 androidhelper(SL4A),QPython自定义终端(bin/colorConsole.py,bin/ipython.py,bin/SL4A_GUI_Console.py,bin/browserConsole.py,bin/shell.py),中英文 语言包(text/zh/和text/en/),二级启动引导(qpython.sh,qpython-root.sh,同文件名不同内容,覆盖一级启动引导),三级启动引导setup.py,延迟释放的7z-shared,7z-rar,其他QPython内部自定义模块

11.7z模块 解压缩 public.7z 到 /sdcard/qpython/ 并删除 public.7z

  public.7z 包括 QPython公开自定义模块(projects3,scripts3等)

12.一级启动引导 qpython.sh (此时已被覆盖) 赋予 /data/data/indi.czc.qpython/files/bin/* 可执行权限 并运行 二级启动引导 qpython.sh

13.二级启动引导 qpython.sh 启动python内核,调用 三级启动引导 setup.py

14.setup.py 调用 /data/data/indi.czc.qpython/files/bin/SymLinkAll.py ,链接部分相同文件,以减少空间占用

15.setup.py 写入Python版本号到/data/data/indi.czc.qpython/files/text/ver/python,调用 androidhelper,Toast解压缩完成通知,删除 setup.py 自身,改名 /data/data/indi.czc.qpython/files/resource.version 为 /data/data/indi.czc.qpython/files/text/ver/qpython,print解压缩完成通知,到此解压缩全部完成。

 

五、魔改QPython的SL4A

1.SL4A是Scripting Layer For Android,安卓脚本层的缩写,用来在Android设备用Python执行Android指令。原理:初始Python指令-->SL4A-Python端出口-->Socket传输出去-->SL4A-Java端入口-->Java执行Android指令-->SL4A-Java端出口-->Socket传输回来-->SL4A-Python端入口-->继续Python指令;

2.SL4A-Java端:qpython-master/qpysl4a;

3.SL4A-Python端:resource.mp3-->private2.7z-->lib/python3.10/site-packages/androidhelper;

4.魔改SL4A一般需要同时修改Java端和Python端。


作者:乘着船@Bilibili

更多文章+下载链接:https://www.bilibili.com/read/readlist/rl321663

简单介绍QPython源码包组成及如何修改QPython的评论 (共 条)

分享到微博请遵守国家法律