1.在谷歌云上高速编译安卓AOSP ROM、驱动、内核并完成刷机
2.Android VNDK/VSDK Snapshot编译框架
在谷歌云上高速编译安卓AOSP ROM、驱动、内核并完成刷机
感谢肉丝大佬文章 anquanke.com/post/id/... 乌师傅 谷歌云和驱动的建议 众多翻阅过的博客文章
选择服务器时,可能遇到配额不够的fs文件源码问题。点击申请配额,然后提交申请,等待配置完成。
同步源码时,可以选清华或谷歌源。若操作于谷歌云,则使用谷歌同步源码。指定版本同步时,量柱红源码注意输入y并选择正确的版本。Pixel对应Android 的tag是android-.0.0_r2,build id为QP1A..。确保版本无误,避免后续刷机失败。
htop显示多个cpu运转,cpu使用率为0表示同步完成。
下载驱动,忽略此步骤若无需刷机。Pixel机型对应QP1A..的驱动下载并解压,生成vendor文件夹,内容需复制至AOSP源代码目录。
编译AOSP源码需安装OpenJDK 8,易语言描写源码避免使用非SUN JDK1.8导致的编译错误。遇到问题时,执行特定命令初始化编译环境。等待编译,个cpu的谷歌云环境下,编译时间只需几分钟。
编译完成后,系统镜像位于当前目录的out/target/product/sailfish/下。
编译内核,当前版本为3.,分支为gdce。选择内核版本,切到对应分支,建站系统下载源码开始编译。编译完成后,文件位于指定位置。
刷机编译过程需耐心,重要的是编译速度。谷歌云提供+的cpu,加快编译。源码编译问题多由环境依赖引起,耐心解决。
总结,刷机编译耗时两天,遇到诸多坑点。关键在于编译速度。叫车微信源码谷歌云的高cpu配置有助于加速编译过程。环境依赖问题需细心排查,耐心解决。
Android VNDK/VSDK Snapshot编译框架
为了解决Android版本碎片化问题,引入了Treble架构。此架构提供了稳定的新SoC供应商接口,并引入了HAL接口定义语言(HIDL/Stable AIDL),用于指定vendor HAL 和system框架的接口,实现了system框架与Vendor HAL的解耦,使Vendor Freeze成为可能。然而,经过调查发现,AOSP源码的vendor组件有%~%的仓库与system组件耦合,这对架构的灵活性和稳定性产生了影响。Google进一步对Treble架构进行演进,引入了VNDK和VSDK的snapshot方案,旨在增强system/vendor组件之间的interface化能力。system组件通过预编译形成vendor Snapshot,可以提供给不同Android版本的vendor组件使用,这也是Treble方案落地的一个重要环节和基础支撑。
VNDK提供了对Native库进行划分的概念,以达到管控system/vendor组件之间模块耦合度的目的。主要包括core library、vendor-only(proprietary) library、vendor_available library、vndk library和vndk-sp library。这些类别的划分定义了不同类型的相互耦合程度和使用约束,使得system和vendor组件的功能更加独立。
VSDK则是在VNDK的基础上进一步扩展,包含了Vendor Snapshot。Vendor Snapshot包括系统源码维护的用于Vendor编译或集成的Native模块集合。这些模块主要由系统库、vendor可用库和vndk模块构成,其中vndk模块的使能与vendor模块的直接使用密切相关。
Snapshot设计旨在解决system和vendor不同时间、不同版本编译搭配的问题。通过预构建系统侧的库,用于vendor侧的编译,减少对system侧源码的依赖。这可以通过两种方法实现:一种是将system仓库直接包含在vendor的manifest文件中,使用旧版本的代码;另一种是使用Google的Snapshot设计,由system侧预构建生成vendor所需的内容,用于vendor侧编译。两种方法各有优缺点,前者简单直接,但可能导致vendor代码量增加和编译时间延长;后者代码量更精简,编译时间短,但需要额外的预构建系统支持。
Snapshot生成流程可以分为三个阶段:Generate Phrase、Install Phrase和Use Phrase。Generate Phrase阶段通过一定的规则从系统侧源代码中产生出vendor image编译依赖的预置编译模块产物。Install Phrase阶段通过py脚本将生成的prebuilt模块安装到指定源码目录,并生成对应Android.bp文件。Use Phrase阶段通过设置BOARD_VNDK_VERSION变量为具体版本号,触发编译系统使用预先生成的Snapshot参与编译。
VNDK Snapshot生成流程中,生成逻辑在soong/cc/vndk.go中通过定义VndkSnapshotSingleton实现,最终生成的bp文件包含了vndk_prebuilt_shared模块的配置信息,用于vendor侧的编译。VSDK Snapshot的生成逻辑与VNDK类似,主要通过vendor_snapshot.go的GenerateBuildActions方法实现,同样通过设置BOARD_VNDK_VERSION变量进行编译。
总的来说,VNDK/VSDK Snapshot的引入和设计旨在减少system和vendor组件之间的源码依赖,减少编译依赖,更容易形成Treble基线。这为构建更稳定、更高效的Android生态系统提供了有力支持。