百科问答小站 logo
百科问答小站 font logo



据报道称“浏览器内核有上千万行代码”,浏览器内核真的很复杂吗? 第1页

  

user avatar   wang-bin-1-53 网友的相关建议: 
      

这会儿正好在rebuild chromium,机器卡到不行。看到这个问题有感来回答一下。

其他童鞋对于“浏览器内核真的很复杂”这个复杂的一面,已经回答的很的多了,但我想从“复杂”和“没那么复杂”两个方面都来讲讲,给大家提供一些别的思路和参考。

(如果觉得前文太长,也可以直接跳到最后看吐槽)

先说复杂。其他回答基本都是用chromium来举例的。我们来看chromium,这货确实相当相当的复杂。源码拉下来就有十多G。我们不禁好奇,chromium到底有哪些玩意,为啥平时感觉只是显示个网页、几句HTML而已,怎么会需要这么多代码。

第一眼从目录结构上,chromium包含这些东西:

  • base,通用代码,基础组件,包含字符串、文件、线程、消息队列等工具类集合。
  • cc,Chromium compositor 的缩写,负责渲染合成。
  • chrome,Chromium 浏览器外壳实现。
  • content,多进程沙盒浏览器的核心代码,管理进程架构和线程架构。
  • gpu,OpenGL 封装代码,包含 CommandBuffer 和 OpenGL 兼容性支持等。
  • net,网络栈实现。
  • ipc,进程间消息通信实现。
  • media,多媒体封装代码,包含了媒体内容捕获和播放的组件集合。
  • mojo,类似于 Android 的 AIDL,提供了跨语言(C++ / Java / JavaScript)跨平台的进程间对象(Object)通信机制;。
  • skia,图形库,这里存放的是 Chromium 对 skia 的 配置和扩展代码,另有 third_party/skia 目录存放原生的 skia 代码。
  • third_party,网页排版引擎。第三方库
  • ui,UI 框架。
  • v8,V8 JavaScript 引擎库。

看起来还好吧?但实际上,这里面每一个展开来讲,都是一本厚厚的工具书的容量。

比如net,看起来只是个网络库,然而里面包含主机解析,cookies,网络改变探测,SSL,资源缓存,ftp,HTTP, OCSP实现,代理 (SOCKS和HTTP) 配置,解析,脚本获取(包括各种不同系统下实现),QUIC,socket池,SPDY,WebSockets……里面每一项展开来讲,就是一本书。

v8层,看起来功能很单一,只是实现一下js嘛,但里面包括字节码解析器,JIT 编译器,多代GC,inspector (调试支持),内存和 CPU 的 profiler(性能统计),WebAssembly 支持,两种 post-mortem diagnostics 的支持,启动快照,代码缓存、代码热点分析……里面每一项展开来讲,又是一本书,还是难坑的编译原理和优化方向。

Skia,看起来只是个图形库嘛,用点画出各种图。然而里面包括十几种矢量的绘制,文字绘制、GPU加速、矢量的指令录制以及回放(还要能支持线程安全)、各种图像格式的编解码、PDF的生成(这个是个隐藏的很深的功能,但很有趣。Skia支持把矢量图绘制成pdf)、GPU渲染优化(既以上部分功能需要用gpu来渲染)……里面每项展开来讲,又是一本书。另外值得一提的是,skia是谷歌收购的。不知道谷歌是觉得自己没实力做,还是太费功夫。总之谷歌选择了直接买别人的代码来完成这些功能。

ui,看起来只是一套UI 框架嘛。然而chromium需要一套全平台适配的ui库,还要能支持gpu加速。不过可惜的是里面没实现richedit。ui库的设计,深入来做,其实可以说又是个浏览器了。

等一下,以上这些,看起来只是浏览器的外层。我们最关心的网页排版呢?这个难道不是浏览器的核心嘛。是的,神奇的是,chromium把排版引擎blink放到了third_party下,而且架构上真的当成了一个第三方库一样对待。据谷歌的员工说,这是历史原因……好吧姑且信了。然而这个第三方库,成了当之无愧的最复杂,功能最重要的第三方库。

blink的工作包括:

  • 实现web平台的规范(例如,HTML标准),包括DOM,CSS和Web IDL
  • 配合V8运行JavaScript
  • 从底层网络堆栈请求资源
  • 构建DOM树
  • 计算样式和布局
  • 请求chrome compositor(上文提到的cc层)并绘制图形。

说起来简单。看一下现在的HTML、CSS规范,各种细节加起来……有快上万页。除了chromium layout组、firefox的开发人员等,我想没几个人会去仔细阅读并一个个的实现这些规范吧。光是看目录和文字描述,就头大了,更别说要完整的实现出来。往往一个简单的display:girdflex背后就是庞大复杂的计算,而且还要充分考虑性能上如何优化,滚动时如何更快的展示…

另外排版还需要支持世界各国的奇奇怪怪的文字。例如从右往左写、规则复杂无比阿拉伯文。相比之下,汉字这种方块字的排版简直就是弟弟。还有各种奇怪的unicode字符。

【转】奇怪的unicode字符

怎么能处理好这些字符和语言,并配合几千页的html、css排版规则正确显示出来……这是个极度烧脑的事情。

我们再从排版这个大泥坑里跳出来看看外面别的东西。这时候你会发现……外面的泥坑好像更大。

随便说几个,比如:

  • 多进程框架。嗯,你需要更多的进程来渲染更多的网页,这样才能崩溃了也不影响其他网页。注意,chromium把渲染排版放在渲染进程,但绘制到窗口又是主进程。这里面少不了各种跨进程通信、同步。对于代码的编写以及调试,是个很考验编程功底的事情。
  • webrtc。网络视频相关。又是一个被收购的库。关于webrtc,你需要知道它能实现多人实时语音、降噪、网络传输视频、摄像头的捕获,音频算法实现(比如 fft),视频算法实现(比如 h264 协议格式), Socket、线程、锁等基础库(是的,webrtc也造了套自己的轮子)。又是个庞大的组件。
  • 密码管理、下载管理、扩展管理。
  • 一套调度整个多进程框架以及blink的核心层。在chromium被称之为content层,负责处理一切繁琐的细节。例如各种系统、平台的鼠标键盘消息派发,历史栈(前进后退),页面缓存。
  • 沙箱机制。负责隔离以及降低子进程的权限。沙箱的实现上,在不同系统做了诸多hook操作。
  • chrome相关的外壳及应用。例如我们常见的标题栏、url栏,webui如设置页、历史记录页。对,其实chrome单词的原意就是这个。
  • Clound_Print,谷歌云打印相关,提供谷歌浏览器页面预览打印清单。
  • Courgetter,谷歌提供的二进制文件对比核心算法,用于比较不同版本的二进制差异。谷歌为了方便升级,搞了套升级策略和算法。
  • 神奇的syzygy优化。是的,谷歌也嫌chrome太大了、加载太慢了。于是他们开发了一套工具链,优化重排布PE二进制文件的算法来达到优化程序。Chrome浏览器应用了Syzygy优化之后,程序冷启动的页面调度(paging traffic)优化了80%,加载的Image的Working Set优化了40%。简单的说,谷歌为了优化启动性能,从编译器上对exe、dll开始做手脚了。
  • Media,Chrome的多媒体模块,支持音频播放和录音等功能。这里用到了ffmpeg。但在ffmpeg外,为了和blink配合,又是包裹了厚厚的一层,用来处理好渲染管线。另外MSE API也花了不少功夫。
  • swiftshader。很有趣的一个模块,用纯软件的代码,完整实现了opengl的接口。可以在没有硬件加速的机器上跑起opengl。也是个庞大的库,而且也是被收购的。看起来谷歌对图形学方面的很多工程似乎不擅长?还是不想觉得应该交给更专业的团队去做。
  • gn、gyp、ninja。chromium为了更方便的管理编译,自己撸了三套轮子。类似makefile、cmake,然后底层调用ninja再到vs或者clang负责具体编译

其他的点还有很多很多,以后想到了再补充。总之,以上随意一个点,要正确的实现,都是一个团队的工作量,都可以写成一本书。然而chromium把他们全部实现了,而且还在不停的加入新的功能。

看到这里,大家应该明白为啥强如微软,也放弃维护他们自己的浏览器内核了。因为需要投入的人力财力实在是太恐怖了。chromium团队,光是开发人员,都已经上千了。假如每个人员年薪是100w 人民币,持续投入十年,这个支出就是几十亿,这还不算周边的测试、产品、UI。最关键的是,就算微软愿意投入十亿,能保证做到chromium相同的功能吗?就算能做到相同的功能,还不是另外一套chromium,能做出其他优势吗?于是最后微软也放弃了,干脆直接从开源的chromium上改起,把微软需要的功能融入chromium。

所以,chromium的霸权就是这么来的。看似开源免费,实则把所有开发者和对手,紧紧的捆绑在自己周围。

好了,现在吐槽开始了。

chromium称霸浏览器界以来,看起来开源,谁都可以拿去改。然而比起它的前辈,我觉得从“道德”上,chromium要“差”很多。最让我受不了的一点是,chromium在无尽的往里面塞功能的时候,很少想过是否别人可以轻易的移除它们。chromium代码号称模块化、高内聚低耦合,然而如果你想砍掉一些不需要的东西,对不起,没有宏控制,手动删代码吧。有几个人能有精力一点点的去掉里面这些繁琐的功能呢?这就导致一个问题,需要chromium某一部分功能的人,必须被强塞进一堆谷歌认为你需要的东西。

对比之下,为啥我说比起chromium的前辈要差很多呢,其实我指的正是webkit。webkit最让人欣赏的一点就是它在专注实现内核的同时,大部分功能都是可“拆卸”的。有宏可以关闭。甚至连svg这种排版上的小功能都有宏可以关闭。而chromium,如果我需要排版、音视频,但不需要多进程呢?如果我需要音视频但不需要webrtc呢?对不起,谷歌没这考虑。要带就全都带上吧,不带你自己砍代码吧。等你辛苦几个星期砍完代码,谷歌告诉你,我都更新了2、3个版本啦,你要不要更新下代码?哦?新版本chromium架构又大改了?哭了……

这也就造成现在基于chromium的一堆开发框架,如electron、cef、nwjs,全都动不动100多M的大小。因为从chromium的框架设计上,就很难把那些极其庞大复杂的细节功能排除掉。这些功能对于谷歌作为一个浏览器来说,当然是必要的。然而回到本问题,“浏览器内核”真的需要这么复杂吗?浏览器需要这么复杂,这是真的;然而作为一个浏览器内核提供给一些sdk给别人用,也需要这么复杂吗?我们用electron写一套进供销管理系统的客户端,你会需要带上几十M的webrtc、webgl、多媒体播放、天城文支持吗?

最后打破这个疑问的,是我很多年后进入了QQ浏览器的移动端组(其实就是x5内核,微信上被大家吐槽最多的那个)。当年的x5内核其实是基于webkit改造的。从chromium回到webkit,我突然有种豁然开朗的感觉。

回到问题开头,从浏览器内核的角度,其实没那么复杂,只要做好网络、排版、渲染,就足以应付大部分使用场景了。

这让我想起浏览器早期年代,群雄争霸的时代,那时候浏览器内核很小。从几百K到几M的浏览器都有。我记得早年的移动设备上跑的浏览器,css支持的都不好,不过特别小巧,有的才几百K而已。

然而后来组里架构调整,x5内核为了跟上时代,从webkit切回了chromium(也是因为被骂了太多了,当时x5号称移动端IE6,做过微信相关开发的人应该深有体会)。对chromium深恶痛绝的我,当时有了一个大胆的想法。把排版引擎blink(也就是webkit在chromium里的继承者)重新从chromium里剥离出来,再补上一些周边的设施、组件,再次成为一个完整独立的浏览器内核。

当然我还是有自知之明的。一个浏览器内核而已,不可能实现chromium同样的功能。但能把排版、渲染、网络、视频实现,就差不多了。其实我也不是想做个浏览器,而是想专注内核这块,做一个提供给第三方app嵌入的内核。

作为一个内核,其实不需要上面讲的所有那一大堆功能。比如,网络层,大部分人不需要什么网络改变探测,ftp,OCSP实现,代理配置、解析、脚本获取,QUIC,socket池,SPDY什么的。大部分人仅仅需要一个http的实现,可以拉取到服务器资源。我用300k的curl代替了十余M的chromium net库,并工作良好。少了的功能可以用插件形式补上嘛。一些和排版渲染无关的功能,我都打算做成插件。例如音视频、webgl、webrtc、多进程等。

目前这个项目已经撸了5年了,开源在github上,提供C接口方便其他语言调用。整个编译出来就是一个1-20m左右的dll(视编译选项而定),甚至还包含了一个electron的精简实现:

weolar/miniblink49

欢迎围观。


user avatar   yi-yang-91-9 网友的相关建议: 
      

真的很复杂!

工作第三年的时候,我就觉得自己编程水平天下无敌,完爆大多数人。

直到我看见了Google Chromium的开源代码。。。

2010年加入创业时期的360,担任高级工程师,负责一个远控软件,同时要跟操作系统底层打交道,入职不久直属Leader就被调整,我开始带团队。

带团队不久之后,开始狂妄自大、目中无人,自以为老子天下第一,谁都看不上。

幸好,这时候遇到了一位在论坛上结识的C++高手,彼时他在百度担任某部门技术Leader。我和他聊天过程中,他感受到了我的自大和浅薄。

到今天还记得和他的对话:你是不是以为自己已经很牛逼了?去看看全世界最牛的代码吧,别在你的小圈子里和其他人比。

我回复:看什么??

他说:去看看Google Chromium吧。

我还真就开始学习Google Chromium了,初看时,真是有一种始惊、次醉、终狂的感觉。

Chromium的每一个子系统拿出来都无比复杂,你想真正看懂就需要大量的计算机体系基础知识。

这张架构图基本展现了以上模块的关联关系:

想看懂如chromium这样的顶尖开源代码,多看计算机经典书籍是必须的,不然一旦陷入到一个不明白的知识点,整个学习的过程全部卡死。

我把大学和工作中用的经典电子书库(包含数据结构、操作系统、C++/C、网络经典、前端编程经典、Java相关、程序员认知、职场发展)、面试找工作的资料汇总都打包放在这了,这套资源可不是一般那种网上找的资源,是伴随我从学生一路成长为腾讯高级开发工程师,360技术经理、360技术总监的打包全套,非常宝贵!点击下方链接直达获取:

我已经帮大家打包好了,点击下方链接直接获取:

说一个学习Chrome源代码的诀窍:Chrome的源码不要只看不上手,编译起来运行起来,多改改看看会发生什么。这个过程即好玩又能加深你对源码的理解。

真是不比不知道,一比吓一跳,有的时候,我们真的是处于愚昧山峰。

除了Google Chrome的源码,还可以多看看Google的其他开源代码,你会被震撼、被打击、被陶醉!同时,你也会知道,自己写代码究竟是个什么水平!

Google的所有开源代码在这,感兴趣的朋友可以看看:

包括了:Android、Angular、Chromium、Dart、DeepMind Lab、Flutter、Gerrit、Go、Istio、gRPC、Kubernetes、Polymer、Ptotobuf、TensorFlow、V8、WebRTC。

跟这个世界最顶尖的高手过招,你才能知道自己究竟有几斤几两~


user avatar   li-zheng-4-31 网友的相关建议: 
      

这两个游戏都有自己的问题。但严重程度完全不一样。

赛博朋克最大的问题是人力不够,没有人手把愿景在限期内做出来,导致后期狂砍。但从已有的成品来看,CDPR是完全有人才有能力把东西做出来的,只不过没时间做。光影效果,已有的垂直城市设计,以及主线和很多支线任务的演出都有毫不输巫师3的气质,尤其是日本城浮空平台那关,无论是游戏流程还是画面还是音乐,都把类似银翼杀手2047的那种气氛和感受做到了极致。有人说CDPR的人才都跑了,或者CDPR傲娇了开始放水,这并不客观。2077确实是个半成品,主机优化的问题尤其严重,但你关注已经完成的部分,用高配置PC玩,其质量并未令人失望,依然是巫师3的水准。

2077就像是一个优等生忘了做背后的几题的考卷,开天窗导致不及格,但已经做了的题目还是正确率极高的。

谈到E3的demo,单从画面上讲你很难说它缩水了。只不过CDPR没告诉你想要E3画面,就得上3080+光线追踪。。。

我猜想没有光追的话,游戏在大多数情况下也是可以达到光追的效果的,只不过人工工作量会很大,有些地方需要离线烘培,而有些地方需要人工设置虚拟光源。CDPR可能发现项目后期工作量太大搂不住了,就上了光追这个大杀器。。。


至于无人深空,现在口碑很好,但我要不客气地讲,这个游戏到了今天依然是垃圾,只配卖$19.95,打折的时候卖2.95的那种。

Hello工作室自始自终都没有把初始愿景实现的技术能力。

你可以看无人深空进入大气层的技术实现。先是一段飞船进入大气层摩擦发红的特效,然后可以看见地形通过一种非常粗糙、视距很近的情况下刷新出来,并且刷出来的地貌和太空中看到的地貌完全不同。所以从头到尾,hello工作室都没有类似精英危险和星际公民的无缝行星登陆技术。

无人深空更新了十几次,并没有触动这个游戏除了机械刷就没有任何深度的本质。这是一个极其无聊的游戏。但它刷了两年的DLC,玩家也就给他点面子,没功劳有苦劳。它每次更新我都会进游戏看看,但玩不了半小时就会放弃。一是实在无聊,二是它美术设计和渲染水平有限,色彩及其刺眼。比如在母船机库里,到处都是亮瞎狗眼的点状光源,但这些光源不会照亮周围的任何东西,看的时间长了有种不带护目镜看焊接的流泪效果。你说更新了那么久,这么简单的问题都不解决,有什么用呢。游戏中随处可见低级设计的痕迹,比如说有很多行星上有一种可以卖钱的球,这种球没有任何贴图,只有亮瞎眼的纯白色材质,在HDR效果下极其刺眼,但它又不是个光源,放在地上不会照亮周围任何东西。这种打开Blender就存盘的建模初手垃圾素材居然也能放在游戏里,真是活久见。

所以无人深空就像是一个学渣冒充学霸,把期望提得无限高,却每题都答错结果接近0分,被骂,然后花了漫长的时间在那里订正,一题一题的改,最后终于接近30分了,然后获得了大家的赞赏,全然忘记了它改了那么久依然是不及格。

无人深空的贴图我就不贴了,首发的时候真是纯垃圾,基本上是2008年魔兽世界首发的那个水准。现在也依然是垃圾,开个HDR看着眼睛都疼。


user avatar   lin-dong-30-21 网友的相关建议: 
      

稍微多说两句。

其实华人在海外,尤其是欧美社会遇到的很大的一个问题是意识不到种族的重要性。近代以前,中国基本都是处于一个“国家=天下”的状态。这就导致了很多中国人在面对近现代以威斯特法伦体系为基准形成的“民族国家”没有形成一个明确概念,因而在欧美,尤其是在北美(USA/Canada)这种移民国家里生活的时候政治上十分受挫。

不管你承认也好,否认也罢,一个人在美国的社会认定更多地来自于一个人的种族(race)而非阶级(class).以我们最关心的教育为例:大学录取会很大程度上根据你的种族来决定录取标准,而不是社会阶层,更不是政治倾向。不管家境如何,只要你是亚裔,那么你就有大概率碰到录取标准的歧视问题。

在这个前提下,任何一个有智商的人都能够看出来:在美国这个大背景下,在争取自身(个人/族群)权益的过程中,种族的优先级是排在最前面的,其次才是政治倾向和意识形态。因为大多数情况下你在填表的时候,不会让你选你是conservative还是liberal,只会让你选你是“white",“Asian”还是“Hispanic”. 而事实上,只要一个族群能够意识到美国社会种族优先的前提下,内部的政治光谱不仅不是问题,反而是优势,一个很好的例子就是犹太人。

犹太人在美国有多成功想必不用多说。但是犹太人并没有把自己局限在左翼或者右翼,而是通过在不同政治光谱上的发展,成功的让自己的种族在美国取得优势。说右翼,犹太人里面的一大票银行家企业家大家也有所耳闻;说左翼,犹太人中的囧叔,主持界传奇larry king,喜欢谈笑风生的华莱士等等都是业界传奇。这样他们右手掌控了经济和政治力量,左手掌控了舆论和传媒的力量,最终让族群取得成功。可见,以族群利益为先,则族内各个政见派系均受益;以政见利益为先,则族群分崩离析。

反观以叫兽为首的旧华“精英社会活动家“是怎么做的呢?不仅不去积极组织和联络真正能起到作用的政治基本盘(一个越来越壮大的华人群体),反而主动地去做出例如:损害自己族群的利益以换取一小撮外部政治利益(SCA5),试图不断的分裂族群内部力量(亚裔内部细分法案)等等赤裸裸乃至荒唐可笑的背叛种族利益的行为。这种叫兽,如果不是脑子进了水,那就只能是因为政治觉悟和政治水平实在太差,吃枣药丸


----------------------------


断脊之犬,狺狺狂吠。 一开始看到这篇文章我特别震惊,不单单是文章内容,更重要的作者身份:美国百人会会长及首个法学院院长?这样的人竟然说出如此粗鄙之语?不过回想一下,这倒是解决了我一直以来的疑问。

作为一个在美国各个领域都有杰出贡献的种族,作为一个平均收入和学历都远超平均线的种族,作为一个贡献了马友友,关颖珊,刘玉玲等杰出人才的种族,为什么美国华人的政治地位如此的低下?为什么华人的权益总是受到系统性的侵害和歧视?最重要的是,为什么华人,尤其是旧华人及其后代的自我认同和民族荣誉感低到令人发指?现在看来,这些旧华人中的“精英”“社会活动家”政治水准低到不堪占了很大一部分原因

其实在美国待过一段时间的人都明白,各个族群之间有竞争,有合作,也有斗争。但得到尊敬的条件只有一个:拥有力量。这个力量可以是经济力量,可以是知识力量,当然也可以是政治力量。所以这次大选华人主动出击,参与助选的行为我是非常认同的:重要的不是你站在哪一条队,而是展现能够左右选战结果的政治力量,这才是华人赖以发展的基础。相反,任何一种任凭意识形态洗脑而站队的行为都是政治水准低下的弱智行径。

其实稍微看了看叫兽的个人经历,未免有些可怜他。作为一个数次试图否认和摆脱自己华人身份的“社会活动家”,他的“习得性无助”十有八九也是在成长的过程中一步一步建立起来的。在中国崛起,新华人一步步向前的大背景下,他就像一头曾经被锁链拴住的幼象,完全没有意识到力量的对比总是会转化的,而华人政治家真正的基本盘只有自己。在这种情况下,旧华人的社会认知,一种貌似平等实则歧视的社会认知,只会进一步地被抛弃,最终由新华人引领实现真正的社会平等。旧华人畏畏缩缩的活了一百多年,却连美国这个国家的一点基本精神都没有学到,而这些分明写的很清楚:The land of the free and the home of the brave.

毕竟,大清都亡了,也请你们这些遗老遗少们滚回历史的尘埃里吧。 -------------------

原答案

这个所谓教授才真是把“歧视”二字阐释的淋漓尽致。


user avatar   lazymio 网友的相关建议: 
      

开源代码没啥可评价的。

但对RISC-V的生态有何影响还得再看,简单说把risc-v带入Android生态,就给risc-v的应用提供了不小的应用场景,但是还不清楚相关的工具链的成熟度。新闻上Android studio/NDK已经支持了RISC-v的交叉编译环境,但还不知道成熟度如何,这些实际上都会对选型有影响。Google对Android的性能调优做了很多工作,也有不少工具,这些东西何时开始支持risc-v也比较重要。

理论上RISC-v依赖Android生态,对Google是好事,但毕竟Google利用GMS还是控制了相当程度上的Android生态,当年号称不作恶的谷歌还是利用开源方案包装了一个半开放系统。依赖Android的任何厂商实际上都面临华为之前的问题。华为被迫选择了HMS之路,但其他中国厂商呢?

我觉得是时候由中国厂商联合比如欧洲或日韩厂商推出一个绕开GMS的,真正开放的andriod生态了。




  

相关话题

  博伊德-布什曼曝光的外星人是真的吗? 
  如何看待现在部分年轻人对于数码科技的消费诉求不再是实用,年轻人的偏好范围为何会变得越来越宽? 
  什么软件把pdf转化成音频? 
  如果将所有已知和可预测(科幻类也行)的人类科技按先进水平分级,那每个等级的科技世界具体是怎么样的呢? 
  给你一个亿,你愿意永远不用空调吗? 
  如何看待华为发布的 MatePad Pro?有哪些值得关注的信息? 
  怎么看待目前国内IC集成电路领域,未来城市发展格局? 
  如何看待上游供应链厂商确认高通已获准向华为出售 4G 芯片? 
  全画幅相机已经性价比很高的情况下, APSC 画幅相机还有必要存在吗? 
  如何看待Google Play要求八月份起新应用须打包为AAB格式?对鸿蒙的发展有哪些影响? 

前一个讨论
x^4+y^4+z^4+w^4=a^4有正整数解吗?
下一个讨论
美国对世界的的情报渗透达到了哪种程度?





© 2024-05-18 - tinynew.org. All Rights Reserved.
© 2024-05-18 - tinynew.org. 保留所有权利