我相信使用過 MAC 的小伙伴們,無論是編譯 Java 項目横堡,還是 Android 項目命贴,在編譯稍微大點的項目食听,多多少少都會遇到下面的彈窗提示碳蛋,當(dāng)然 Win 也有類似的錯誤,只不過提示的方式不一樣玷室。我的 MAC 在當(dāng)時買的時候是最高配笤受,無奈現(xiàn)在的軟件需要占用的資源越來越多箩兽。
當(dāng)你的電腦上同時出現(xiàn)上面兩個提示汗贫,意味著你的電腦已經(jīng)有些年代了落包,目前我正在使用的 MAC 陪伴我度過了 8 年的時間,雖然我的主要方向是 Android涯鲁,但是在此期間我開發(fā)過 PHP抹腿、Python旭寿、C++盅称、逆向僚匆、JavaEE咧擂、Kotlin檀蹋、前端等等項目俯逾,因此電腦上裝了很多互相依賴的開發(fā)工具包桌肴。
如果換電腦,對個人而言成本是非常高的水醋,意味著很多軟件以及開發(fā)工具包都需要重新安裝彪置,并且新電腦的系統(tǒng)版本很高拳魁,很多軟件都用不了潘懊,需要尋找新的替代品。還會遇到很多因為系統(tǒng)問題而導(dǎo)致的編譯錯誤救恨。所以我需要尋找一個在不換電腦(配置很低的)的情況,提高項目編譯速度的方法裙椭,同時減少對電腦的資源占用揉燃,因此我就開發(fā)了一個云同步編譯工具炊汤。
在開發(fā)這個工具之前弊攘,我嘗試在 github 上尋找類似的項目來解決現(xiàn)有的問題襟交,我只找到了項目 mainframer
伤靠,但是這個項目作者已經(jīng)好幾年沒有在維護(hù)這個項目了酝惧,使用起來比較麻煩担孔,idea
配置也比較麻煩脂新。并不能完全解決我遇到的問題争便,因此云同步編譯工具 SyncKit
就誕生了。
SyncKit
是基于 Intellij idea
開發(fā)的插件奏纪,適用于 AndroidStudio
以及 jetbrains
旗下的所有 idea
軟件序调,主要將本地的項目同步到遠(yuǎn)程設(shè)備兔簇,在遠(yuǎn)程設(shè)備上進(jìn)行編譯垄琐,然后將編譯的結(jié)果拉回本地狸窘。
遠(yuǎn)程設(shè)備可以是 Nas、另外一臺備用電腦氓涣、云端(阿里云劳吠、騰訊云、華為云等等)赴背、 Docker 虛擬出來的容器等等椰拒。
我有一臺 NAS,配上同步編譯工具(SyncKit)凰荚,在配上內(nèi)網(wǎng)穿透燃观,就可以享受在任意地點進(jìn)行數(shù)據(jù)同步和遠(yuǎn)程編譯。
(PS:內(nèi)網(wǎng)穿透是我自己搭的一個服務(wù)便瑟,可以通過任意一個網(wǎng)絡(luò)缆毁,訪問家里的 NAS)
SyncKit
支持以下功能:
- 支持?jǐn)?shù)據(jù)同步到遠(yuǎn)程設(shè)備
- 支持增量同步,本地文件有修改或者新增才會同步到遠(yuǎn)程設(shè)備
- 文件過濾功能到涂,過濾掉不需要同步的文件
- 遠(yuǎn)程編譯功能
- 對于 Android 應(yīng)用,一鍵完成遠(yuǎn)程編譯践啄、自動安裝浇雹、打開目標(biāo) Activity
- 一鍵安裝常用工具,部署開發(fā)環(huán)境
- 一鍵安裝 JDK11
- 一鍵安裝 Android SDK
- 一鍵安裝 Android NDK
- 支持 Mac 屿讽、ubuntu
TODO:
- 支持命令行
- 支持 Win
- 支持?jǐn)?shù)據(jù)雙向同步
- 支持多臺遠(yuǎn)程設(shè)備間切換
- 支持 AAB 打包
代碼已經(jīng)上傳到 Github 歡迎前往倉庫 hi-dhl/SyncKit 查看昭灵,如果有幫助歡迎在倉庫 hi-dhl/SyncKit 右上角點個 star,如果你在使用過程中有任何問題伐谈,或者有其它的需求烂完,歡迎給我提 issue。
hi-dhl/SyncKit
https://github.com/hi-dhl/SyncKit
如何安裝工具
- 方法一:點擊下發(fā)鏈接诵棵,下載最新版本
SyncKit-version.zip
抠蚣,文件SyncKit-version.zip
不需要解壓,拖拽到 idea 開發(fā)工具中履澳,將會自動安裝嘶窄,點擊重啟即可。 - 方法二:
idea 開發(fā)工具 -> Preferences -> Plugins
搜索 SyncKit柄冲,安裝重啟即可
安裝成功之后,將會在工具欄上出現(xiàn)下面的圖標(biāo)储耐。
工具如何使用
- 按照圖示羊初,點擊 「插件配置」滨溉,或者按快捷鍵
- Win:
alt shift 5
- Mac:
option shift 5
- Win:
- 上一步操作完之后什湘,將會彈出一個對話框长赞,輸入對應(yīng)的 Host(IP 或者域名)、端口號闽撤、用戶名即可得哆,其它都是可選的
- 配置 ssh 無密碼訪問遠(yuǎn)程設(shè)備(可選)
如果你已經(jīng)配置了,這一步可忽略哟旗,如果你沒有配置贩据,按照下面的步驟執(zhí)行,否則你每次執(zhí)行的時候闸餐,都需要輸入密碼饱亮。
- 執(zhí)行下面命令,獲取本地電腦的
SSH public key
cat ~/.ssh/id_rsa.pub
如果你的電腦之前沒有安裝過 SSH舍沙,執(zhí)行下面命令安裝 SSH近上,一路回車,即可拂铡。
ssh-keygen -t rsa -C "test@qq. Com"
- 進(jìn)入遠(yuǎn)程設(shè)備壹无,執(zhí)行下面命令,將上一步獲取到的
SSH public key
感帅,追加到authorized_keys
文件中
mkdir -p ~/.ssh && echo ${SSH_PUBLIC_KEY} >> ~/.ssh/authorized_keys
上面都設(shè)置完之后斗锭,就可以開始使用云同步編譯工具,進(jìn)行遠(yuǎn)程編譯失球,或者將本地文件同步到遠(yuǎn)程設(shè)備岖是,如下圖示。
點擊「遠(yuǎn)程編譯」將會出現(xiàn)如下界面
遠(yuǎn)程設(shè)備工具安裝
為了簡化服務(wù)器的部署她倘,我也提供了一鍵部署服務(wù)器環(huán)境璧微,按需在遠(yuǎn)程設(shè)備上安裝 JDK11 、Andriod SDK 硬梁、Andriod NDK前硫。
同樣也可以在本地執(zhí)行腳本,安裝對應(yīng)的工具荧止,點擊「初始化」會在當(dāng)前目錄下生成 .sync
文件夾屹电,在 .sync/script
文件夾下執(zhí)行對應(yīng)的腳本即可。
bash install_jdk_11. Sh
bash install_android_sdk. Sh
bash install_android_ndk. Sh
可選功能
自動打開 Activity
點擊 「插件配置」將會彈出配置對話框跃巡,在 Launch Activity 中危号,按照提示,輸入要打開的 Activity素邪,將會在安裝完 App 之后外莲,自動打開 Activity。
文件過濾功能
工具支持文件過濾功能,當(dāng)我們同步文件到遠(yuǎn)程設(shè)備偷线,可以過濾掉不需要同步的文件磨确,點擊 「插件配置」將會彈出配置對話框,在文件過濾文本框中声邦,輸入你不需要同步的文件乏奥。
工具默認(rèn)會自動生成一些同步規(guī)則,應(yīng)該滿足 80% 的場景亥曹,如果有其他不需要同步的文件邓了,在文件過濾文本框中,按照下面的格式媳瞪,輸入你不需要同步的文件骗炉,按行分割,一行一個蛇受,同步的時候痕鳍,將會忽略這些文件。
- 某個文件不需要同步龙巨,輸入文件名即可笼呆,例如
local.properties
- 如果某個類型的文件不需要同步,輸入文件擴(kuò)展名即可旨别,例如
*.log
- 如果某個文件夾不需要同步诗赌,輸入文件夾加上
/
即可,例如build/
填入遠(yuǎn)程設(shè)備 SDK 或者 NDK 路徑
在編譯 Android 項目中秸弛,會自動識別 SDK 或者 NDK 路徑铭若,如果失敗了,編譯將會出錯递览,這時需要手動輸入遠(yuǎn)程設(shè)備 SDK 或者 NDK 路徑叼屠。
常見問題
問題一:
ssh_askpass: exec (/usr/X11R6/bin/ssh-askpass): No such file or directory
按照如下方式解決:
- 確認(rèn)在遠(yuǎn)程設(shè)備文件
~/.ssh/authorized_keys
,是否正確添加了本機(jī)的SSH public key
绞铃,執(zhí)行下面命令镜雨,如果不需要輸入密碼,表示正確添加了
ssh -p 端口號 user@host
例如:
ssh -p 22 root@192.160.0.100
- 如果已經(jīng)添加了儿捧,嘗試執(zhí)行下面命令即可解決荚坞,方案來自stackoverflow.com
ssh-keyscan -t rsa bitbucket. Org >> ~/. Ssh/known_hosts
問題二:
Execution failed for task ' :app: parseDebugLocalResources'.
> Could not resolve all files for configuration ' :app: androidApis'.
> Failed to transform android. Jar to match attributes {artifactType=android-platform-attr, org. Gradle. Libraryelements=jar, org. Gradle. Usage=java-runtime}.
> Execution failed for PlatformAttrTransform: /root/build/android-sdk/platforms/android-32/android. Jar.
> /root/build/android-sdk/platforms/android-32/android. Jar
這可能是因為第一次下載 android-32
時網(wǎng)絡(luò)問題被中斷,導(dǎo)致文件 /root/build/android-sdk/platforms/android-32/android.jar
不存在菲盾,我們可以手動刪除 android-32
文件夾颓影,然后重新執(zhí)行遠(yuǎn)程編譯,會重新下載 android-32
懒鉴,如果下載速度比較慢诡挂,可以在當(dāng)前項目中,添加 alyun maven
倉庫,其它版本的 SDK 處理的方案都是一樣的璃俗。
問題三:
在使用云同步編譯工具(SyncKit)時南捂,提示缺少工具而導(dǎo)致失敗,執(zhí)行下面命令安裝對應(yīng)的工具即可旧找。
yum install -y rsync unzip wget
代碼已經(jīng)上傳到 Github 歡迎前往倉庫 hi-dhl/SyncKit 查看,如果有幫助歡迎在倉庫 hi-dhl/SyncKit 右上角點個 star麦牺,如果你在使用過程中有任何問題钮蛛,或者有其它的需求,歡迎給我提 issue剖膳。