Android 利器瓷蛙,我開發(fā)了云同步編譯工具

我相信使用過 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

如何安裝工具

安裝成功之后,將會在工具欄上出現(xiàn)下面的圖標(biāo)储耐。

工具如何使用

  • 按照圖示羊初,點擊 「插件配置」滨溉,或者按快捷鍵
    • Win:alt shift 5
    • Mac:option shift 5
  • 上一步操作完之后什湘,將會彈出一個對話框长赞,輸入對應(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è)備上安裝 JDK11Andriod 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剖膳。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末魏颓,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子吱晒,更是在濱河造成了極大的恐慌甸饱,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件仑濒,死亡現(xiàn)場離奇詭異叹话,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)墩瞳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進(jìn)店門驼壶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人喉酌,你說我怎么就攤上這事热凹。” “怎么了泪电?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵般妙,是天一觀的道長。 經(jīng)常有香客問我相速,道長碟渺,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任突诬,我火速辦了婚禮止状,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘攒霹。我一直安慰自己怯疤,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布催束。 她就那樣靜靜地躺著集峦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上塔淤,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天摘昌,我揣著相機(jī)與錄音,去河邊找鬼高蜂。 笑死聪黎,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的备恤。 我是一名探鬼主播稿饰,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼露泊!你這毒婦竟也來了喉镰?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤惭笑,失蹤者是張志新(化名)和其女友劉穎侣姆,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體沉噩,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡捺宗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了川蒙。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片偿凭。...
    茶點故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖派歌,靈堂內(nèi)的尸體忽然破棺而出弯囊,到底是詐尸還是另有隱情,我是刑警寧澤胶果,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布匾嘱,位于F島的核電站,受9級特大地震影響早抠,放射性物質(zhì)發(fā)生泄漏霎烙。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一蕊连、第九天 我趴在偏房一處隱蔽的房頂上張望悬垃。 院中可真熱鬧,春花似錦甘苍、人聲如沸尝蠕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽看彼。三九已至廊佩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間靖榕,已是汗流浹背标锄。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留茁计,地道東北人料皇。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像星压,于是被迫代替她去往敵國和親践剂。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,512評論 2 359

推薦閱讀更多精彩內(nèi)容