1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > VSCode如何进行安卓开发?Code FA项目实战分享

VSCode如何进行安卓开发?Code FA项目实战分享

时间:2023-12-27 13:39:16

相关推荐

VSCode如何进行安卓开发?Code FA项目实战分享

开发工具|VSCode

VSCode,安卓

开发工具-VSCode

本篇文章带大家了解一下VSCode如何进行安卓开发?希望对需要的朋友有所帮助!

fmscms视频直播室源码,ubuntu没有边框,一般tomcat并发,爬虫技术ppt,php项目系统架构,seo入门教程seo顾问lzw

php源码架设,ubuntu内核删除了,tomcat配置文件是哪个,色花堂爬虫,php编程基础教程外包,ASO及SEOlzw

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入门教学》】

云群组百度网盘群组分享源码,怎么打开ubuntu手机,爬虫进化出翅膀,php暂停几秒,英语seo竞争lzw

客户端框架

客户端是用 Flutter 进行的开发,而这个框架的选用并不是为了跨端,仅仅是为了快速尝试,还有基础能力的使用。

实现方法分析

code-server 在 github 发布的版本中是有 arm64 架构的,整个下载后,开终端解压执行就挂了,这个虽然是 arm64,并且带有一个 arm64 的 node,但是是为完整 linux 准备的。也就是说,node 中硬编码了 /usr /lib 等这些路径,并且附带的 node_modules 中也有大量的使用到 linux 特有节点的路径,这些安卓上都没有。

后来一想,termux 中自带的环境也是有libllvmgccnodejs的,把整个 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。

具体实现代码

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}

安装完整 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 启动就行,非常方便

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 有这样的提示

也就是说开启 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加载显示urlview.loadUrl(url);//返回truereturn 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 its own popup window. childView.setBackgroundColor(Color.GREEN); childView.setWebViewClient(new WebViewClient() {@Overridepublic 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 的组件来获取调试日志。

现在,我们可以本地开发,本地调试,有 node 整个前端大部分项目都能拉下来了,真实的移动端物理环境。

试试

写博客

本篇文章完全是在这个安卓版的 VS Code 中完成的,使用 hexo 本地调式

写文档

写后台,接口测试

写一点简单的后台,如 python 的 fastapi,flask,并通过 rest client 进行接口测试

最后

为了让其他的用户能直接使用到这个 app,我将其上架到了酷安。

看了下 vscodium 和 code-server 的开源协议都是 MIT,如果有侵权的地方辛苦评论区提醒一下鄙人。

Code FA 酷安下载地址

Code FA 个人服务器下载地址

个人软件快捷下载地址

开源地址

随便玩,有问题评论区留言,觉得不错的给个 star,文章不错的给个赞,

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。