Android R system_ext动态扩展分区

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.

Android R system_ext动态扩展分区_第1张图片

我们从官网AOSP官网动态分区相关表述来看,这就是个分区。

Android R system_ext动态扩展分区_第2张图片

Android R system_ext动态扩展分区_第3张图片

 

在这篇文章里,没有过多的针对性表述,怎么一个机制,怎么用?

大胆猜测了下,这就是Android R才引入的动态分区定制概念,和odm分区类似用法,为了应对单个项目满足不同多样的需求而进一步完善的动态定制型框架。

Android R system_ext动态扩展分区_第4张图片

 

最后贴一个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

Android R system_ext动态扩展分区_第5张图片

你可能感兴趣的:(Android)