久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合

站長資訊網
最全最豐富的資訊網站

VSCode如何進行安卓開發?Code FA項目實戰分享

本篇文章帶大家了解一下VSCode如何進行安卓開發?希望對需要的朋友有所幫助!

VSCode如何進行安卓開發?Code FA項目實戰分享

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 嘛,比黑洞還重的東西。

不過按照以上的流程過一遍后,code-server 內的 node_modules 已經是安卓 arm64 可用的模塊了,二次打包 code-server,流程就可以簡化成如下

  • 啟動 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 上還得弄一堆交叉編譯工具鏈,并且每次編譯調試過程也很繁瑣,現在就能本地寫本地編譯。

正巧,買了一個平板,愛奇藝之余,也能作為程序員的一波生產力了。

VSCode如何進行安卓開發?Code FA項目實戰分享

編譯 C 語言

選了一個一直在學習的項目,scrcpy,一堆 c 源碼,最后很順利的編譯下來了。

VSCode如何進行安卓開發?Code FA項目實戰分享

Web 開發

移動端的網頁調試一直都是問題,作為野路子前端的我也很無奈,一般會加一些 vconsole 的組件來獲取調試日志。

之前個人項目速享適配移動端 web 就是這么干的

現在,我們可以本地開發,本地調試,有 node 整個前端大部分項目都能拉下來了,真實的移動端物理環境。 試試VSCode如何進行安卓開發?Code FA項目實戰分享

寫博客

本篇文章完全是在這個安卓版的 VS Code 中完成的,使用 hexo 本地調式

VSCode如何進行安卓開發?Code FA項目實戰分享

寫文檔

VSCode如何進行安卓開發?Code FA項目實戰分享

VSCode如何進行安卓開發?Code FA項目實戰分享

寫后臺,接口測試

寫一點簡單的后臺,如 python 的 fastapi,flask,并通過 rest client 進行接口測試

VSCode如何進行安卓開發?Code FA項目實戰分享

最后

為了讓其他的用戶能直接使用到這個 app,我將其上架到了酷安。

看了下 vscodium 和 code-server 的開源協議都是 MIT,如果有侵權的地方辛苦評論區提醒一下鄙人。

Code FA 酷安下載地址

Code FA 個人服務器下載地址

個人軟件快捷下載地址

開源地址

隨便玩,有問題評論區留言,覺得不錯的給個 star,文章不錯的給個贊,

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合
亚洲精品伊人| 亚洲成av人片一区二区密柚| 精品在线91| 亚洲第一区色| 香蕉人人精品| 亚洲欧美不卡| 日韩国产在线观看| 一本一道久久a久久| 久久精品国产68国产精品亚洲| 欧美日韩国产观看视频| 中文在线资源| 91精品蜜臀一区二区三区在线| 尤物tv在线精品| 国产视频一区在线观看一区免费| 婷婷亚洲五月| 亚洲精品三级| 欧美精品99| 精品日韩视频| 黄色日韩在线| 日本欧美大码aⅴ在线播放| 国产亚洲精品美女久久久久久久久久| 国产福利资源一区| 免费一二一二在线视频| 精品视频在线观看网站| 欧美亚洲激情| 日本午夜精品久久久久| 成人福利视频| 蜜臀a∨国产成人精品| 里番精品3d一二三区| 激情欧美国产欧美| 日日夜夜免费精品视频| 国产一区二区三区四区五区传媒| 欧美精品一区二区久久| 日韩国产欧美在线播放| 丝袜美腿诱惑一区二区三区| 午夜在线视频观看日韩17c| 欧美在线看片| 久久精品高清| 久久大逼视频| 日韩不卡一区| 国产日韩一区二区三区在线| 欧美精品一区二区三区精品| 精品美女在线视频| 日本大胆欧美人术艺术动态| 亚洲欧洲美洲av| 国产一卡不卡| 天堂俺去俺来也www久久婷婷| 亚洲日本网址| 国产999精品在线观看| 欧美久久一区二区三区| 久久夜色精品| 伊人成人网在线看| 日韩精品1区| 国产亚洲久久| 欧美日韩精品一区二区三区在线观看| 日韩电影免费网站| 成人精品视频| 精品久久99| 久久香蕉精品香蕉| 卡一精品卡二卡三网站乱码| 国产精品一区二区av交换| 欧美视频精品全部免费观看| 日韩欧美2区| 日韩二区在线观看| 日本成人在线不卡视频| 日韩在线网址| 日韩精品导航| 国产精品久久久久久久久久白浆| 蜜臀久久99精品久久久画质超高清 | 久久精品福利| 国产精品精品| 激情综合网址| 亚洲精品自拍| 国产欧美精品久久| 精品中文在线| 久久人人97超碰国产公开结果| 日韩精品一卡| 亚洲三级观看| 91亚洲无吗| 麻豆一区二区99久久久久| 精品一区二区三区在线观看视频| 国产福利片在线观看| 欧美午夜精品一区二区三区电影| 女人天堂亚洲aⅴ在线观看| 亚洲最新av| 精品一区二区三区在线观看视频| 夜鲁夜鲁夜鲁视频在线播放| 红桃视频亚洲| 国产伦理久久久久久妇女| 狠狠久久伊人中文字幕| 欧美美女一区| 国产精品xxx| 一区三区视频| 亚洲三级av| 亚洲国产欧美日本视频| 免费美女久久99| 国产h片在线观看| 日韩在线播放一区二区| 91亚洲国产高清| 日韩专区视频网站| 99久久亚洲精品蜜臀| 香蕉久久一区| 免费污视频在线一区| 日本成人在线不卡视频| 欧美~级网站不卡| 精品久久久亚洲| 免费成人在线影院| 91日韩在线| 久久国产成人| 麻豆91小视频| 日本中文字幕不卡| 亚洲精品一区二区妖精| 国产在线看片免费视频在线观看| 日韩精品视频网站| 国产精品美女久久久浪潮软件| 激情国产在线| 日韩综合一区| 国产欧美成人| 88久久精品| 亚洲va久久久噜噜噜久久| 久久亚洲美女| 99re国产精品| 亚洲欧美日韩一区在线观看| 超碰99在线| 精品五月天堂| 欧美国产免费| 久久精品亚洲| 麻豆成人91精品二区三区| 精品一区视频| 国产成人77亚洲精品www| 老牛国内精品亚洲成av人片| 国产精品久久久久久久久免费高清| 日韩av一区二区在线影视| 亚洲欧洲日韩| 国产欧美一区二区精品久久久 | 亚洲免费资源| 亚洲免费一区三区| 久久先锋影音| 日韩精品亚洲一区二区三区免费| 天海翼亚洲一区二区三区| 日韩高清一级| 久久中文字幕一区二区| 欧美xxxx中国| 五月精品视频| 日本成人在线视频网站| 欧美激情日韩| 99久久婷婷| 日韩欧美中文字幕一区二区三区| 91精品国产自产在线丝袜啪| 欧美亚洲tv| 欧美sm一区| 日欧美一区二区| 欧美综合社区国产| 日韩国产欧美| 日本在线不卡视频一二三区| 精品欠久久久中文字幕加勒比| 久久精品亚洲人成影院| 免费成人在线影院| 精品国产午夜| 国产精品日韩久久久| 国产精品一区二区精品视频观看| 少妇久久久久| 欧美aaaaaa午夜精品| 九色精品91| 乱一区二区av| 中文字幕乱码亚洲无线精品一区| 国产乱人伦精品一区| 高清一区二区| 好看的亚洲午夜视频在线| 日本不卡一二三区黄网| 91亚洲国产成人久久精品| 国产二区精品| 国产免费播放一区二区| 亚洲色诱最新| 成人精品国产亚洲| 青青草91视频| 亚洲综合国产| 蜜桃成人精品| 红杏一区二区三区| 中文字幕一区二区三区四区久久 | 日韩国产一区二区| 国产精品对白久久久久粗| 精品国产中文字幕第一页| 福利一区二区免费视频| 日韩伦理福利| 亚洲91视频| 亚洲特色特黄| 日韩精品视频在线看| 国产精品久av福利在线观看| 精品视频在线观看网站| 91看片一区| 亚洲综合二区| 最新亚洲国产| 国产视频一区二| 在线看片福利| 伊人久久成人| 欧美专区一区| 一本大道色婷婷在线| 天使萌一区二区三区免费观看| 四虎在线精品|