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                                                                                                 
    <package name="com.android.settings.intelligence" codePath="/system/product/priv-app/SettingsIntelligence" nativeLibraryPath="/system/product/priv-app/SettingsIntelligence/lib" publicFlags="810073669" privateFlags="-1945628664" ft="1718d429820" it="1718d429820" ut="1718d429820" version="29" userId="10083" isOrphaned="true">
    <package name="com.android.settings" codePath="/system/system_ext/priv-app/Settings" nativeLibraryPath="/system/system_ext/priv-app/Settings/lib" primaryCpuAbi="arm64-v8a" publicFlags="944356933" privateFlags="-1938812824" ft="1718d43a1c0" it="1718d43a1c0" ut="1718d43a1c0" version="29" sharedUserId="1000" isOrphaned="true">
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.

no system_ext.img in AOSP/out

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

AOSP官网动态分区相关表述system_ext

AOSP官网动态分区相关表述system_ext

 

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

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

AOSP官网动态分区相关表述system_ext

 

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

/system/system_ext/etc/vintf/manifest.xml

 


Android S更新,将system_ext当成普通的文件夹,并入system.img,不再单独建立分区???

记录如下:

Android S:

generic_arm64:/ # 
generic_arm64:/ # ls -l /system                                                                                                                                           
total 103
drwxr-xr-x  2 root root   4096 2021-03-22 14:26 apex
drwxr-xr-x 25 root root   4096 2021-03-22 10:05 app
drwxr-x--x  4 root shell  8192 2021-03-22 14:26 bin
-rw-------  1 root root   4167 2021-03-22 09:55 build.prop
drwxr-xr-x 16 root root   4096 2021-03-22 14:27 etc
drwxr-xr-x  2 root root   8192 2021-03-22 09:33 fonts
drwxr-xr-x  5 root root   4096 2021-03-22 14:26 framework
drwxr-xr-x  5 root root  16384 2021-03-22 09:53 lib
drwxr-xr-x  5 root root  24576 2021-03-22 09:53 lib64
drwxr-xr-x 42 root root   4096 2021-03-22 14:02 priv-app
drwxr-xr-x  9 root root   4096 2021-03-22 10:07 product
drwxr-xr-x  1 root root   3488 2021-04-08 13:42 system_ext
drwxr-xr-x  7 root root   4096 2021-03-22 14:24 usr
lrw-r--r--  1 root root      7 2021-03-22 14:27 vendor -> /vendor
drwxr-x--x  2 root shell  4096 2021-03-22 09:33 xbin
generic_arm64:/ # 

Android R:

Miami:/ # ls -l system/                                                                                                                                                   
total 95
drwxr-xr-x  3 root root   4096 2009-01-01 08:00 aio_custom
drwxr-xr-x  2 root root   4096 2009-01-01 08:00 apex
drwxr-xr-x 45 root root   4096 2009-01-01 08:00 app
drwxr-x--x  4 root shell  8192 2009-01-01 08:00 bin
-rw-------  1 root root   7815 2009-01-01 08:00 build.prop
drwxr-xr-x 18 root root   4096 2009-01-01 08:00 etc
drwxr-xr-x  2 root root  12288 2009-01-01 08:00 fonts
drwxr-xr-x  5 root root   4096 2009-01-01 08:00 framework
drwxr-xr-x  5 root root  16384 2009-01-01 08:00 lib
drwxr-xr-x  5 root root  16384 2009-01-01 08:00 lib64
drwxr-xr-x  1 root root   3488 2021-01-04 15:58 priv-app
lrw-r--r--  1 root root      8 2009-01-01 08:00 product -> /product
drwxr-xr-x 13 root root   4096 2009-01-01 08:00 removable-app
lrw-r--r--  1 root root     11 2009-01-01 08:00 system_ext -> /system_ext
drwxr-xr-x  7 root root   4096 2009-01-01 08:00 usr
lrw-r--r--  1 root root      7 2009-01-01 08:00 vendor -> /vendor
drwxr-x--x  2 root shell  4096 2009-01-01 08:00 xbin
Miami:/ # 

 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值