Android Q lunch device刷R system.img后,发现其多了个system_ext分区。
列表如下:
TPro:/ # ls -l
total 65
dr-xr-xr-x 37 root root 0 2020-04-26 10:45 acct
drwxr-xr-x 48 root root 960 2020-04-26 10:45 apex
lrw-r--r-- 1 root root 11 2020-04-18 12:30 bin -> /system/bin
lrw-r--r-- 1 root root 50 2020-04-18 12:30 bugreports -> /data/user_de/0/com.android.shell/files/bugreports
drwxrwx--- 6 system cache 4096 2019-01-01 00:00 cache
drwxr-xr-x 4 root root 0 1970-01-01 00:00 config
lrw-r--r-- 1 root root 17 2020-04-18 12:30 d -> /sys/kernel/debug
drwxrwx--x 47 system system 4096 2020-04-26 10:46 data
drwx------ 5 root system 100 2020-04-26 10:45 data_mirror
drwxr-xr-x 2 root root 4096 2020-04-18 10:42 debug_ramdisk
lrw------- 1 root root 23 2020-04-18 12:30 default.prop -> system/etc/prop.default
drwxr-xr-x 25 root root 4820 2020-04-26 10:45 dev
lrw-r--r-- 1 root root 15 2020-04-18 12:30 dsp -> /vendor/lib/dsp
lrw-r--r-- 1 root root 11 2020-04-18 12:30 etc -> /system/etc
lrw-r--r-- 1 root root 20 2020-04-18 12:30 firmware -> /vendor/firmware_mnt
lrwxr-x--- 1 root shell 16 2020-04-18 12:30 init -> /system/bin/init
-rwxr-x--- 1 root shell 2362 2020-04-18 10:42 init.environ.rc
drwxr-xr-x 9 root root 200 2020-04-26 10:45 linkerconfig
drwx------ 2 root root 16384 2020-04-18 12:30 lost+found
drwxr-xr-x 9 root root 4096 2019-12-31 20:13 metadata
drwxr-xr-x 17 root system 360 2020-04-26 10:45 mnt
drwxr-xr-x 1 root root 3488 2020-04-26 10:37 odm
drwxr-xr-x 9 root root 4096 2020-04-17 16:48 oem
lrw-r--r-- 1 root root 19 2020-04-18 12:30 persist -> /mnt/vendor/persist
dr-xr-xr-x 578 root root 0 1970-01-01 00:00 proc
lrw-r--r-- 1 root root 15 2020-04-18 12:30 product -> /system/product
drwxr-xr-x 3 root root 4096 2020-04-18 10:42 res
lrw-r--r-- 1 root root 21 2020-04-18 12:30 sdcard -> /storage/self/primary
drwx--x--- 4 shell everybody 80 2020-04-26 10:45 storage
dr-xr-xr-x 15 root root 0 2020-04-26 10:45 sys
drwxr-xr-x 1 root root 3488 2020-04-26 10:37 system
lrw-r--r-- 1 root root 18 2020-04-18 12:30 system_ext -> /system/system_ext
drwxr-xr-x 1 root root 3488 2020-04-26 10:37 vendor
TPro:/ #
其中Settings.apk和SystemUi.apk就存在在该区域。
TPro:/data/system # cat packages.xml | grep -i com.android.settings
TPro:/data/system #
/system/system_ext/priv-app/Settings/Settins.apk
为此,Settings模块android.bp还特意指定了模块安装分区, 利用标签:system_ext_specific:
platform_compat_config {
name: "settings-platform-compat-config",
src: ":Settings-core",
system_ext_specific: true,
}
android_app {
name: "Settings",
platform_apis: true,
certificate: "platform",
system_ext_specific: true,
privileged: true,
required: [
"privapp_whitelist_com.android.settings",
"settings-platform-compat-config",
],
static_libs: ["Settings-core"],
resource_dirs: [],
optimize: {
proguard_flags_files: ["proguard.flags"],
},
}
说其是分区吧,AOSP代码编译出来的结果似乎不像product分区和odm分区那样有有个product.img和odm.img, 并没看到system_ext.img.
我们从官网AOSP官网动态分区相关表述来看,这就是个分区。
在这篇文章里,没有过多的针对性表述,怎么一个机制,怎么用?
大胆猜测了下,这就是Android R才引入的动态分区定制概念,和odm分区类似用法,为了应对单个项目满足不同多样的需求而进一步完善的动态定制型框架。
最后贴一个system_ext放置的内容树.
system/system_ext/
├── apex
│ ├── com.android.adbd
│ │ ├── apex_manifest.pb
│ │ ├── apex_pubkey
│ │ ├── bin
│ │ ├── etc
│ │ ├── lib
│ │ └── lib64
│ ├── com.android.art.debug
│ │ ├── apex_manifest.pb
│ │ ├── apex_pubkey
│ │ ├── bin
│ │ ├── etc
│ │ ├── javalib
│ │ ├── lib
│ │ └── lib64
│ ├── com.android.cellbroadcast
│ │ ├── apex_manifest.pb
│ │ ├── apex_pubkey
│ │ └── priv-app
│ ├── com.android.conscrypt
│ │ ├── apex_manifest.pb
│ │ ├── apex_pubkey
│ │ ├── bin
│ │ ├── etc
│ │ ├── javalib
│ │ ├── lib
│ │ └── lib64
│ ├── com.android.extservices
│ │ ├── apex_manifest.pb
│ │ ├── apex_pubkey
│ │ └── priv-app
│ ├── com.android.i18n
│ │ ├── apex_manifest.pb
│ │ ├── apex_pubkey
│ │ └── etc
│ ├── com.android.ipsec
│ │ ├── apex_manifest.pb
│ │ ├── apex_pubkey
│ │ ├── etc
│ │ └── javalib
│ ├── com.android.media
│ │ ├── apex_manifest.pb
│ │ ├── apex_pubkey
│ │ ├── etc
│ │ ├── javalib
│ │ └── lib64
│ ├── com.android.mediaprovider
│ │ ├── apex_manifest.pb
│ │ ├── apex_pubkey
│ │ ├── etc
│ │ ├── javalib
│ │ └── priv-app
│ ├── com.android.media.swcodec
│ │ ├── apex_manifest.pb
│ │ ├── apex_pubkey
│ │ ├── bin
│ │ ├── etc
│ │ └── lib64
│ ├── com.android.neuralnetworks
│ │ ├── apex_manifest.pb
│ │ ├── apex_pubkey
│ │ ├── lib
│ │ └── lib64
│ ├── com.android.os.statsd
│ │ ├── apex_manifest.pb
│ │ ├── apex_pubkey
│ │ ├── bin
│ │ ├── etc
│ │ ├── javalib
│ │ ├── lib
│ │ └── lib64
│ ├── com.android.permission
│ │ ├── apex_manifest.pb
│ │ ├── apex_pubkey
│ │ ├── javalib
│ │ └── priv-app
│ ├── com.android.resolv
│ │ ├── apex_manifest.pb
│ │ ├── apex_pubkey
│ │ └── lib64
│ ├── com.android.runtime
│ │ ├── apex_manifest.pb
│ │ ├── apex_pubkey
│ │ ├── bin
│ │ ├── lib
│ │ └── lib64
│ ├── com.android.sdkext
│ │ ├── apex_manifest.pb
│ │ ├── apex_pubkey
│ │ ├── bin
│ │ ├── etc
│ │ └── javalib
│ ├── com.android.tethering
│ │ ├── apex_manifest.pb
│ │ ├── apex_pubkey
│ │ ├── javalib
│ │ └── priv-app
│ ├── com.android.tzdata
│ │ ├── apex_manifest.pb
│ │ ├── apex_pubkey
│ │ └── etc
│ ├── com.android.vndk.current
│ │ ├── apex_manifest.pb
│ │ ├── apex_pubkey
│ │ ├── etc
│ │ ├── lib
│ │ └── lib64
│ ├── com.android.vndk.v28
│ │ ├── apex_manifest.pb
│ │ ├── apex_pubkey
│ │ ├── etc
│ │ ├── lib
│ │ └── lib64
│ ├── com.android.vndk.v28.apex
│ ├── com.android.vndk.v29
│ │ ├── apex_manifest.pb
│ │ ├── apex_pubkey
│ │ ├── etc
│ │ ├── lib
│ │ └── lib64
│ ├── com.android.vndk.v29.apex
│ └── com.android.wifi
│ ├── apex_manifest.pb
│ ├── apex_pubkey
│ ├── app
│ ├── etc
│ ├── javalib
│ └── priv-app
├── bin
│ └── stagefright
├── build.prop
├── etc
│ ├── compatconfig
│ │ └── settings-platform-compat-config.xml
│ ├── group
│ ├── init
│ │ ├── config
│ │ └── init.gsi.rc
│ ├── NOTICE.xml.gz
│ ├── passwd
│ ├── permissions
│ │ ├── com.android.carrierconfig.xml
│ │ ├── com.android.emergency.xml
│ │ ├── com.android.launcher3.xml
│ │ ├── com.android.provision.xml
│ │ ├── com.android.sdksetup.xml
│ │ ├── com.android.settings.xml
│ │ ├── com.android.storagemanager.xml
│ │ └── com.android.systemui.xml
│ ├── selinux
│ │ └── system_ext_sepolicy_and_mapping.sha256
│ └── vintf
│ └── manifest.xml
├── lib64
│ └── libemulator_multidisplay_jni.so
└── priv-app
├── CarrierConfig
│ └── CarrierConfig.apk
├── EmergencyInfo
│ └── EmergencyInfo.apk
├── Launcher3QuickStep
│ └── Launcher3QuickStep.apk
├── MultiDisplayProvider
│ ├── lib
│ └── MultiDisplayProvider.apk
├── Provision
│ └── Provision.apk
├── SdkSetup
│ └── SdkSetup.apk
├── Settings
│ └── Settings.apk
├── StorageManager
│ └── StorageManager.apk
├── SystemUI
│ └── SystemUI.apk
└── WallpaperCropper
└── WallpaperCropper.apk
104 directories, 74 files
/system/system_ext/etc/vintf/manifest.xml