Android11(R) system_ext 分区 system_ext_specific 属性

2024-08-22 06:18

本文主要是介绍Android11(R) system_ext 分区 system_ext_specific 属性,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

android11 开搞

朋友们,最近拿到 androidR 的代码了,让我们来康康有哪些变动,一上来就给我整懵了,编译了 SystemUI 后发现

居然跑到 system\system_ext\priv-app 文件下了,这是什么鬼,又新加分区?之前 Q 版本已经新增了 product 分区,

并且 SystemUI、Launcher3、Settings这些核心应用都存放在此处,现在 R 版本又跑到这个 system_ext 分区下了

关于动态分区之前介绍过 Android10 动态分区介绍

r8XDMR.png

一探究竟

决定编译后 apk 的位置当然是在 Android.mk 或者 Android.bp 中啦,那我们去康康到底配置了啥子属性?

vendor\mediatek\proprietary\packages\apps\SystemUI\Android.bp

system_ext_specific: true,

privileged: true,

vendor\mediatek\proprietary\packages\apps\MtkSettings\Android.bp

system_ext_specific: true,

privileged: true,

packages\apps\Launcher3\Android.mk

LOCAL_PRIVILEGED_MODULE := true

LOCAL_SYSTEM_EXT_MODULE := true

vendor\mediatek\proprietary\packages\apps\Browser\Android.mk

LOCAL_SYSTEM_EXT_MODULE := true

看完上面这些配置可以知道了,

bp 中配置 system_ext_specific: true,就将编译到 system\system_ext\ 中,

privileged: true 决定在 priv-app 文件中,不加 privileged 则编译到 system\system_ext\app\

mk 中配置 LOCAL_SYSTEM_EXT_MODULE := true,就将编译到 system\system_ext\ 中,

LOCAL_PRIVILEGED_MODULE := true 决定在 priv-app 文件中,不加 LOCAL_PRIVILEGED_MODULE 则编译到 system\system_ext\app\

system_ext_specific 和 LOCAL_SYSTEM_EXT_MODULE 的对照关系经过搜索位于

build\soong\androidmk\androidmk\android.go

addStandardProperties(bpparser.BoolType,map[string]string{// Bool properties"LOCAL_IS_HOST_MODULE":             "host","LOCAL_CLANG":                      "clang","LOCAL_FORCE_STATIC_EXECUTABLE":    "static_executable","LOCAL_NATIVE_COVERAGE":            "native_coverage","LOCAL_NO_CRT":                     "nocrt","LOCAL_ALLOW_UNDEFINED_SYMBOLS":    "allow_undefined_symbols","LOCAL_RTTI_FLAG":                  "rtti","LOCAL_PACK_MODULE_RELOCATIONS":    "pack_relocations","LOCAL_TIDY":                       "tidy","LOCAL_USE_CLANG_LLD":              "use_clang_lld","LOCAL_PROPRIETARY_MODULE":         "proprietary","LOCAL_VENDOR_MODULE":              "vendor","LOCAL_ODM_MODULE":                 "device_specific","LOCAL_PRODUCT_MODULE":             "product_specific","LOCAL_SYSTEM_EXT_MODULE":          "system_ext_specific","LOCAL_EXPORT_PACKAGE_RESOURCES":   "export_package_resources","LOCAL_PRIVILEGED_MODULE":          "privileged","LOCAL_AAPT_INCLUDE_ALL_RESOURCES": "aapt_include_all_resources","LOCAL_DONT_MERGE_MANIFESTS":       "dont_merge_manifests","LOCAL_USE_EMBEDDED_NATIVE_LIBS":   "use_embedded_native_libs","LOCAL_USE_EMBEDDED_DEX":           "use_embedded_dex","LOCAL_DEX_PREOPT":                  "dex_preopt.enabled","LOCAL_DEX_PREOPT_APP_IMAGE":        "dex_preopt.app_image","LOCAL_DEX_PREOPT_GENERATE_PROFILE": "dex_preopt.profile_guided","LOCAL_PRIVATE_PLATFORM_APIS": "platform_apis","LOCAL_JETIFIER_ENABLED":      "jetifier",})
}

那么 LOCAL_SYSTEM_EXT_MODULE 这个又是在那里使用的呢?继续在 build 中查找

build\make\core\base_rules.mk

else ifneq ($(filter $(TARGET_OUT_SYSTEM_EXT)/%,$(_path)),)
LOCAL_SYSTEM_EXT_MODULE := true
endif
_path :=else ifeq (true,$(strip $(LOCAL_SYSTEM_EXT_MODULE)))partition_tag := _SYSTEM_EXT# A system_ext-specific module could be on the system_ext partition at# "system_ext" or the system partition at "system/system_ext".actual_partition_tag := $(if $(filter true,$(BOARD_USES_SYSTEM_EXTIMAGE)),system_ext,system)

紧接着查找 TARGET_OUT_SYSTEM_EXT 到

build\make\core\envsetup.mk

TARGET_OUT_SYSTEM_EXT := ( P R O D U C T O U T ) / (PRODUCT_OUT)/ (PRODUCTOUT)/(TARGET_COPY_OUT_SYSTEM_EXT)

TARGET_COPY_OUT_SYSTEM_EXT := $(_system_ext_path_placeholder)

_system_ext_path_placeholder := ||SYSTEM_EXT-PATH-PH||

再接着找 SYSTEM_EXT

build\make\tools\releasetools\check_target_files_vintf.py

# each partition.
DIR_SEARCH_PATHS = {'/system': ('SYSTEM',),'/vendor': ('VENDOR', 'SYSTEM/vendor'),'/product': ('PRODUCT', 'SYSTEM/product'),'/odm': ('ODM', 'VENDOR/odm', 'SYSTEM/vendor/odm'),'/system_ext': ('SYSTEM_EXT', 'SYSTEM/system_ext'),
}

build\make\target\board\BoardConfigEmuCommon.mk

  ifeq ($(QEMU_USE_SYSTEM_EXT_PARTITIONS),true)BOARD_EMULATOR_DYNAMIC_PARTITIONS_PARTITION_LIST := \system \system_ext \product \vendorTARGET_COPY_OUT_PRODUCT := productBOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPE := ext4TARGET_COPY_OUT_SYSTEM_EXT := system_extBOARD_SYSTEM_EXTIMAGE_FILE_SYSTEM_TYPE := ext4elseTARGET_COPY_OUT_PRODUCT := system/productTARGET_COPY_OUT_SYSTEM_EXT := system/system_extBOARD_EMULATOR_DYNAMIC_PARTITIONS_PARTITION_LIST := \system \vendorendif

build\make\core\board_config.mk

# Now we can substitute with the real value of TARGET_COPY_OUT_SYSTEM_EXT
ifeq ($(TARGET_COPY_OUT_SYSTEM_EXT),$(_system_ext_path_placeholder))
TARGET_COPY_OUT_SYSTEM_EXT := system/system_ext
else ifeq ($(filter system_ext system/system_ext,$(TARGET_COPY_OUT_SYSTEM_EXT)),)
$(error TARGET_COPY_OUT_SYSTEM_EXT must be either 'system_ext' or 'system/system_ext', seeing '$(TARGET_COPY_OUT_SYSTEM_EXT)'.)
endif
PRODUCT_COPY_FILES := $(subst $(_system_ext_path_placeholder),$(TARGET_COPY_OUT_SYSTEM_EXT),$(PRODUCT_COPY_FILES))

行了,就先整这么多吧,到这里已经很清楚了。

这篇关于Android11(R) system_ext 分区 system_ext_specific 属性的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1095474

相关文章

MySQL大表数据的分区与分库分表的实现

《MySQL大表数据的分区与分库分表的实现》数据库的分区和分库分表是两种常用的技术方案,本文主要介绍了MySQL大表数据的分区与分库分表的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录1. mysql大表数据的分区1.1 什么是分区?1.2 分区的类型1.3 分区的优点1.4 分

浅析CSS 中z - index属性的作用及在什么情况下会失效

《浅析CSS中z-index属性的作用及在什么情况下会失效》z-index属性用于控制元素的堆叠顺序,值越大,元素越显示在上层,它需要元素具有定位属性(如relative、absolute、fi... 目录1. z-index 属性的作用2. z-index 失效的情况2.1 元素没有定位属性2.2 元素处

HTML5 data-*自定义数据属性的示例代码

《HTML5data-*自定义数据属性的示例代码》HTML5的自定义数据属性(data-*)提供了一种标准化的方法在HTML元素上存储额外信息,可以通过JavaScript访问、修改和在CSS中使用... 目录引言基本概念使用自定义数据属性1. 在 html 中定义2. 通过 JavaScript 访问3.

CSS模拟 html 的 title 属性(鼠标悬浮显示提示文字效果)

《CSS模拟html的title属性(鼠标悬浮显示提示文字效果)》:本文主要介绍了如何使用CSS模拟HTML的title属性,通过鼠标悬浮显示提示文字效果,通过设置`.tipBox`和`.tipBox.tipContent`的样式,实现了提示内容的隐藏和显示,详细内容请阅读本文,希望能对你有所帮助... 效

解读为什么@Autowired在属性上被警告,在setter方法上不被警告问题

《解读为什么@Autowired在属性上被警告,在setter方法上不被警告问题》在Spring开发中,@Autowired注解常用于实现依赖注入,它可以应用于类的属性、构造器或setter方法上,然... 目录1. 为什么 @Autowired 在属性上被警告?1.1 隐式依赖注入1.2 IDE 的警告:

HTML5中下拉框<select>标签的属性和样式详解

《HTML5中下拉框<select>标签的属性和样式详解》在HTML5中,下拉框(select标签)作为表单的重要组成部分,为用户提供了一个从预定义选项中选择值的方式,本文将深入探讨select标签的... 在html5中,下拉框(<select>标签)作为表单的重要组成部分,为用户提供了一个从预定义选项中

在Java中使用ModelMapper简化Shapefile属性转JavaBean实战过程

《在Java中使用ModelMapper简化Shapefile属性转JavaBean实战过程》本文介绍了在Java中使用ModelMapper库简化Shapefile属性转JavaBean的过程,对比... 目录前言一、原始的处理办法1、使用Set方法来转换2、使用构造方法转换二、基于ModelMapper

Oracle数据库如何切换登录用户(system和sys)

《Oracle数据库如何切换登录用户(system和sys)》文章介绍了如何使用SQL*Plus工具登录Oracle数据库的system用户,包括打开登录入口、输入用户名和口令、以及切换到sys用户的... 目录打开登录入口登录system用户总结打开登录入口win+R打开运行对话框,输php入:sqlp

JavaScript中的isTrusted属性及其应用场景详解

《JavaScript中的isTrusted属性及其应用场景详解》在现代Web开发中,JavaScript是构建交互式应用的核心语言,随着前端技术的不断发展,开发者需要处理越来越多的复杂场景,例如事件... 目录引言一、问题背景二、isTrusted 属性的来源与作用1. isTrusted 的定义2. 为

mysql数据库分区的使用

《mysql数据库分区的使用》MySQL分区技术通过将大表分割成多个较小片段,提高查询性能、管理效率和数据存储效率,本文就来介绍一下mysql数据库分区的使用,感兴趣的可以了解一下... 目录【一】分区的基本概念【1】物理存储与逻辑分割【2】查询性能提升【3】数据管理与维护【4】扩展性与并行处理【二】分区的