Android 分区

本文详细介绍了Android系统中/system_ext、vendor、product和odm等分区的作用与特性,并阐述了私有存储与共享存储的区别。此外,还讲解了Android Q对外部存储的新策略以及新增的MANAGE_EXTERNAL_STORAGE权限。

/system_ext 分区作为可选分区。(该分区是放置 /system 分区中与 AOSP 定义的组件紧密耦合的非 AOSP 组件的位置。)/system_ext 分区被视为是 /system 分区特用于 OEM 的扩展,且未在两个分区间定义接口

  • vendor:包含所有不可分发给 Android 开源项目 (AOSP) 的二进制文件。如果没有专有信息,可以不要该分区。
  • product:用于存放产品专用的配置和应用,以便OEM定制自己的系统。Android 9 及更高版本支持该分区。product分区是对system分区的扩展,必须同时升级这两个分区。
  • odm:用于ODM自定义自己的板级支持包。Android 10 开始支持该分区。odm分区是对vendor分区的扩展,必须同时升级这两个分区。

Android 中存储可以分为两大类:私有存储和共享存储

  • 私有存储 (Private Storage) : 每个应用在都拥有自己的私有目录,其它应用看不到,彼此也无法访问到该目录:内部存储私有目录 (/data/data/packageName) ;外部存储私有目录 (/sdcard/Android/data/packageName),
  • 共享存储 (Shared Storage) : 存储其他应用可访问文件, 包含媒体文件、文档文件以及其他文件,对应设备DCIM、Pictures、Alarms、Music、Notifications、Podcasts、Ringtones、Movies、Download等目录。

在Android Q上,是不希望应用继续访问非沙盒路径的,沙盒路径一般为外置存储下的/storage/emulated/${userid}/Android/${dir}/${package}/, 这里通过包名来划分路径,应用可以不需要权限直接访问沙盒路径下的数据。非沙盒路径为外置存储下的其他路径,不允许访问。

新增权限

MANAGE_EXTERNAL_STORAGE : 类似以前的 READ_EXTERNAL_STORAGE + WRITE_EXTERNAL_STORAGE ,除了应用专有目录都可以访问。

应用可通过执行以下操作向用户请求名为所有文件访问权限的特殊应用访问权限:

  1. 在清单中声明 MANAGE_EXTERNAL_STORAGE 权限。
  2. 使用 ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION intent 操作将用户引导至一个系统设置页面,在该页面上,用户可以为您的应用启用以下选项:授予所有文件的管理权限。
  • 在 Google Play 上架的话,需要提交使用此权限的说明,只有指定的几种类型的 APP 才能使用。

Privileged apps are system apps that are located in a priv-app directory on one of the system image partitions. The partitions used for Android releases are

  • Android 8.1 and lower - /system
  • Android 9 and higher - /system, /product, /vendor

从 Android 8.0 开始,制造商必须在 /etc/permissions 目录下的系统配置 XML 文件中明确授予特许权限。从 Android 9 开始,实现人员必须明确授予或拒绝授予所有特许权限,否则设备将无法启动.

### RK Android 分区配置方案 RK Android分区配置涉及多个方面,主要包括硬件平台特性、操作系统需求以及 OTA 升级的支持情况。以下是关于 RK 平台 Android 分区配置的具体内容: #### 1. 主要分区及其作用 Android 设备通常会划分若干个逻辑分区来满足不同功能的需求。这些分区包括但不限于以下几种: - **boot**: 存储引导加载程序 (Kernel 和 Ramdisk),用于启动系统[^1]。 - **system**: 存储只读的系统文件,包含 Android 操作系统的全部核心组件。 - **vendor**: 如果存在独立的 vendor 镜像,则该分区专门存储与芯片厂商相关的驱动和库文件。 - **userdata/data**: 用户数据的主要存储区域,允许用户自由写入个人资料或应用程序数据。 - **cache**: 缓存临时文件的空间,主要用于加速应用启动或其他操作。 - **recovery**: 提供恢复模式下的特殊环境,便于修复系统或者执行固件升级。 #### 2. Rockchip 平台特有的分区命名规则 Rockchip 芯片系列(如 RK3399)在设计时遵循了一套标准化的分区命名约定。例如,在 `rk3399-disvr-android.dts` 文件中定义了具体的设备树节点,描述了各个分区的位置、大小以及其他属性[^3]。这种 DTS 文件通过指定内存布局帮助 U-Boot 加载器识别并初始化相应的分区结构。 #### 3. BOARD_SYSTEMIMAGE_PARTITION_SIZE 参数的意义 为了适配不同的硬件资源条件,开发者可以通过调整 `BOARD_SYSTEMIMAGE_PARTITION_SIZE` 变量来控制 system 分区的实际容量。此参数直接影响到最终生成的镜像能否成功烧录至目标设备,并且还关系到后续软件更新过程中是否有足够的剩余空间可用[^2]。 #### 4. AB 分区 OTA 功能支持 自 Android 7.0 开始引入 A/B 更新机制以来,越来越多的新款 SoC 已经内置对该特性的原生兼容能力。如果希望基于 RK 系列处理器打造具备无缝切换体验的产品线,则需额外关注以下几个要点: - 修改 build.prop 或其他相关脚本以启用双槽位管理选项; - 定义新的磁盘映射表以便区分 slot-A/slot-B 对应的不同物理地址范围; - 在 settings 应用层面上新增 UI 控制入口让用户能够手动触发增量包下载流程[^4]。 ```java // MyDeviceInfoFragment.java 示例片段展示如何动态获取当前激活状态信息 @Override public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { addPreferencesFromResource(R.xml.my_device_info); Preference otaStatusPref = findPreference("ota_status"); if (isSlotAActive()) { // 假设我们有一个方法判断哪个slot正在工作 otaStatusPref.setSummary("Current active slot is A."); } else { otaStatusPref.setSummary("Current active slot is B."); } } ``` 以上代码展示了如何扩展 Settings App 来反映最新的 OTA 进度详情给终端使用者查看。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值