如何使用 adb 在 bash 脚本中以读写方式重新安装我的 Android/系统?
Posted
技术标签:
【中文标题】如何使用 adb 在 bash 脚本中以读写方式重新安装我的 Android/系统?【英文标题】:How can I remount my Android/system as read-write in a bash script using adb? 【发布时间】:2015-03-16 13:52:39 【问题描述】:了解详情
adb remount
返回"remount failed: Operation not permitted"
adb shell 'su -c mount -o rw,remount /system'
返回unknown option -- o
我的设备已root。
【问题讨论】:
这在一般情况下是无法回答的。 android 的 mount 命令是非典型的,它需要的调用的确切细节(通常是特定的设备文件以及挂载点)是特定于设备/版本的。此外,很可能 -o 没有传递给 mount 命令,而是作为 su 的参数处理。 从阅读其他帖子看来,这似乎是不必要的。 “您的 boot.img 或内核需要更改以允许它。您是否已存入根目录?如果是,请尝试自定义 rom”。如果我找到解决方法,我会通知您。 这是一个明显的问题,硬件可能会在文件系统级别以下实施写保护。 adb remount permission denied, but able to access super user in shell -- android的可能重复 由于android 10/11不可能,你必须创建一个tmpfs:medium.com/@anthony.f.tannous/… 【参考方案1】:remount
失败的可能原因是您没有以root
运行adb
。
Shell 脚本应如下所示。
# Script to mount Android Device as read/write.
# List the Devices.
adb devices;
# Run adb as root (Needs root access).
adb root;
# Since you're running as root su is not required
adb shell mount -o rw,remount /;
如果失败,您可以尝试以下方法:
# List the Devices.
adb devices;
# Run adb as root
adb root;
adb remount;
adb shell su -c "mount -o rw,remount /";
要查找您是哪个user
:
$ adb shell whoami
【讨论】:
这些可能有效,也可能无效 - Android mount 命令有点不典型,在许多情况下需要指定的确切设备。 我已经在 Android 4.4.4 (Google Nexus)、Adb v 1.0.31 上尝试过上述方法 adb shell su -c "mount -o rw,remount /system";似乎工作 - 非常感谢 “adb root”在我的 HTC Desire 510 上不起作用。“adbd 无法在生产版本中以 root 身份运行” 使用模拟器,除非我使用-writeable-system
标志启动 AVD,否则上述方法均无效【参考方案2】:
我遇到了同样的问题,无法将系统挂载为读/写。它会返回
用法:mount [-r] [-w] [-o 选项] [-t type] 设备目录
或者
不允许操作。访问被拒绝
现在这适用于所有有根设备。
在TERMINAL EMULATOR
或ADB SHELL
中执行以下操作
$ su
#mount - o rw,remount -t yaffs2 /system
Yaffs2
是系统分区的类型。将其替换为通过执行以下操作获得的系统分区类型
#cat /proc/mounts
然后从冗长的结果中检查/system
出现在哪里
我的摘录就像
mode=755,gid=1000 0 0
tmpfs /mnt/obb tmpfs rw,relatime,mode=755,gid=1000 0 0
none /dev/cpuctl cgroup rw,relatime,cpu 0 0/dev/block/platform/msm_sdcc.3/by-num/p10 /system ext4 ro,relatime,data=ordered 0 0
/dev/block/platform/msm_sdcc.3/by-num/p11 /cache ext4 rw,nosuid,nodev,relatime,data=ordered 0 0
所以我的系统是ext4
。我的命令是
$ su
#mount -o rw,remount -t ext4 /system
完成。
【讨论】:
我得到了“mount: Permission denied”:\【参考方案3】:如果不指定要挂载为 /system 的 dev 块,我无法让 mount 命令工作
#cat /proc/mounts
返回(这里只有系统行)/dev/stl12 /system rfs ro,relatime,vfat,log_off,check=no,gid/uid/rwx,iocharset=utf8 0 0
所以我的工作命令是mount -o rw,remount -t rfs /dev/stl12 /system
【讨论】:
谢谢,这种格式在运行 Android 6.0.1 的 Nexus 5 上为我完成了。命令最终成为: mount -o rw,remount -t ext4 /dev/block/platform/soc.0/f9824900.sdhci/by-name/system /system 唯一真正适用于 Android 6.0.1 的答案。干得好,先生。【参考方案4】:否则……如果
getenforce
返回
Enforcing
那么也许你应该打电话
setenforce 0
mount -o rw,remount /system
setenforce 1
【讨论】:
【参考方案5】:从 google play store 获取“adbd insecure”,它有助于授予对自定义 rom 的写入权限,从而保护我的制造商。
【讨论】:
【参考方案6】:以下可能会有所帮助(先研究disable-verity
的影响):
adb root
adb disable-verity
adb reboot
【讨论】:
感谢奥利奥设备的帮助adb disable-verity
给我一个错误 error:closed
。有什么原因/解决这个问题?
disable-verity only works for userdebug builds
【参考方案7】:
除了您收到的所有其他答案之外,我想解释一下unknown option -- o
错误:您的命令是
$ adb shell 'su -c mount -o rw,remount /system'
通过adb调用su。您正确引用了整个 su 命令,以便将其作为 one 参数传递给adb shell
。但是,su -c <cmd>
还需要您引用带有参数的命令,它将传递给 shell 的 -c
选项。 (YMMV 取决于 su
变体。)因此,您可能想尝试
$ adb shell 'su -c "mount -o rw,remount /system"'
(并可能在mount | grep system
arg 之前添加mount | grep system
的输出中列出的实际设备 - 请参阅其他答案。)
【讨论】:
【参考方案8】:mount -o rw,remount $(mount | grep /dev/root | awk 'print $3')
这对我有用,应该适用于任何 android 版本。
【讨论】:
以上是关于如何使用 adb 在 bash 脚本中以读写方式重新安装我的 Android/系统?的主要内容,如果未能解决你的问题,请参考以下文章
在应用程序中以编程方式执行 adb shell dpm 命令会产生无法运行程序“adb”:错误 = 13,权限被拒绝 [重复]
sh 一个简单的bash脚本,通过ADB在Marshmallow +设备上启用演示模式(基于http://bit.ly/295BHLx)