VSCode如何進行安卓開發? Code FA計畫實戰分享
本篇文章帶大家來了解VSCode如何進行安卓開發?希望對需要的朋友有幫助!
vs code 大部分是由ts 編寫,上層UI 可以運行在各個系統的瀏覽器中,但vs code 基於electron 框架,這個框架提供了對node 的支持,一些瀏覽器內核中的js 引擎沒有的api,例如I/O,系統內核的一些交互等。 而 code-server 則是解決了脫離 electron 的問題。 目前安卓上有一個叫aid learing
的軟體,自備VS Code
,看了一下原理差不多,並不是linux 圖形介面打開的VS Code
,也是開啟的webview
連接本地的服務,但這個玩意佔磁碟記憶體太高,整個下載安裝完就乾掉6個g。 【推薦學習:《vscode入門教學》】
客戶端框架
##客戶端是用Flutter 進行的開發,而這個框架的選用並不是為了跨端,只是為了快速嘗試,還有基礎能力的運用。實作方法分析
code-server 在github 發布的版本中是有arm64 架構的,整個下載後,開終端解壓縮執行就掛了,這個雖然是arm64,並且有一個arm64 的node,但是是為完整linux 準備的。也就是說,node 中硬編碼了 /usr /lib 等這些路徑,並且附帶的 node_modules 中也有大量的使用到 linux 特有節點的路徑,這些安卓上都沒有。 後來一想,termux 中自帶的環境也是有libllvm
gcc
nodejs 的,把整個 node_mudules 一刪,再手動 install 一下,就行了。
所以整個流程大致分為兩類。
初始嘗試方案:非完整Linux
- #啟動termux 環境
- 安裝node,python ,libllvm,clang
- 下載code-server arm64,解壓縮
- 處理相容,刪除node_modules ,重新yarn install
- #執行bin/code-server 啟動服務
經過一些測試發現,這種模式有一些問題。
- 下載的依賴太多,由於來源都在我的個人伺服器,會下很久。
- 編譯太久,yarn install 的時候呼叫了 gcc 的編譯,整個過程特別耗時。
- 啟動的vs code 用不了搜尋代碼(正常情況能支援這個功能) 磁碟佔用太大,一陣操作下來,直接1.6g磁碟空間給幹沒了,主要是
- npm install
拉了很多東西,還產生了一堆緩存,node_modules 嘛,比黑洞還重的東西。
- 啟動termux 環境
- 安裝node
- 下載code-server arm64,解壓縮
執行bin/code-server
######但還是會存在###編輯器無法搜尋程式碼的bug###,node 雖然只有20m ,但還是在個人伺服器,下檔頻寬5mb,大概700kb/s ,emmm,要整合到apk 內的話,得集成deb ,調dpkg 去安裝,放棄。 #########最後使用方案:完整Linux################開始termux 環境###########下載並安裝完整Linux (30m)############下載code-server arm64(自帶node能用了)############執行bin/code-server 啟動服務## ##########最終是選用了完整Linux 的方式,除了安裝需要的體積更小之外,還有完整來源的支持,異常bug 的避免等。 由於整個VS Code 的啟動所需的130mb 的內存都是第一次打開需要的,所以將這些內存的佔用放到伺服器上,由app 啟動再下載的意義並不大,最後就全都作為資源文件集成到了apk 內。 #########具體實作############啟動termux 環境#########這個過程之前有現成的輪子了,只需要依照termux-package的編譯腳本編譯一個bootstrap 整合到apk,app 啟動進行解壓,然後根據符號連結格式進行恢復就行。 終端機是 ###termare_view###。 #########bootstrap 是一個帶有最小依賴的###類別 linux### 環境,有bash,apt 等。 ###
具体实现代码
function initApp(){ cd ${RuntimeEnvir.usrPath}/ echo 准备符号链接... for line in `cat SYMLINKS.txt` do OLD_IFS="\$IFS" IFS="←" arr=(\$line) IFS="\$OLD_IFS" ln -s \${arr[0]} \${arr[3]} done rm -rf SYMLINKS.txt TMPDIR=/data/data/com.nightmare.termare/files/usr/tmp filename=bootstrap rm -rf "\$TMPDIR/\$filename*" rm -rf "\$TMPDIR/*" chmod -R 0777 ${RuntimeEnvir.binPath}/* chmod -R 0777 ${RuntimeEnvir.usrPath}/lib/* 2>/dev/null chmod -R 0777 ${RuntimeEnvir.usrPath}/libexec/* 2>/dev/null apt update rm -rf $lockFile export LD_PRELOAD=${RuntimeEnvir.usrPath}/lib/libtermux-exec.so install_vs_code start_vs_code bash }
RuntimeEnvir.usrPath 是 /data/data/$package/files/usr/bin
安装完整 Linux 和 code-server
这个我从好几个方案进行了筛选,起初用的 atlio 这个开源,整个开源依赖 python
,并且有一个requirement.txt
,需要执行 python -r requirement.txt
,依赖就是一大堆,后来换了 proot-distro
,纯 shell
,所以只需要直接集成到 apk 内就行。
1.安装 ubuntu
install_ubuntu(){ cd ~ colorEcho - 安装Ubuntu Linux unzip proot-distro.zip >/dev/null #cd ~/proot-distro bash ./install.sh apt-get install -y proot proot-distro install ubuntu echo '$source' > $ubuntuPath/etc/apt/sources.list }
2.安装 code-server
install_vs_code(){ if [ ! -d "$ubuntuPath/home/code-server-$version-linux-arm64" ];then cd $ubuntuPath/home colorEcho - 解压 Vs Code Arm64 tar zxvf ~/code-server-$version-linux-arm64.tar.gz >/dev/null cd code-server-$version-linux-arm64 fi }
启动 code-server
直接用 proot-distro 启动就行,非常方便
--termux-home 参数:开启 app 沙盒的 home 挂载到 ubuntu 的 /root 下,这样 ubuntu 就能用 app 里面的文件夹了。
start_vs_code(){ install_vs_code mkdir -p $ubuntuPath/root/.config/code-server 2>/dev/null echo ' bind-addr: 0.0.0.0:8080 auth: none password: none cert: false ' > $ubuntuPath/root/.config/code-server/config.yaml echo -e "\x1b[31m- 启动中..\x1b[0m" proot-distro login ubuntu -- /home/code-server-$version-linux-arm64/bin/code-server }
其实整个实现其实是没啥难度的,全都是一些 shell 脚本,也是得益于之前的 Termare 系列的支持,有兴趣的可以看下这个组织。 然后就是打开 webview 的过程了,如果觉得性能不好,你可以用局域网的电脑来进行连接。 看一下非首次的启动过程
WebView 实现方案
首先去 pub 看了一下 webview 的插件,官方目前正在维护的 webview 有这样的提示
- Hybrid composition mode has a built-in keyboard support while Virtual displays mode has multiple keyboard issues
- Hybrid composition mode requires Android SKD 19+ while Virtual displays mode requires Android SDK 20+
- Hybrid composition mode has performence limitations when working on Android versions prior to Android 10 while Virtual displays is performant on all supported Android versions
也就是说开启 hybird 后,安卓10以下有性能限制,而使用虚拟显示器的话,键盘问题会很多。
实际尝试的时候,OTG 连接的键盘基本是没法用的。
再分析了下这个场景,最后还是用的原生 WebView,这里有些小坑。
必须启用项
WebSettings mWebSettings = mWebView.getSettings(); //允许使用JS mWebSettings.setJavaScriptEnabled(true); mWebSettings.setJavaScriptCanOpenWindowsAutomatically(true); mWebSettings.setUseWideViewPort(true); mWebSettings.setAllowFileAccess(true); // 下面这行不写不得行 mWebSettings.setDomStorageEnabled(true); mWebSettings.setDatabaseEnabled(true); mWebSettings.setAppCacheEnabled(true); mWebSettings.setLoadWithOverviewMode(true); mWebSettings.setDefaultTextEncodingName("utf-8"); mWebSettings.setLoadsImagesAutomatically(true); mWebSettings.setSupportMultipleWindows(true);
路由重定向
有些场景 VS Code 会打开一个新的窗口,例如点击 file -> new window 的时候,不做处理,webview 会调起系统的浏览器。
//系统默认会通过手机浏览器打开网页,为了能够直接通过WebView显示网页,必须设置 mWebView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { //使用WebView加载显示url view.loadUrl(url); //返回true return true; } });
浏览器正常跳转
例如终端输出了 xxx.xxx,ctrl + 鼠标点击,预期是会打开浏览器的。
mWebView.setWebChromeClient(webChromeClient); WebChromeClient webChromeClient = new WebChromeClient() { @Override public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) { WebView childView = new WebView(context);//Parent WebView cannot host it's own popup window. childView.setBackgroundColor(Color.GREEN); childView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url))); return true; } }); WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj; transport.setWebView(childView);//setWebView和getWebView两个方法 resultMsg.sendToTarget(); return true; } };
可行性探索
这个能干嘛?安卓屏幕那么小,电脑能本地用 VsCode 干嘛要连安卓的?
- 有一个 vs code 加一个完整的 linux 环境,能 cover 住一些场景的开发了,安卓开发等除外。
- 开发程序到 arm 板子的同学,PC 上还得弄一堆交叉编译工具链,并且每次编译调试过程也很繁琐,现在就能本地写本地编译。
正巧,买了一个平板,爱奇艺之余,也能作为程序员的一波生产力了。
编译 C 语言
选了一个一直在学习的项目,scrcpy,一堆 c 源码,最后很顺利的编译下来了。
Web 开发
移动端的网页调试一直都是问题,作为野路子前端的我也很无奈,一般会加一些 vconsole 的组件来获取调试日志。
之前个人项目速享适配移动端 web 就是这么干的
现在,我们可以本地开发,本地调试,有 node 整个前端大部分项目都能拉下来了,真实的移动端物理环境。
试试
写博客
本篇文章完全是在这个安卓版的 VS Code 中完成的,使用 hexo 本地调式
寫文件
寫後台,介面測試
寫一點簡單的後台,如python 的fastapi ,flask,並透過rest client 進行介面測試
最後
為了讓其他的使用者能直接使用到這個app,我將其上架到了酷安。
看了下 vscodium 和 code-server 的開源協議都是 MIT,如果有侵權的地方辛苦評論區提醒一下鄙人。
隨便玩,有問題留言區留言,覺得不錯的給個star,文章不錯的給個贊,
以上是VSCode如何進行安卓開發? Code FA計畫實戰分享的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

如何使用 Visual Studio Code 定義頭文件?創建頭文件並使用 .h 或 .hpp 後綴命名在頭文件中聲明符號(例如類、函數、變量)使用 #include 指令在源文件中包含頭文件編譯程序,頭文件將被包含並使聲明的符號可用

VS Code 系統要求:操作系統:Windows 10 及以上、macOS 10.12 及以上、Linux 發行版處理器:最低 1.6 GHz,推薦 2.0 GHz 及以上內存:最低 512 MB,推薦 4 GB 及以上存儲空間:最低 250 MB,推薦 1 GB 及以上其他要求:穩定網絡連接,Xorg/Wayland(Linux)

vscode 內置終端是一個開發工具,允許在編輯器內運行命令和腳本,以簡化開發流程。如何使用 vscode 終端:通過快捷鍵 (Ctrl/Cmd ) 打開終端。輸入命令或運行腳本。使用熱鍵 (如 Ctrl L 清除終端)。更改工作目錄 (如 cd 命令)。高級功能包括調試模式、代碼片段自動補全和交互式命令歷史。

解決 Visual Studio Code 中中文註釋變為問號的方法:檢查文件編碼,確保為“UTF-8 without BOM”。更改字體為支持中文字符的字體,如“宋體”或“微軟雅黑”。重新安裝字體。啟用 Unicode 支持。升級 VSCode,重啟計算機,重新創建源文件。

在 Visual Studio Code(VSCode)中編寫代碼簡單易行,只需安裝 VSCode、創建項目、選擇語言、創建文件、編寫代碼、保存並運行即可。 VSCode 的優點包括跨平台、免費開源、強大功能、擴展豐富,以及輕量快速。

VS Code 終端常用命令包括:清除終端屏幕(clear)列出當前目錄文件(ls)更改當前工作目錄(cd)打印當前工作目錄路徑(pwd)創建新目錄(mkdir)刪除空目錄(rmdir)創建新文件(touch)刪除文件或目錄(rm)複製文件或目錄(cp)移動或重命名文件或目錄(mv)顯示文件內容(cat)查看文件內容並滾動(less)查看文件內容只能向下滾動(more)顯示文件前幾行(head)

Visual Studio Code (VSCode) 是一款跨平台、開源且免費的代碼編輯器,由微軟開發。它以輕量、可擴展性和對眾多編程語言的支持而著稱。要安裝 VSCode,請訪問官方網站下載並運行安裝程序。使用 VSCode 時,可以創建新項目、編輯代碼、調試代碼、導航項目、擴展 VSCode 和管理設置。 VSCode 適用於 Windows、macOS 和 Linux,支持多種編程語言,並通過 Marketplace 提供各種擴展。它的優勢包括輕量、可擴展性、廣泛的語言支持、豐富的功能和版

VS Code 終端命令無法使用的原因及解決辦法:未安裝必要的工具(Windows:WSL;macOS:Xcode 命令行工具)路徑配置錯誤(添加可執行文件到 PATH 環境變量中)權限問題(以管理員身份運行 VS Code)防火牆或代理限制(檢查設置,解除限制)終端設置不正確(啟用使用外部終端)VS Code 安裝損壞(重新安裝或更新)終端配置不兼容(嘗試不同的終端類型或命令)特定環境變量缺失(設置必要的環境變量)
