首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    安卓实现安卓-光速虚拟机技术内幕

    光速虚拟机是基于安卓系统和ARM处理器架构实现的一套虚拟化技术,在安卓系统的用户态空间无需特殊权限实现了一套完整的安卓内核和硬件抽象层,能够在安卓APP内部运行另外一个安卓系统,虚拟机内部的APP和游戏运行性能能够接近真机的运行性能和兼容性。光速虚拟机也可以认为是一种安卓系统上的库操作系统(libos)。从行业的情况来看,微软和Google分别在不同系统上实现过类似的方案,微软DrawBridge是在Windows上实现Windows,以及其后续发展出来的WSL是Windows上实现linux,Google的gVisor则是linux上实现linux。光速虚拟机是通过安卓来实现安卓。光速虚拟机是市面上第一家在手机上实现完整安卓虚拟化的产品。

    049

    Android中compileSdkVersion、buildToolsVersion、minSdkVersion和targetSdkVersion的含义作用

    AndroidStudio中的build.gradle中包含了这些值,compileSdkVersion和minSdkVersion还比较通俗易懂,compileSdkVersion表示当前项目的编译版本,即你想让AndroidStudio以什么SDK版本去编译你的项目,minSdkVersion表示当前项目支持的最低安卓系统版本,buildToolsVersion则是指构建工具的SDK版本,也就是AndroidStudio中设置的AndroidSDK版本,buildToolsVersion要高于compileSdkVersion版本,这个很好理解,如果编译版本高于AndroidStudio的SDK版本,那AndroidStudio怎么给项目编译呢?targetSdkVersion的意思是当前app的目标sdk版本,可以理解为当前app在这个版本是比较稳定的,针对这个版本所开发的,是安卓提供的前向兼容的主要手段,它的作用就是当targetSdkVersion为20的app运行在系统版本号高于20的手机系统中,app所执行的旧版本api在高版本可能不一样了,但是安卓为了兼容在系统层会读取当前应用的targetSdkVersion,当targetSdkVersion版本号低于当前版本就会执行旧版本的api,不会导致由于系统的原因而让app运行失常。 compileSdkVersion和buildToolsVersion作用于项目的编译,minSdkVersion和targetSdkVersion控制项目的运行版本。一般来说compileSdkVersion设置为最新的SDK版本比较好,compileSdkVersion的作用就是可以让我们在编码的过程中编译器以最新的SDK的api去要求我们的编码,它会有最新的一些提醒和异常,compileSdkVersion版本调高还有一个好处就是当我们的项目有其他第三方sdk或者supperLib时compileSdkVersion低于这些库的编译版本时就无法编译打包。targetSdkVersion也是一样设置为最新的版本最好,因为不需要让系统对app进行前向兼容了,同时也可以使用高版本的一些新特性。像我们在开发过程中如果需要用到高版本的api但是我们又不想去改动项目中的代码时可以把compileSdkVersion版本调到新版本,targetSdkVersion保持不变就可以,编译版本让你可以调用高版本的api,但是在高版本运行时旧的api由于targetSdkVersion的原因而正常运行。

    02

    尝试为nodejs贡献代码

    一直都有在看一些开源项目的代码,但是还没有试过提交pr。因为最近在研究websocket和keep-alive。而websocket涉及到长连接,过多无用的长连接对系统来说是负担,是否可以尽快发现对端是否已经掉线,从而释放这个连接来减少系统压力呢,就这个初衷,想通过wireshark和nodejs调试一下心跳机制,但是发现nodejs对这个的支持不是很好。tcp的心跳机制,支持三个配置,但是nodejs的setKeepAlive只支持一个配置(后面发现最新版代码里有一点支持的痕迹了,但是没有给用户提供接口),所以就产生了提交pr的想法。代码改动不大,但是整个流程走下来,也挺费时间的。 本文大致分享一下这个过程。我的诉求是想让nodejs把修改心跳机制和相关配置的接口暴露给用户。但是libuv层的接口本身就不支持这个能力。所以要解决这个问题,要修改c、c++、js的代码。因为nodejs的架构就是这样,libuv提供能力,c++套壳,js调用。所以你想加一个libuv不支持的功能时,你就得从libuv改起。

    01
    领券