如何使用 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 EMULATORADB 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/系统?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Dart 中以正确的方式重定向和重新加载?

在应用程序中以编程方式执行 adb shell dpm 命令会产生无法运行程序“adb”:错误 = 13,权限被拒绝 [重复]

如何使用 bash 脚本重命名当前目录及其子目录中的文件?

如何在 Android 中以编程方式反编译 dex 文件?

nc使用笔记

sh 一个简单的bash脚本,通过ADB在Marshmallow +设备上启用演示模式(基于http://bit.ly/295BHLx)