Android R system_ext动态扩展分区
16lz
2021-01-23
Android Q lunch device刷R system.img后,发现其多了个system_ext分区。
列表如下:
TPro:/ # ls -ltotal 65dr-xr-xr-x 37 root root 0 2020-04-26 10:45 acctdrwxr-xr-x 48 root root 960 2020-04-26 10:45 apexlrw-r--r-- 1 root root 11 2020-04-18 12:30 bin -> /system/binlrw-r--r-- 1 root root 50 2020-04-18 12:30 bugreports -> /data/user_de/0/com.android.shell/files/bugreportsdrwxrwx--- 6 system cache 4096 2019-01-01 00:00 cachedrwxr-xr-x 4 root root 0 1970-01-01 00:00 configlrw-r--r-- 1 root root 17 2020-04-18 12:30 d -> /sys/kernel/debugdrwxrwx--x 47 system system 4096 2020-04-26 10:46 datadrwx------ 5 root system 100 2020-04-26 10:45 data_mirrordrwxr-xr-x 2 root root 4096 2020-04-18 10:42 debug_ramdisklrw------- 1 root root 23 2020-04-18 12:30 default.prop -> system/etc/prop.defaultdrwxr-xr-x 25 root root 4820 2020-04-26 10:45 devlrw-r--r-- 1 root root 15 2020-04-18 12:30 dsp -> /vendor/lib/dsplrw-r--r-- 1 root root 11 2020-04-18 12:30 etc -> /system/etclrw-r--r-- 1 root root 20 2020-04-18 12:30 firmware -> /vendor/firmware_mntlrwxr-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.rcdrwxr-xr-x 9 root root 200 2020-04-26 10:45 linkerconfigdrwx------ 2 root root 16384 2020-04-18 12:30 lost+founddrwxr-xr-x 9 root root 4096 2019-12-31 20:13 metadatadrwxr-xr-x 17 root system 360 2020-04-26 10:45 mntdrwxr-xr-x 1 root root 3488 2020-04-26 10:37 odmdrwxr-xr-x 9 root root 4096 2020-04-17 16:48 oemlrw-r--r-- 1 root root 19 2020-04-18 12:30 persist -> /mnt/vendor/persistdr-xr-xr-x 578 root root 0 1970-01-01 00:00 proclrw-r--r-- 1 root root 15 2020-04-18 12:30 product -> /system/productdrwxr-xr-x 3 root root 4096 2020-04-18 10:42 reslrw-r--r-- 1 root root 21 2020-04-18 12:30 sdcard -> /storage/self/primarydrwx--x--- 4 shell everybody 80 2020-04-26 10:45 storagedr-xr-xr-x 15 root root 0 2020-04-26 10:45 sysdrwxr-xr-x 1 root root 3488 2020-04-26 10:37 systemlrw-r--r-- 1 root root 18 2020-04-18 12:30 system_ext -> /system/system_extdrwxr-xr-x 1 root root 3488 2020-04-26 10:37 vendorTPro:/ #
其中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.apk104 directories, 74 files
/system/system_ext/etc/vintf/manifest.xml
更多相关文章
- Android手机开发:图片的放大和缩小显示ImageView
- android拼接多张bitmap图片
- 【android开发】之【android动态布局方法总结】
- android利用OpenGLES开发动态壁纸用到的GLWallpaperService类
- Android自动播放图片功能实现
- Android动态设置View的位置和大小
- Android Glide设置图片圆角,亲测有效
- ANDROID图片压缩代码