老柯修机铺

通讯行老师傅的手机软件笔记——每款 App 装过、用过,才敢写下来

Cxxdroid:把整個 C++ 開發環境裝進手機的實戰工作流

在 Android 手機上跑完整的 C/C++ 編譯鏈,從代碼編輯到 SDL 圖形程序調試一氣呵成。本文以工作流角度拆解,把 Cxxdroid 嵌進日常開發節奏,省掉反覆連接電腦的麻煩。

Cxxdroid 是什麼

Cxxdroid官網 是俄羅斯 Lider Soft KZ 團隊打造的一款 Android 原生 C/C++ 開發環境,從 2020 年開始迭代,目前最新版本 5.6_arm64,安裝包 47.91M,覆蓋 Android 7.0 及以上系統。它不是一個單純的代碼編輯器——打開就能寫代碼、點一下就能編譯、崩了直接調試,整套 Clang 工具鏈連同 GDB 調試器、SDL2 圖形庫、CMake 構建系統全部預裝在 APP 裡,編譯產物直接在 ARM64 架構上本機執行,沒有模擬器開銷。

實際上它解決的是這樣一個痛點:你只帶了手機出門,但腦子裡突然冒出一個算法點子要驗證、或者想寫個十幾行的 SDL 小圖形 demo 看看效果——傳統做法是掏出筆記本連上遠程桌面、或者回家再說,Cxxdroid 讓你在口袋裡就能跑完整個編碼-編譯-調試閉環。適合嵌入式開發者通勤路上寫驗證代碼、CS 學生做 C++ 作業不想開電腦、獨立開發者快速試一個不確定的想法,甚至是純粹想在手機上體驗一下 C++ 編譯鏈怎麼運作的玩家。

安裝

Cxxdroid下載 的安裝跟一般 APP 不太一樣,裝完 APK 之後不算完事。首次啟動時它會自動從 CDN 下載完整的工具鏈包——Clang 編譯器、GDB 調試器、SDL2 開發庫、CMake 構建工具,全部加起來幾百兆,這步必須連 Wi-Fi,耗時視網絡而定。如果下載到一半網斷了,後續編譯全部報「找不到編譯器」的錯,重啟 APP 會自動重試,但有時候需要在應用信息裡點「清除數據」重新走一遍完整的工具鏈下載流程,比卸載重裝快。

安裝過程中還有一個必選權限:Cxxdroid 會請求 Android 的「存儲權限」,彈窗千萬不要拒絕。拒絕之後項目只能放在 APP 自己的私有目錄下,手機上其他文件管理器看不到,想把代碼分享到 Git 或拷到電腦都要繞一圈;放行後你可以把項目目錄放在任意公共路徑,比如 Downloads/Cxxdroid,方便雲盤同步、電腦 USB 傳輸。版本 5.6 起支持 SAF(Storage Access Framework),理論上可以訪問雲端存儲,但實測還是放在本地存儲最穩定。

常見坑:舊版本覆蓋升級後偶爾出現工具鏈殘留,編譯報版本衝突的錯誤信息——同樣走「清除數據」重啟即可,不用卸載;首次編譯如果報「no such file or directory」指向 clang++,99% 是工具鏈還沒下載完,等個兩三分鐘再試。

首次啟動界面:工具鏈下載進度條,完成後才能進入編輯器

我之前怎麼寫 C++ 的

說說我之前的流程吧。代碼在電腦上寫(VSCode 或者 CLion,看專案複雜度),電腦本地編譯 x86 版本驗證邏輯沒問題,如果是要跑在手機上的東西——比如一個簡單的 SDL 遊戲 demo、或者想測一段指針操作在 ARM64 架構上的表現——就要切到 NDK 交叉編譯,出一個 ARM64 可執行文件,然後 adb push 到手機、adb shell 進去跑,崩了還要用 adb logcat 抓崩潰日誌,定位到是哪一行、什麼類型的錯誤,再改代碼、再交叉編譯、再推一次。整個流程下來,一個指針 bug 可能要往返五到八次,每次交叉編譯就要好幾分鐘,加上 adb 連接有時候還要重開 USB 調試開關。

更鬱悶的是通勤路上——地鐵上腦子裡突然閃過一個寫法,掏出筆記本開機太麻煩、拿出手機又不能寫代碼,只能默默記在筆記裡等回家再驗,有時候到家已經忘了當時在想什麼。

把 Cxxdroid 插進流程的哪一環

現在的流程簡單多了。電腦上項目推 Git,手機 Cxxdroid 裡內置了 git 客戶端,clone 下來就能繼續寫;或者更簡單,直接新建一個單文件項目,十幾行代碼寫完、點編譯、點運行,立即可見效果。編輯器自動縮進預設開啟,寫完代碼或者從網上粘一段過來,跑一下 clang-format 一鍵對齊——大括号風格選 K&R 還是 Allman 隨你,設定裡選好之後格式化就照這個規則來,更多可用選項和進階設定可以參考 Cxxdroid文檔。

跟既有工具鏈的銜接點也很清晰。電腦→手機的環節:項目目錄放在同步盤對應的存儲路徑(比如 OneDrive 的手機端對接目錄),電腦上改完推送,手機拉一下就能拿到最新代碼。手機→電腦的環節:Cxxdroid 編譯產物直接在手機上跑通之後,再回到電腦交叉編譯 x86 版本做後續優化和打包,省掉在電腦上反覆改十幾次的麻煩。Git 是唯一的銜接點,沒有中間格式轉換,Cxxdroid 寫的就是標準 C/C++ 源碼,Clang++ 編譯產出 ELF 二進制。

具體場景說幾個:通勤路上寫 SDL 圖形 demo,在 Cxxdroid 裡直接畫矩形、畫直線、跑渲染器——SDL2 已經預裝好了,#include <SDL2/SDL.h> 就能用,寫個畫小旗的例子幾分鐘就能在手機上看到效果;寫算法驗證,比如數組越界檢測、指針操作在不同架構上的行為差異,在 ARM64 架構上本機跑比在電腦 x86 模擬更接近實際部署環境;CS 作業的 C++ 部分,寫完直接在手機上提交給助教,省了開筆記本。

編輯器與控制台面板:左側寫代碼、底部顯示編譯進度與錯誤跳轉

兩個最容易斷鏈的環節

流程裡最容易卡殼的有兩個地方,都是我踩過的坑。

第一個是工具鏈更新失敗。Cxxdroid 的工具鏈是跟隨版本更新的,如果升級 APP 時工具鏈沒有同步刷新,編譯器版本和調試器版本會打架,報各種看起來不知所云的鏈接錯誤。解決辦法很簡單:長按 APP 圖標 → 應用信息 → 存儲 → 清除數據 → 重啟,讓它從頭下載一次完整工具鏈。這步只需要幾分鐘,比卸載重裝快(卸載會清掉所有項目文件)。

第二個是崩潰定位慢。C++ 的 Segfault 說白了就是程序訪問了非法內存,崩了之後屏幕閃一下黑窗口就消失,什麼都看不到——這是我之前最頭痛的。現在我養成一個習慣:永遠用 Debug 模式跑,而不是直接 Run。確保編譯選項裡開了 -g(帶調試符號)和 -O0(關閉優化),崩潰時 GDB 會自動停在崩潰那一行,頭頂就顯示當前各變量的值和調用棧——空指針解引用一眼就能看到變量是 0x0,SDL 紋理創建失敗沒檢查返回值的問題也不會再出現。如果是內存踩踏或者 use-after-free 這種 GDB 抓不到的問題,開 AddressSanitizer(ASan),在 CMake 裡加兩行編譯選項,ASan 運行時會精確報出「哪一行、什麼類型的錯、附近的內存佈局」,比 GDB 強太多。

效果與邊界

量化一下效果:之前一個指針 bug 往返電腦→手機要 30 分鐘以上,現在在 Cxxdroid 裡 Debug 模式一次定位,最多 5 分鐘。日常小代碼驗證從「等電腦開機半小時」變成「口袋掏出來跑一下兩分鐘」,通勤時間真正能用起來了。SDL 圖形 demo 的試錯成本從每個 demo 兩三個小時降到半小時以內,之前不敢隨便亂試的點現在願意多試幾個。

但 Cxxdroid 不是萬能的,有幾件事它做不好。大項目(超過幾百個源文件)編譯速度明顯慢於電腦,手機 CPU 畢竟是 ARM 架構,做全量編譯等待時間是電腦的好幾倍;UI 複雜的 SDL 遊戲在 6 英寸手機屏幕上編輯體驗不好,代碼縮放太費眼睛,這類還是回到電腦比較合理;C++20 的部分新特性(比如 Concepts)在 5.6 版本的 Clang 裡支援還不完整,需要手動調整編譯選項才能開啟。Cxxdroid 解決的是「快速驗證」和「移動狀態下不耽誤」的問題,不是取代桌面 IDE——但作為流程中的一個環節,它把之前斷掉的那部分真正補上了。

本文为个人基于网络公开资料整理编写,非官方内容,仅供学习交流参考;软件版权归原作者所有,请支持正版;使用过程中遇到问题请查阅官方渠道,本文不承担任何责任。

同类文章