Android9.0挂载system文件夹读写

  在Android系统中,system文件夹一般都是只读属性,不管你是root用户还是普通权限用户,所以在开发中,如果我们想要访问和修改system文件夹下的内容的话就需要获取system文件夹的写属性,而因为Android版本的变化,在不同版本下system文件夹修改读写属性的方式也有较大的区别。

Android8.0以下

第一步要得到system分区的全名

adb shell 
mount 
rootfs / rootfs ro 0 0 
tmpfs /dev tmpfs rw,mode=755 0 0 
devpts /dev/pts devpts rw,mode=600 0 0 
proc /proc proc rw 0 0 
sysfs /sys sysfs rw 0 0 
tmpfs /sqlite_stmt_journals tmpfs rw,size=4096k 0 0 
none /dev/cpuctl cgroup rw,cpu 0 0 
/dev/block/mtdblock0 /system yaffs2 ro 0 0 
/dev/block/mtdblock1 /data yaffs2 rw,nosuid,nodev 0 0 
/dev/block/mtdblock2 /cache yaffs2 rw,nosuid,nodev 0 0 
/dev/block//vold/179:0 /sdcard vfat rw,dirsync,nosuid,nodev,noexec,uid=1000,gid=1015,fmask=0702,dmask=0702,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0 

  从/dev/block/mtdblock0 /system yaffs2 ro 0 0 部分可以看得出/system的权限是ro即是read only。

第二步:根据名称重新挂载

  执行命令

mount -o remount /dev/block/mtdblock0 /system 
mount 
rootfs / rootfs ro 0 0 
tmpfs /dev tmpfs rw,mode=755 0 0 
devpts /dev/pts devpts rw,mode=600 0 0 
proc /proc proc rw 0 0 
sysfs /sys sysfs rw 0 0 
tmpfs /sqlite_stmt_journals tmpfs rw,size=4096k 0 0 
none /dev/cpuctl cgroup rw,cpu 0 0 
/dev/block/mtdblock0 /system yaffs2 rw 0 0 
/dev/block/mtdblock1 /data yaffs2 rw,nosuid,nodev 0 0 
/dev/block/mtdblock2 /cache yaffs2 rw,nosuid,nodev 0 0 
/dev/block//vold/179:0 /sdcard vfat rw,dirsync,nosuid,nodev,noexec,uid=1000,gid=1015,fmask=0702,dmask=0702,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0

  可以看到/dev/block/mtdblock0 /system yaffs2 rw 0 0,/system拥有rw的权限。

   如果要改回去ro权限的话,执行:

mount -o remount,ro /dev/block/mtdblock0 /system 

  当/system 目录为RW权限后,就可以随意删除或者替换系统应用了。

Android8.0以上

  在Android8.0以上通过以上mount命令,你会发现找不到/system代表的节点和拥有的权限信息,这是因为Android8.0之后谷歌加入了A/B system的特性,system分区跟ramdisk分区打包在一起,因此系统起来之后也就不存在system分区了,而是直接把system镜像挂载到/根目录上。所以/proc/mounts文件中没有包含/system的权限信息,此时如果使用上面的命令:

mount -o remount,rw /system 

重新挂载/system分区会报错:

mount: '/system' not in /proc/mounts

  因此使用这条命令是不可行的,需要使用下述的命令:

mount -o remount -o rw /

  使用这条命令可以临时挂载上/system文件夹,直到下一次重启。
  其实为什么root用户会出现/system文件夹无权限写的情况的话,主要原因是/system所属的用户组不是root,而是system用户组,所以需要重新挂载。
  当然上面方法不能挂载/system目录的话而且提示“’/dev/root’ is read-only”的话,那么是因为你的设备开启了avb,此时就只能通过下面的方式完全重新挂载整个系统:

adb root
adb disable-verity
adb remount

  如果adb disable-verity提示需要解锁OEM的话,那么还需要先解锁OEM:

adb reboot fastboot
fastboot oem unlock
fastboot reboot

  提示解锁成功的话,重新执行命令就不会报错了。

  • 15
    点赞
  • 80
    收藏
    觉得还不错? 一键收藏
  • 13
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值