Cocos中 jsc 檔案解密和重新加密的指令碼

圖片源於zoommy
好久沒更,正好最近畢業生找工作的季節,幾篇面經的文章多了一些贊,也順帶漲了幾個粉。
從文章統計資料來看,瀏覽量比較多的還是面經,而非平常的技術文章。以前在文章裡也說過,一個人能掙的錢取決於他的社會價值,一個人能否找到好工作在於其本身實際素養。雖然面試時能夠包裝一下,但是過度包裝也很容易被戳破。面經固然可以起到一些作用,但是讀一些技術文章和實踐編碼才是成長的關鍵。希望找工作的同學讀面經時,遇到不會的一定要逐個突破掌握,才能讓面經起到應有的作用。否則縱然你讀100篇面經,也漲不了知識。
另外,做一個專案不僅僅包含寫程式碼這一部分。比如Android專案還要包含自動化構建等等內容,一些操作靠人來完成耗時耗力,如果能夠實現一些能夠解放人力、提高效率的指令碼是十分有用的。
最近寫了一個Cocos中 jsc 檔案解密和重新加密的指令碼,可以提升Cocos中比如熱更新時的打包效率。專案地址: ofollow,noindex">點選跳轉GitHub
簡介
通過閱讀Cocos2dx原始碼發現,其指令碼加解密用的就是xxtea加密和解密。
CocosCreator構建過程為:
- 工程用到的所有js指令碼聚合為project.js等幾個指令碼
- 如果勾選“Zip 壓縮”選項,會進行壓縮project.js,會減少很多體積,進而可以減少包大小
- 使用xxtea進行加密上述檔案,生成project.jsc
- 將project.jsc打包到apk、ipa等安裝包中
在程式執行時,正好做了相反操作:
- 使用xxtea進行解密
- 如果勾選“Zip 壓縮”選項,進行解壓縮
- 呼叫js程式碼
此指令碼就是用於CocosCreator加密編譯後 jsc 檔案解密為 js 檔案和 js 檔案加密為 jsc 檔案。
CocosCreator構建時,是否勾選Zip壓縮選項決定了使用指令碼的引數不同。在CocosCreator的構建面板下圖的位置中,檢視加密金鑰和是否開啟Zip壓縮。

image
此指令碼在 macOS High Sierra 10.13.6 系統,Python 2.7 下執行正常,其他環境未測試
使用說明
命令列使用:
-
如果使用加密功能,第二個引數設定為 encrypt ;如果使用解密功能,第二個引數設定為 decrypt 。此引數為必選引數
-
如需設定加密金鑰,新增 --key 或 -k 引數,並跟上加密金鑰字串。如不設定,會在命令列中提示輸入
-
如需設定為非壓縮方案,新增 --nozip 或 -n 引數,並設定為 true。如不設定,預設為壓縮方案
非壓縮方案是指Cocos編譯時沒有勾選“Zip 壓縮”選項
-
找到CocosCreator編譯出來的 .jsc 檔案,一般在工程目錄下 build/jsb-default/src 資料夾下。你可以在指令碼執行時,根據提示輸入檔案的路徑來指定對應檔案。也可以新增 --path 或 -p 引數,設定為檔案路徑。如不設定,會在命令列中提示輸入
-
執行指令碼即可
- encrypt:解密後文件路徑為 decryptOutput/decrypt.js
- decrypt: 加密後文件路徑為 encryptOutput/projectChanged.jsc
-
舉例:
- ./edc.py encrypt --key yourkey --nozip true
- ./edc.py decrypt --nozip true
- ./edc.py decrypt
其他Python指令碼中引用:
- 下載edc.py檔案放到你的指令碼目錄下,通過 import edc 進行匯入
- 直接呼叫 edc.decrypt(is_zip, key, jsc_path) 或 edc.encrypt(is_zip, key, js_path) 即可,可參考 edcExample.py 檔案
如果是非互動式指令碼,請務必在呼叫方法時傳入有效的引數,並保證其正確性
引數說明
引數名 | 縮寫 | 是否必須 | 預設值 |
---|---|---|---|
encrypt/decrypt | 無 | 是 | - |
--key | -k | 否 | - |
--nozip | -n | 否 | false |
--path | -p | 否 | - |