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

相关文章

滚雪球学Java(87):Java事务处理:JDBC的ACID属性与实战技巧!真有两下子!

咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE啦,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~ 🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!! 环境说明:Windows 10

Partical System

创建"粒子系统物体"(点击菜单GameObject -> Create Other -> Particle System) 添加"粒子系统组件"(点击Component -> Effects  ->Particle System) 粒子系统检视面板  点击粒子系统检视面板的右上角的"+"来增加新的模块。(Show All Modules:显示全部) 初始化模块: •

小技巧绕过Sina Visitor System(新浪访客系统)

0x00 前言 一直以来,爬虫与反爬虫技术都时刻进行着博弈,而新浪微博作为一个数据大户更是在反爬虫上不遗余力。常规手段如验证码、封IP等等相信很多人都见识过…… 当然确实有需要的话可以通过新浪开放平台提供的API进行数据采集,但是普通开发者的权限比较低,限制也比较多。所以如果只是做一些简单的功能还是爬虫比较方便~ 应该是今年的早些时候,新浪引入了一个Sina Visitor Syst

HTML5自定义属性对象Dataset

原文转自HTML5自定义属性对象Dataset简介 一、html5 自定义属性介绍 之前翻译的“你必须知道的28个HTML5特征、窍门和技术”一文中对于HTML5中自定义合法属性data-已经做过些介绍,就是在HTML5中我们可以使用data-前缀设置我们需要的自定义属性,来进行一些数据的存放,例如我们要在一个文字按钮上存放相对应的id: <a href="javascript:" d

Python中的属性装饰器:解锁更优雅的编程之道

引言 在Python的世界里,装饰器是一个强大的工具,它允许我们以一种非侵入性的方式修改函数或方法的行为。而当我们谈论“属性装饰器”时,则是在探讨如何使用装饰器来增强类中属性的功能。这不仅让我们的代码更加简洁、易读,同时也提供了强大的功能扩展能力。本文将带你深入了解属性装饰器的核心概念,并通过一系列实例展示其在不同场景下的应用,从基础到进阶,再到实际项目的实战经验分享,帮助你解锁Python编程

System.getProperties().

Java.version Java 运行时环境版本 java.vendor Java 运行时环境供应商 java.vendor.url Java 供应商的 URL java.home Java 安装目录 java.vm.specification.version Java 虚拟机规范版本 java.vm.specification.vendor

react笔记 8-17 属性绑定 class绑定 引入图片 循环遍历

1、绑定属性 constructor(){super()this.state={name:"张三",title:'我是一个title'}}render() {return (<div><div>aaaaaaa{this.state.name}<div title={this.state.title}>我是一个title</div></div></div>)} 绑定属性直接使用花括号{}   注

12C 新特性,MOVE DATAFILE 在线移动 包括system, 附带改名 NID ,cdb_data_files视图坏了

ALTER DATABASE MOVE DATAFILE  可以改名 可以move file,全部一个命令。 resue 可以重用,keep好像不生效!!! system照移动不误-------- SQL> select file_name, status, online_status from dba_data_files where tablespace_name='SYSTEM'

ConstraintLayout布局里的一个属性app:layout_constraintDimensionRatio

ConstraintLayout 这是一个约束布局,可以尽可能的减少布局的嵌套。有一个属性特别好用,可以用来动态限制宽或者高app:layout_constraintDimensionRatio 关于app:layout_constraintDimensionRatio参数 app:layout_constraintDimensionRatio=“h,1:1” 表示高度height是动态变化

Python中的私有属性与方法:解锁面向对象编程的秘密

在Python的广阔世界里,面向对象编程(OOP)是一种强大而灵活的方法论,它帮助我们更好地组织代码、管理状态,并构建可复用的软件组件。而在这个框架内,私有属性与方法则是实现封装的关键机制之一。它们不仅有助于隐藏类内部的具体实现细节,还能保护数据免受外部干扰。今天,让我们一起探索Python中私有属性与方法的魅力所在,了解它们如何在实际开发中发挥重要作用。 引言 随着软件系统变得越来越复杂,维