Android 10 构建系统实战问题解决

本文记录一下最近项目中遇到的 Android 10 构建系统问题及解决方法。

首先说一下背景,之前的项目都是基于 Android 5.1 (是的,你没看错,相当古老的版本) 打造,近期打算将系统升级到 Android 10。我的工作主要是进行浏览器内核的迁移。

Android 系统的浏览器引擎早期是 WebKit,后来谷歌团队和 WebKit 团队 (主要是苹果公司的员工) 由于开发理念的不同,分道扬镳,独立在 WebKit 源码的基础上 fork 出一个新的分支 blink,经过一番魔改,现在 blink 的源码和苹果公司维护的 WebKit 已经相处甚远。谷歌公司的浏览器产品叫做 Chromium (商业版本为 Chrome),由于 Chromium 和 blink 紧密的关系,我们一般也称浏览器内核为 Chromium。Android 框架中有个 WebView 组件,从 Android 4.4 开始就切换到 Chromium WebView。

然而,从 Android 6.0 系统开始,Android 源码中不再包含 chromium 的源码,而是以预置的 apk 的形式提供。这之前的 Android 5.1,Chromium WebView 也可以从 Chromium 源码中独立编译,不再依赖于 Android 构建系统。我们的项目采取了一种混合的方式,Chromium 源码没有采用 Android 5.1 附带的源码,但代码依然加入到 Android 5.1 的代码树,和系统一起编译。虽然编译过程中使用的 Chromium 的构建系统 GN,但编译过程中会链接到 Android 系统特有的 so。这也好理解,毕竟我们是基于 Android 深度定制,加入了一些自己特有的东西。

让问题变得棘手的是,Android 从 7.0 版本开始,切换到一套新的构建系统 Soong。但估计迁移过程没有那么顺利,直到 Android 10 版本,还是 Soong 和 Make 两套系统混用。所以现在Android源码中有的模块是用 Android.bp(Soong),有的模块使用老式 Android.mk 。无语的是,这并非终点,Soong 只是一个临时的方案,Google 最终计划迁移到 Bazel 构建系统(Android 应用开发者应该眼熟)。

既然 Android 10 构建系统支持老式的 Android.mk,我窃喜,不用做什么修改就可以用了。可问题没那么简单,原因在于 Google 又引入了 Ninja 构建系统。是不是头大,前面不是说构建系统是 Soong 和 Make 混用吗,怎么又牵涉到 Ninja?

Soong 和 Ninja 关系有点类似于 cmake 和 make。cmake 实际上是从 CMakeLists.txt 先生成 Makefile,再使用 make 进行真正的构建。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云水木石

但行好事,莫问前程

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值