- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Windows 10真的要兼容安卓App了,微软到底想玩什么由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
最近macOS 11以及M1芯片的横空出世,让很多人对苹果的生态整合能力再次发出了惊呼。macOS 11能够兼容iOS平台的应用,这让苹果桌面和移动平台的生态得以互通互融,一举提升了macOS在生活娱乐方面的功力.
macOS 11能运行iOS App 。
但实际上,想要打通移动平台和桌面平台的,并不止是苹果一家,甚至苹果称不上是先行者。在苹果之前,微软已经作了多次尝试,例如开发WM、WP移动平台,研发.NET跨平台开发技术,推行UWP这样的多平台通用应用等等。然而微软的努力,似乎没有在市场上取得太大的反响,WP已经宣告终结,UWP应用始终难成主流,微软在消费市场的势力,现在紧缩在Windows 10这个桌面平台周围.
然而微软终究是想要突围的。最近,传出了令人在意的消息:微软正在认真考虑,让Windows 10在2021年能够兼容安卓App.
最近Win10已经对手机投屏的安卓App做出了界面优化,这或许是为Win10原生兼容App做准备 。
苹果macOS兼容自家的iOS App,这个操作我们能想象得到;微软Win10能运行同时兼容多平台的UWP应用,这个操作也不难理解;而现在Win10竟然打算兼容Google家安卓系统的App,这打的到底是什么算盘?为了让Win10同时拥有桌面和移动平台的生态,微软如此做真的有必要吗?今天,一起来谈谈这个话题吧.
Win10兼容安卓App到底是怎么回事?
首先要确认的是,Win10将兼容安卓App的消息,是有可靠来源的。根据Windows Central的报道,该项目在微软内部被称之为Latte,该项目将允许应用程序开发人员将他们的 Android 应用程序带到 Windows 10,几乎不需要修改代码。Win10将会内置安卓子系统,以实现安卓App的兼容.
从技术上来看,Win10兼容安卓App,是可行的。如果你之前关注过WP/Win10M系统,那么应该知道微软曾经在Win10M中实现过安卓模拟器(Project Astoria),能够在WP手机中运行安卓App。只不过由于效率等原因,并没有将相应版本正式推送给用户。但这也说明,微软其实早就在Windows系统中完成了对安卓App的兼容,随着硬件的进步,性能和续航的问题也将大为改善.
微软之前在WP/Win10M移动平台上,也推出过兼容安卓App的企划 。
当年的Win10M,通过某些手段,是可以安装运行安卓App的 。
实际上,打算让安卓为自己生态输血的,并不止微软一家。安卓本身就是非常适合第三方对其进行匹配,尽管它来自Google,但安卓本身分为开源的AOSP(Android Open Source Project)安卓开源项目,以及闭源的GMS(Google Mobile Service)部分。只要遵循相应的开源协议,任何人都可以通过AOSP来制作安卓的兼容层,例如Sailfish旗鱼系统,又例如最近的鸿蒙系统,都实现了对安卓App的兼容.
因此,无论从技术还是从商业的角度来看,Win10兼容安卓App的确是没有问题的——AOSP允许微软这么做,而微软也的确在Win10M中实现过类似特性。但是,这是否意味着在Win10中,安卓App就能够有完美的体验?恐怕未必.
前面提到,安卓系统分为开源的AOSP和闭源的GMS两部分。微软能使用的,是开源部分的AOSP,但偏偏在Google的运营下,越来越大的安卓App,需要一来GMS来运行.
以Google Play服务为代表的GMS,掌控着很多App的关键API,无法兼容GMS则不能通过CTS兼容认证 。
在全球范围内,Google通过掌控Google Play商店这个分发渠道,让越来越多的安卓App接入了GMS生态当中。例如App如果想要实现推送功能,它会使用Google的GCM/FCM推送;App想要实现导航定位,它会接入Google地图;游戏想要联机,那么则会接入Google Play游戏……缺乏了GMS,很多App的功能就会残缺,甚至App无法正常使用,这也是为何华为被禁止使用GMS后,在全球市场会遭遇重大挑战的原因.
而Win10兼容安卓App的项目Latte,并不能使用GMS服务,在日后也不会有兼容GMS的希望——Google从未授权非安卓系统,来使用GMS。对于此,微软需要另辟蹊径,通过自建API来实现对GMS的替代.
Win10兼容安卓App意欲何为?
微软让Win10兼容安卓App,在很多朋友的眼中,似乎是一种“资敌”行为——让自家系统也成为安卓生态的土壤,这是不是太过慷慨?微软自然不可能在做公益,实际上,微软对生态的运作,近年一直以“跨平台”、“卖服务”为中心,Win10兼容安卓App,也是这一思路的产物.
如果你经常关注微软的产品,不难发现,微软几乎成为了各大平台的“最佳开发者”。在iOS、安卓乃至最为直接竞争的macOS平台上,微软都开发了大量高质量的软件应用。像Office、OneDrive等王牌软件,微软都不遗余力地将其发布到其他平台上,甚至比自家的WP平台更上心.
这是WP/Win10M宣告死亡时,微软在Play商店发布的安卓App,比自家平台还更加上心 。
微软这样做,目的是显而易见的——让自己的产品覆盖尽量多的平台,接而完成从“产品”到“服务”的转型。通过诸多产品,无论你使用的是什么平台,都可以接触到整套微软提供的服务。使用安卓也好,iOS也好,都可以通过上面的Office编辑文档,通过Outlook同步账户发送邮件,通过OneDrive管理数据,这时候,用的是什么平台,就不那么重要了.
Win10兼容安卓App,也可以起到类似的作用,但又有所不同。这时候,不再是由微软应用来服务平台,而是用Win10这个平台来服务应用。尽管安卓App的开发是由Google来主导,但只要它们能在Win10中运行,用户愿意在Win10中使用安卓App,那么用户就不可避免地会接触到Win10内置的微软服务。从这个角度来看,Win10相当于一个集微软服务于一身的终端,能够兼容更多类型的应用软件,自然也就增加了微软服务的吸引力——目前Win10就内置“我的手机”,可以通过连接安卓手机来运行安卓App,让Win10成为安卓机的一个服务终端。而未来Win10直接能原生运行安卓App,只是节省了必须连接安卓机这个步骤而已.
Win10中“我的手机”运行安卓App的效果 。
让Win10兼容安卓App,并不是微软这一思路的唯一成果。例如,微软就已经通过WSL,让Win10兼容原生Linux系统,Linux开发者可以直接使用Win10来工作;又例如,Edge浏览器放弃了自研内核转用Chromium,获得了完全兼容Chrome扩展程序的能力,结果我们也看到了,Edge浏览器从Chrome手中抢过了大片份额,越来越多人接触到了微软在Edge浏览器中植入的笔记、记录同步等服务.
Win10中的WSL,让Linux开发者能够在Win平台下进行Linux开发,增加对微软服务的接触机会 。
简而言之,Win10拥有自己的生态,这固然重要;但Win10是否能兼容其他生态、让微软的服务渗透到更多用户当中去,也很重要。应用的虚拟化、跨平台在未来是大趋势,在微软缺乏移动平台这个重要立足点的现状下,微软更加激进地推行了用一个Win10系统、兼容多种平台生态的策略,也是一种合理的选择.
总结 。
微软让Win10兼容安卓App,乃至更多平台的应用,这无疑可以增强Win10的竞争力,让微软服务覆盖到更多用户当中。但这也会带来其他一些问题,例如微软能否建立起一套足够完善的API,用以取代安卓App所需要的GMS?就如同正在起步的华为HMS一样?又例如安卓App并不是为桌面环境所准备,Win10要如何确保它们依然能获得良好的体验?触屏电脑的普及真的能解决这个问题吗?这都是有待观察的.
无论如何,Win10兼容安卓App的确是一个很有趣而且颇有意义的尝试,让我们期待Win10正式上线这一特性吧.
最后此篇关于Windows 10真的要兼容安卓App了,微软到底想玩什么的文章就讲到这里了,如果你想了解更多关于Windows 10真的要兼容安卓App了,微软到底想玩什么的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
这个问题在这里已经有了答案: 关闭 12 年前。 Possible Duplicate: Why can't Python handle true/false values as I expect?
我是不是遗漏了什么或者这是 ruby 中的错误? a = %w(foo bar baz) a.include? "foo" # => true a.size == 3
从 Modelica 文档来看,注释 Evaluate 似乎只对参数有影响: https://build.openmodelica.org/Documentation/ModelicaReferenc
为了避免嵌套的 if 语句并提高可读性,我想创建一个switch(true){ ... } Coldfusion 中的声明。我在 php 中经常使用这个,但是当我在 Coldfusion 中尝试这个时
嗨,我正在尝试处理 ajax json 响应 这是我的代码 success: function (j) { switch(true) { case (j.cho
我之前在我的 TF 代码中使用过这个: count = "${var.whatever == "true" ? 1 : 0}" 这非常适合我想要使用的东西。但是,我正在考虑如何最好地使用类似于说的
我之前在我的 TF 代码中使用过这个: count = "${var.whatever == "true" ? 1 : 0}" 这非常适合我想要使用的东西。但是,我正在考虑如何最好地使用类似于说的
这个问题在这里已经有了答案: How can I return pivot table output in MySQL? (10 个答案) 关闭 5 年前。 我正在尝试构建一个以唯一列值作为列名的表
我制作了一个简单的 JDialog,其中包含一个标签和一个按钮,它基本上相当于信息对话框。所以在对话框中,有一个方法 display() 我在其中调用了 setVisible(true) 五次。 据我
在 bash 4.2.8(1)-release (x86_64-pc-linux-gnu) 在 Ubuntu 11.04 上这个命令 [ $(wc -l /var/www/some.log|cut -
我正在使用 c 语言进行并发处理,我有一个进程池。为此,我让每个 child 都在一个 While (True) 循环中。为了杀死 child ,我正在使用一个全局变量和一个信号处理程序来修改它来打破
我正在尝试选择填写了字段的数据库条目。数据库有两种插入数据的方式,一种输入评论,一种不输入,我希望只选择填写了评论的行。 $requete = "SELECT * FROM daysoff WHER
如何在 JavaMail session 中setDebug(true) 捕获流并在我的日志记录框架中使用它? (缺少下载源代码,更改接受流作为参数的方法,重新编译它,...) 更一般地说,Java
我是 JavaScript 的新手,我刚刚发现了我无法理解的奇怪行为: var magicVar = Math.sin; magicVar == true; // it returns false m
对此感到困惑。 在两台服务器上运行相同版本的 MySQL。 (从完全相同的 rpm 构建)- 沿线的某个地方,一些开发人员改变了一些东西...... 服务器 1: mysql> select ( no
我在查看 OpenSSL 中使用的一些预处理器宏时,从 crypto/stack/safestack.h 中发现了以下内容: #define CHECKED_STACK_OF(type, p) \
所以我遇到了一个问题,我的正则表达式看起来像这样:/true|false/。 当我检查单词 falsee 时,我从这个正则表达式中得到一个 true,有没有办法将它限制为确切的 true 或 fals
我正在对这个恶意 JavaScript 行进行一些试验:var undefined = true; JavaScript 中每个未初始化的变量都有 undefined 的值,这只是一个保存特殊值 'u
我想将 PHP 的微时间存储为我在 MySQL 中的时间戳。 我去过told最好用 DECIMAL 存储它,但我找不到理想的大小。 有谁知道 microtime(true) 返回的最大大小是多少,所以
在 PHP 中,当您在 URL 中包含诸如“var=true”之类的内容时,URL 中的“true”和“false”是否被转换为 boolean 变量,或者它们是否等于文本“true”还是“假”?例如
我是一名优秀的程序员,十分优秀!