这是一段GN代码,在Chromium当中,GN可以用来举行编译配置,指定哪些文件到场编译,哪些文件不到场。
而上述的代码中,注释里很明确写了!is_android,也就是说这些代码是不给Android使用的。但是Extension却又依赖这些代码,所以Kiwi使用了if (true),来把这些代码强制带到Android平台上。
不得不说,Kiwi的这种做法虽然暴力,但确实管用。我在思绪上举行了部门借鉴,不过写法要远比Kiwi更加优雅,否则这种写法在微软的代码检察上也是过不去的。
当然,这只是一个非常简单的例子,毕竟上Extension的代码量极其庞大,依赖关系错综复杂。我在整个的实现过程中能深深感受到,Google是完全没打算让Extension能在Android上运行,才会把代码写成如许。所以有小同伴还等待着Chrome Android能支持Extension的,短期内就不要想了。
另外,只是把Extension相干的代码带到Android平台上并不算完。要知道,带进来的这些代码都不是为Android平台设计的,必然会出现海量的编译错误。
因此,接下来才是更加困难的部门,就是怎样让这些Extension关联的代码在Android上能够编译通过。
这个就没有什么特别好的办法了,只能一个一个错误地去办理。
Chromium项目在编译的时候可以通过一个-k number的指令,告诉编译器遇到多少个编译错误之后才停止编译。我把这个数字调到了1000都不能一次性编译完整个项目,可见引入了Extension之后会带来多少的编译问题。
这些所有的编译问题一共花两个多月时间才全部处理完。两个多月时间,只是为了让项目能够编译通过,大家可以想象一下这个过程有多艰辛。
当然,即使所有的代码都编译通过了,也仅仅意味着Extension相干的代码被带到了Android平台上,这和在Edge Android上可以正常使用Extension了仍然是两回事。
因此,接下来的一段时间,我还要对Extension的详细功能举行开发调试,验证团体的Extension框架能否在Android平台上正常运行。不过相比起来,这已经算是回归到比较正常的软件开发流程了,之前做的那些工作才真的是整天摸着石头过河。
最后闯过无数难关,我终于做出了一个能够在Edge Android上运行Extension的Demo,这个项目到这里才算是正式立项。
之后就是以正规的流程去开发这个项目了,但仍有非常非常多的事情要做,包括功能开发、代码质量检察,安全性隐私性检察,应用性能检测等等等等一系列的事情。另外,Extension改动的基本全是桌面端的代码,因此还须要Edge美国团队和印度团队的成员来查抄我这边的改动。总之没有一件事情是不花时间的。
最后从上线的日期来看,这距离我接手这个项目已经过去了一年左右的时间,这一年时间里我就只做了这一件事。
不过如此困难的一个项目,功劳也并不都是我一个人的。有很多同事在期间到场到了这个项目当中,并给我提供了资助。
这里首先我要特别感谢我们组的一位同事,wadai。
wadai差不多到场了半个Extension项目的开发过程,资助我办理了很多高难度的技术问题,而且还在这个过程中发明出了GN Overlay这种对Edge开发具有重大意义的技术。
我记得在办理编译问题的后期,有大约3000+ undefined symbol的报错。基本就是我们俩一人分一半,逐个办理的。光处理这些问题就得花上至少两周以上的时间,枯燥又乏味,但我们就是这么趟过来的。
另外要感谢的就是jiayi,虽说jiayi没有到场这个项目的研发,但是他作为Manager的一些决策直接决定了这个项目的成败。 开发进入中期的时候,我发现Chromium在Extension的设计上并没有做到很好的独立性,其实它是依赖于很多模块的。而Edge桌面端又会在这些被依赖的模块里做很多本身的功能,最后把Extension带到Android上的同时,我也险些把半个Edge桌面端的功能都给带到了Android上。
这个事情对我其时打击很大,因为代码写成这个样子,PR文件改动数甚至达到了1000多个,就算Extension在Android上真的能跑起来了,我们也绝无大概上线。那个时候我甚至觉得这是一个注定要失败的项目,想要中途放弃了。
jiayi在这个时候做出了非常重要的决策。他让我先不要管代码写的合不合理,优先就是去实现一个能在Android上运行Extension的Demo,代码后期都可以再举行优化。哪怕是后期真的没有优化空间,这东西就是做不了,我们出过一个可运行的Demo,也比现在什么都没有的情况下结束项目强。
毕竟上也正如jiayi所说,我们在后期做了很洪流平的代码优化工作,最低时PR的文件改动数仅剩200多个。扫清了这些障碍,Extension项目才得以顺利上线。
我还要感谢Edge美国团队的Kevin。Kevin是Edge桌面端的架构师,在我们开发Android端Extension的时候给了我们巨大的资助。
Kevin特别喜好中国的文化,他还关注了我的公众号,因此这篇文章他很有大概会看到。
Hey Kevin, I would like to give you a big thanks for everything. The Android Extension is here because of your help.
当然,还有很多同事我是想要感谢的,但是感觉不能再写下去了,再写这篇文章就要成感谢大会了。
回到正题,接下来得好好跟大家介绍下Edge Android上的Extension功能到底怎样使用。
这个功能还在慢慢灰度中,因此没有被灰度到的朋侪现在大概还看不到。
这里我教大家一个快速体验的办法。首先确保你的浏览器是最新的Edge 122版本,假如还没安装Edge的话可以通过下面的二维码快速安装: