簡(jiǎn)單介紹QPython源碼包組成及如何修改QPython
開(kāi)源軟件QPython是一款手機(jī)Python編程軟件,它突破了安卓平臺(tái)不能很好運(yùn)行Python的限制,下面介紹QPython源碼包組成及如何修改QPython。
原版QPython:
開(kāi)源地址:https://github.com/qpython-android/qpython
魔改原版QPython的方法:https://www.bilibili.com/read/cv10833697
魔改版QPython(QPython 3C):
一、開(kāi)源地址:
https://www.bilibili.com/read/cv13322251
這里重點(diǎn)介紹一下QPython 3C。
二、魔改QPython 3C需要Android Studio,Android SDK (minSdk=21,targetSdk=28,compileSdk=31) + NDK 22,簽名僅V2。網(wǎng)盤(pán)里的源碼文件已經(jīng)從原版QPython那里組合好并經(jīng)過(guò)深度修改,可直接用來(lái)構(gòu)建。一開(kāi)始構(gòu)建可能會(huì)失敗幾次,主要是從我的電腦到你的電腦的路徑和環(huán)境差異,簡(jiǎn)單修改下多試幾次就可以成功編譯了。
三、QPython 3C組成分為兩部分:
(一)Java代碼部分:
各模塊含義:qbaselib(基礎(chǔ)庫(kù)),qftplib(FTP服務(wù)庫(kù)),qpypluginman(插件管理),qpysdk(開(kāi)發(fā)工具庫(kù)),qpysl4a(安卓腳本層)、qpython(中心模塊)、termemulator(終端模擬器)、termexec(終端執(zhí)行器)。
(二)腳本代碼部分
以Python為主,輔以shell、html和js等。主要文件是qpython-master\qpython\src\main\assets\resource.mp3。
?
四、首次啟動(dòng)(自釋放)過(guò)程:
1.?Android Java 檢測(cè) shared-preference,看下是否同意 QPython 3C 安全提示(security_tip),如果未同意,準(zhǔn)備解壓縮 resource.mp3
2.?Android Java 解壓縮 resource.mp3?(tar.gz) 到 /data/data/indi.czc.qpython/files/
a)?resource.mp3-中心區(qū)?包括 7z模塊(p7zip(去掉7z-shared,7z-rar,延遲到private2.7z釋放),中英文 安全提示(text/zh/security_tip和text/en/security_tip),追加libc++_shared.so,libiconv.so),一級(jí)啟動(dòng)引導(dǎo)(qpython.sh,qpython-root.sh)
b)?resource.mp3-外圍區(qū)?包括 private1.7z,private2.7z,public.7z
3.?Android Java 根據(jù) 系統(tǒng)語(yǔ)言 讀取對(duì)應(yīng) security_tip,顯示安全提示
4.?用戶(hù)確認(rèn)安全提示:
a)?如果不同意,退出 QPython 3C
b)?如果同意,記錄 同意信息 到 shared-preference
5.?Android Java 打開(kāi) /data/data/indi.czc.qpython/files/text/ver/qpython,檢測(cè)為不存在或QPython版本號(hào)不相同,則啟動(dòng)自釋放更新過(guò)程
6.?Android Java 檢查是否已經(jīng)執(zhí)行 resource.mp3 解壓縮
a)?如果未執(zhí)行,按照步驟(2)解壓縮
b)?如果已執(zhí)行,跳過(guò)此第(6)步
7.?Android Java 寫(xiě)入 QPython當(dāng)前版本號(hào) 到 /data/data/indi.czc.qpython/files/resource.version
8.?Android Java 賦予 /data/data/indi.czc.qpython/files/bin/* 可執(zhí)行權(quán)限,運(yùn)行 一級(jí)啟動(dòng)引導(dǎo) qpython.sh?(一級(jí)啟動(dòng)引導(dǎo) qpython-root.sh 通過(guò)啟動(dòng) qpython.sh 來(lái)實(shí)現(xiàn)),一級(jí)啟動(dòng)引導(dǎo) qpython.sh 寫(xiě)入 bin/7z,賦予 bin/7z 和 lib/p7zip/7z?可執(zhí)行權(quán)限,調(diào)用 7z模塊
9.?7z模塊 解壓縮 private1.7z?到 /data/data/indi.czc.qpython/files/ 并刪除 private1.7z
??private1.7z 包括 Python內(nèi)核,IPython模塊,必要精簡(jiǎn)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),中英文 語(yǔ)言包(text/zh/和text/en/),二級(jí)啟動(dòng)引導(dǎo)(qpython.sh,qpython-root.sh,同文件名不同內(nèi)容,覆蓋一級(jí)啟動(dòng)引導(dǎo)),三級(jí)啟動(dòng)引導(dǎo)setup.py,延遲釋放的7z-shared,7z-rar,其他QPython內(nèi)部自定義模塊
11.7z模塊 解壓縮 public.7z 到 /sdcard/qpython/ 并刪除 public.7z
? public.7z 包括 QPython公開(kāi)自定義模塊(projects3,scripts3等)
12.一級(jí)啟動(dòng)引導(dǎo) qpython.sh (此時(shí)已被覆蓋) 賦予 /data/data/indi.czc.qpython/files/bin/* 可執(zhí)行權(quán)限 并運(yùn)行 二級(jí)啟動(dòng)引導(dǎo) qpython.sh
13.二級(jí)啟動(dòng)引導(dǎo) qpython.sh 啟動(dòng)python內(nèi)核,調(diào)用 三級(jí)啟動(dòng)引導(dǎo) setup.py
14.setup.py 調(diào)用 /data/data/indi.czc.qpython/files/bin/SymLinkAll.py ,鏈接部分相同文件,以減少空間占用
15.setup.py 寫(xiě)入Python版本號(hào)到/data/data/indi.czc.qpython/files/text/ver/python,調(diào)用 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,安卓腳本層的縮寫(xiě),用來(lái)在Android設(shè)備用Python執(zhí)行Android指令。原理:初始Python指令-->SL4A-Python端出口-->Socket傳輸出去-->SL4A-Java端入口-->Java執(zhí)行Android指令-->SL4A-Java端出口-->Socket傳輸回來(lái)-->SL4A-Python端入口-->繼續(xù)Python指令;
2.SL4A-Java端:qpython-master/qpysl4a;
3.SL4A-Python端:resource.mp3-->private2.7z-->lib/python3.10/site-packages/androidhelper;
4.魔改SL4A一般需要同時(shí)修改Java端和Python端。
作者:乘著船@Bilibili
更多文章+下載鏈接:https://www.bilibili.com/read/readlist/rl321663