1.android 修改分区表情况的分分区OTA升级方案简介
2.AndroidââAndroid10çååºåå¨(Scoped Storage)
3.å¦ä½å¨adb shellä¸mount Androidä¸çååº
android 修改分区表情况的OTA升级方案简介
在Android设备的分区表变更中,有多种方法实现OTA升级,区源包括QFIL、分分区fastboot和针对不同系统的区源android源码情景特定策略。首先,分分区QFIL升级直接替换所有镜像,区源无需过多解释。分分区对于NV数据备份,区源可通过工具如QCN backup或partition Manager进行,分分区也可通过configuration中的区源选项自动备份或选择保留特定分区。
fastboot升级涉及刷写GPT,分分区phpstorm源码如果NV分区起始位置不变,区源数据可以保留,分分区但若位置变动,区源需要特殊处理。分分区一种设想是已知源码通过fastboot获取原NV地址,然后在aboot中实现数据迁移。然而,这在实践中还未实现。
OTA升级根据系统类型(非AB和AB)有不同的处理。非AB系统允许较大自由度,源码无限可通过updater-script控制升级流程,包括GPT修改和NV备份。而在AB系统中,升级流程固定,由update_engine执行,源码分销安全性更高,但限制了自定义升级。AB系统的GPT修改需在干净的环境中进行,通常涉及替换recovery和GPT,可能需要两个OTA包和一个GPT文件。
为了简化操作,可以考虑将AB系统的recovery设计成支持非AB和AB升级方式,或者在非AB模式下执行整个过程。然而,无论哪种方式,都需要注意风险,如升级中断可能导致设备故障,因此推荐熟练者操作。
对于全盘和文件级加密的userdata,存在保护和调整空间的挑战,可能需要创新方法或在升级前进行特殊操作。至于emmc地址映射和底层开发中的安全问题,这些都是当前和未来可能探索的方向。
AndroidââAndroidçååºåå¨(Scoped Storage)
å¨Android以åï¼åªè¦ç¨åºè·å¾äºREAD_EXTERNAL_STORAGEæéï¼å°±å¯ä»¥éæ读åå¤é¨çåå¨å ¬æç®å½ãåªè¦ç¨åºè·å¾äºWRITE_EXTERNAL_STORAGEæéï¼å°±å¯ä»¥éæå¨åå ¥å¤é¨åå¨çå ¬æç®å½ä¸æ°å»ºæ件ææ件夹äºæ¯Googleå¨Androidä¸æåºäºååºåå¨ï¼æå¨éå¶ç¨åºå¯¹å¤é¨åå¨ä¸å ¬æç®å½ç使ç¨ã
ååºåå¨å¯¹å é¨åå¨ç§æç®å½åå¤é¨åå¨ç§æç®å½é½æ²¡æå½±å
ç®åæ¥è¯´å°±æ¯ï¼å¨Androidä¸ï¼
使ç¨ååºåå¨çåºç¨å¯¹èªå·±å建çæ件å§ç»æ¥æ读/åæéï¼æ 论æ件æ¯å¦ä½äºåºç¨çç§æç®å½å ï¼æ以ï¼å¦æåºç¨ä» ä¿åå访é®èªå·±å建çæ件ï¼åæ é请æ±è·å¾READ_EXTERNAL_STORAGEæWRITE_EXTERNAL_STORAGEæé
å¦æè¦è®¿é®å ¶ä»åºç¨å建çæ件ï¼åéè¦READ_EXTERNAL_STORAGEæéã并ä¸ä»ç¶åªè½ä½¿ç¨MediaStoreæä¾çAPIææ¯SAF访é®ã
è¿ééè¦æ³¨æçæ¯ï¼MediaStoreæä¾çAPIåªè½è®¿é®å¾çãè§é¢ãé³é¢ï¼å¦æéè¦è®¿é®å ¶å®ä»»ææ ¼å¼çæ件ï¼éè¦ä½¿ç¨SAFï¼å®ä¼è°ç¨ç³»ç»å ç½®çæ件æµè§å¨ä¾ç¨æ·èªä¸»éæ©æ件
Android Qè§å®äºAppæ两ç§åå¨ç©ºé´æ¨¡å¼è§å¾ï¼Legacy ViewãFiltered View
ç³»ç»éè¿ä¸åæ¹å¼ç¡®å®Appçè¿è¡æ¨¡å¼ï¼
å¤æå½åAppè¿è¡çæ¯ä»ä¹æ¨¡å¼ï¼å¯ä»¥éè¿Environmentæä¾çAPIè¿è¡å¤æ
MediaStoreæä¾äºä¸åå ç§ç±»åç访é®Uriï¼éè¿æ¥æ¾å¯¹åºUriæ°æ®ï¼è¾¾å°è®¿é®çç®çã
æ们è¿å¯ä»¥ä½¿ç¨getContentUriè·åææ<volumeName>
MediaProvider对äºAppåæ¾å°å ¬å ±ç®å½æ件ï¼éè¿ContentResolver insertæ¹æ³ä¸Uriæ¥ç¡®å®
MediaStroeéè¿ä¸åUriï¼ä¸ºç¨æ·æä¾äºå¢ãå ãæ¹æ¹æ³ï¼æé对åºå¦ä¸
ä¾å¦PDFï¼PDF为éåªä½ç±»æ件ï¼å æ¤æ们ä¸è½éè¿MediaStoreæ¥è·åï¼å¯¹äºè¿ç§å ¶ä»ç±»åçæ件ï¼ä¸è¬ä½¿ç¨SAFæ¥è®©ç¨æ·éæ©
æ们ä¹æ¨è使ç¨SAF让ç¨æ·èªå·±å»å建ï¼IntentAction为ï¼ACTION_CREATE_DOCUMENT
访é®app-specificå为两ç§æ åµï¼ä¸ç§æ¯è®¿é®Appèªèº«App-specificç®å½ï¼ç¬¬äºæ¯è®¿é®å ¶ä»Appç®å½æ件
Android Qï¼Appå¦æå¯å¨äºFiltered Viewï¼é£ä¹åªè½ç´æ¥è®¿é®èªå·±ç®å½çæ件ï¼
Appæ¯FilteredViewï¼å ¶ä»Appæ æ³ç´æ¥è®¿é®å½åAppç§æç®å½ï¼éè¦éè¿ä»¥ä¸æ¹æ³ï¼
å¦ä½å¨adb shellä¸mount Androidä¸çååº
æ¹æ³ä¸ï¼
使ç¨dfå½ä»¤æ¥ç
# df
df
Filesystem Size Used Free Blksize
/dev M K M
/mnt/asec M 0K M
/mnt/obb M 0K M
/system M M M
/data M M M
/cache M 4M M
/HWUserData 2G K 2G
/cust M M M
/mnt/sdcard 7G M 6G
/mnt/secure/asec 7G M 6G
çå°/systemååºæMBç大å°ã
æ¥çæ¥ç/procä¸çpartitions
# cat /proc/partitions
cat /proc/partitions
major minor #blocks name
0 mmcblk0
1 mmcblk0p1
2 mmcblk0p2
3 mmcblk0p3
4 1 mmcblk0p4
5 mmcblk0p5
6 mmcblk0p6
7 mmcblk0p7
8 mmcblk0p8
9 mmcblk0p9
mmcblk0p
mmcblk0p
mmcblk0p
mmcblk0p
mmcblk0p
mmcblk0p
mmcblk0p
mmcblk0p
mmcblk0p
mmcblk0p
mmcblk1
mmcblk1p1
0 mtdblock0
çåºï¼ååºmmcblkç大å°ææ¥è¿MBï¼å¤ææè½½ç¹/system就对åºè¯¥å®äºã
ï¼å ¶å®ï¼å¯ä»¥å¨/proc/mountsä¸é¢ççæ´ç´æ¥ãããï¼
äºæ¯ï¼è¾å ¥ä»¥ä¸mountå½ä»¤
# mount -o remount,rw /dev/block/mmcblk0p /system
å°±å¯ä»¥å¨/systemä¸é¢è¿è¡åæä½ã
å½ç¶ï¼å¦æä¸æç®éå¯æºåçè¯ï¼æ好è¿æ¯å°å®æ¢å¤å°read onlyç¶æãè¾å ¥ï¼
# mount -o remount,ro /dev/block/mmcblk0p /system
该æ¹æ³æ¯è¾éº»ç¦çæ¯è¿è¦å¤æææè½½ç¹è·ååºï¼ç论ä¸è¯´å¿ é¡»è¦å°å®ä»¬å¯¹åºä¸æ¥ï¼å¦åä¼åºéã
èå®é ä¸è¯è¿å°ä¸åçååºè·æè½½ç¹remountä¸ä¸ï¼å± ç¶è¿æ¯å¯ä»¥çãåå ææ¶ä¸æã
æ¹æ³äºï¼
èèå°ä¸é¢ç¨æé»ä½ååçç°è±¡ï¼å°è¯ç¨å ¶ä»ä¿¡æ¯ä»£æ¿â/dev/block/mmcblk0pâï¼è¯äºä¸ä¸å± ç¶ä¹æ¯å¯è¡çï¼
ç´æ¥è¾å ¥ä¸åå½ä»¤å³å¯ï¼
# mount -o remount,rw mtd@system /system
第äºç§æ¹æ³è½ç¶ä¹æ¯å¯ä»¥çãä¹æ以è¿ä¹åæ¯åèinit.rcéé¢çmountåæ³ã
ä¸æ¸ æ¥è¿ä¸ªæ¯æä¹åäºï¼è¦æ¯åççlinux mountå½ä»¤åºè¯¥ä¸ä¼è¿æ ·çã
update: .
å ¶å®,æ²¡å¿ è¦åä¸é¢æ¹æ³ä¸åæ¹æ³äºé£ä¹å¤æ.è¿å¯ä»¥æ´ç®å.åªéè¦è¾å ¥:
# mount -o remount,rw /system
å³å¯.
linuxç³»ç»èªå·±ä¼å»ç»´æ¤ä¸ä¸ªå·²ç»mountç表.æ以åªéè¦è¾å ¥ç°æçæè½½ç¹å°±è¡å¦