Android 编译 product 分区
https://source.android.google.cn/devices/bootloader/product-partitions
编译 product 分区
Android 9 支持使用 Android 编译系统构建 /product
分区。之前,Android 8.x 强制将系统芯片 (SoC) 专属组件从 /system
分区分隔到了 /vendor
分区,不会为从 Android 编译系统构建的原始设备制造商 (OEM) 专属组件提供专用空间。
product 分区简介
许多原始设备制造商 (OEM) 会自定义 AOSP 系统映像,以实施自己的功能并满足运营商的要求。不过,如果进行这类自定义,则无法针对多个软件 SKU 使用单个系统映像,因为映像必须各不相同,才能支持不同的语言区域、运营商等;如果使用单独的 /product
分区来包含自定义项,则可以无法针对多个软件 SKU 使用单个系统映像(/system
分区会托管可在众多软件 SKU 之间共享的通用代码)。/vendor
分区会继续托管 SoC 专用板级 (BSP) 代码,这类代码可以基于指定 SoC 在多台设备之间共享。
使用单独的分区存在一些弊端,例如,难以管理磁盘空间(应该预留一定的空间满足未来增长的空间需求),以及难以在各分区之间维护稳定的应用二进制接口 (ABI)。在决定使用 /product
分区之前,请花些时间考虑一下您的 AOSP 实现的具体情况和可行的缓解策略(例如,在无线下载 (OTA) 更新期间对设备进行重新分区;此操作不是由 Google 来完成,而是由某些 OEM 来完成)。
旧式 /oem 与 /product
新 /product
分区与旧式 /oem
分区不同:
分区 | 属性 |
---|---|
/oem |
|
/product |
|
出于这些原因,Android 9 支持新的 /product
分区,同时也针对依赖于旧式 /oem
分区的设备保留了对该分区的支持。
/product 组件
/product
分区包含以下组件:
- 产品专用的系统属性 (
/product/build.prop
) - 产品专用的 RRO (
/product/overlay/*.apk
) - 产品专用的应用 (
/product/app/*.apk
) - 产品专用的特权应用 (
/product/priv-app/*.apk
) - 产品专用的内容库 (
/product/lib/*
) - 产品专用的 Java 库 (
/product/framework/*.jar
) - 产品专用的 Android 框架系统配置(
/product/etc/sysconfig/*
和/product/etc/permissions/*
) - 产品专用的媒体文件 (
/product/media/audio/*
) - 产品专用的
bootanimation
文件
不得使用 custom_images
您不能使用 custom_images
,因为它们缺乏对以下各项的支持:
- 将模块安装到特定目标分区中。
custom_images
支持将软件工件复制到映像中,但无法将模块安装到特定分区中(通过将其目标分区指定为编译规则的一部分)。 - Soong 支持。无法使用 Soong 编译系统编译
custom_images
。 - OTA 更新支持。
custom_images
用作出厂 ROM 映像,无法执行 OTA 更新。
维护分区之间的 ABI
Android 9 中的 /product
分区是 /system
分区的扩展。由于 /product
和 /system
分区之间的 ABI 稳定性较弱,因此必须同时升级这两者,而且 ABI 应基于系统 SDK。如果系统 SDK 不涵盖 /product
和 /system
之间的所有 API 表面,则 OEM 负责在这两个分区之间维护自己的 ABI。
/product
分区和 /system
分区可以相互依赖。不过,在没有 /product
分区的情况下,对通用系统映像 (GSI) 的测试必须能够正常运行。
/product
分区不能对 /vendor
分区有任何依赖,而且 /product
分区和 /vendor
分区之间不允许有任何直接交互(由 SEpolicy 强制执行)。
实现 product 分区
在实现新 product 分区之前,请先了解 AOSP 中的相关 product 分区变化。接下来,为了设置 /product
,请添加以下开发板编译标记或 product 编译标记:
BOARD_USES_PRODUCTIMAGE
BOARD_PRODUCTIMAGE_PARTITION_SIZE
BOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPE
PRODUCT_PRODUCT_PROPERTIES for /product/build.prop
,应该在$(call inherit-product path/to/device.mk)
内,例如PRODUCT_PRODUCT_PROPERTIES += product.abc=ok
。
向 product 分区中安装模块
使用以下编译标记向 product
分区中安装模块。
Android.bp
中的product_specific: true
Android.mk
中的LOCAL_PRODUCT_MODULE := true
启用启动时验证
为防止 /product
分区被恶意软件篡改,您应该为该分区启用 Android 启动时验证 (AVB)(就像为 /vendor
和 /system
分区启用一样)。要启用 AVB,请添加以下编译标记:BOARD_AVB_PRODUCT_ADD_HASHTREE_FOOTER_ARGS
Android 编译 product 分区的更多相关文章
- Android编译环境折腾记
题记:感觉是时候写点什么了=_=! 第一次安装了ubuntu14.04.5,官网下载的iso,官网下的jar,编译android4.x需要安装jdk6,更高的版本会有问题,baidu到很多搭建环境的步 ...
- [Android 编译(一)] Ubuntu 16.04 LTS 成功编译 Android 6.0 源码教程
本文转载自:[Android 编译(一)] Ubuntu 16.04 LTS 成功编译 Android 6.0 源码教程 1 前言 经过3天奋战,终于在Ubuntu 16.04上把Android 6. ...
- Android编译过程详解(一)
Android编译过程详解(一) 注:本文转载自Android编译过程详解(一):http://www.cnblogs.com/mr-raptor/archive/2012/06/07/2540359 ...
- Android编译过程详解(三)
前面两节讲解了自定义Android编译项和创建Product产品配置文件,除了编译和定义产品相关环境变量外,还需要定义Board相关环境变量. 1. build/core/config.mk 109 ...
- Android编译环境(1) - 编译Native C的模块
Android编译环境本身比较复杂,且不像普通的编译环境:只有顶层目录下才有Makefile文件,而其他的每个component都使用统一标准的Android.mk. Android.mk文件本身是比 ...
- Android——编译release版签名系统
http://blog.csdn.net/jscese/article/details/24243171 在我的第一篇博客里面http://blog.csdn.net/jscese/article/d ...
- Android编译系统环境初始化过程分析
Android源代码在编译之前,要先对编译环境进行初始化,其中最主要就是指定编译的类型和目标设备的型号.Android的编译类型主要有eng.userdebug和user三种,而支持的目标设备型号则是 ...
- android 编译模块
android 编译模块 在写完.c文件之后,需要加载到android上进行测试.使用arm-linux-gcc编译,并添加到android开发板上运行失败. 由于android与linux不同,需要 ...
- Android编译命令
目录 说在前面 编译流程 编译指令 代码编译 代码检索 其他指令 说在前面 从最开始接触Android系统开始,每次进行代码编译都需要网上搜索编译指令.后来大致熟悉了Android的编译体系,加深了对 ...
随机推荐
- 解决iOS微信H5支付跳转微信后不返回App问题(Swift-WKWebview)(转)
问题分析 正常的H5支付流程如下 按照上面的支付流程会出现 App -> 微信 -> 支付 -> 点击 完成 -> safari访问redirect_url设置的URL,这种流 ...
- Four subspaces - Prof. Strang
相应地,用映射的观点考察映射σ的kernal space与image space,得到的就是下面这张图啦 Ref: Introduction to Linear Algebra 5th Edition ...
- PHP-FPM的知识点
https://blog.csdn.net/resilient/article/details/82420863 这个URL,将php的各种模式与知识点说清楚了. 因为php-fpm默认编译进了php ...
- kafka没配置好,导致服务器重启之后,topic丢失,topic里面的消息也丢失
转,原文:https://blog.csdn.net/zfszhangyuan/article/details/53389916 ----------------------------------- ...
- jenkins生成的HTML报告中expand与collapse问题
1.打开jenkins中脚本命令执行页面 2.在脚本命令页面的,输入框中粘贴 System.setProperty("hudson.model.DirectoryBrowserSupport ...
- git添加doc文件维护
原文地址:https://www.cnblogs.com/yezuhui/p/6853271.html 说明: git 一般只能对纯文本文件进行版本控制,但是如果有其他中间转化软件的协助,就可以对任意 ...
- wordpress调用自定义菜单
wordpress要调用自定义菜单首先要注册菜单,将代码添加到主题文件夹下的function.php中,比如wordpress自带主题2019的定义如下 // This theme uses wp_n ...
- 深入理解JVM内存分配和常量池
一.虚拟机的构成 虚拟结主要由运行时数据区.执行引擎.类加载器三者构成: 而我们所说的JVM内存模型指的就是运行时数据区,下面具体分析一下运行时数据区: 二.运行时数据区组成和各个区域的作用 我们看到 ...
- linux ssh tunnel
ssh -qTfnN -D 7070 ape@192.168.1.35
- lambda表达式格式以及应用场景?
lambda表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数. add = lambda x, y : x+y print(add(1,2)) # 结果为3 应 ...