在 SDK 30 或更高版本的 Android 模拟器中,hosts 文件重置为默认值

问题描述 投票:0回答:1

我需要在 SDK 30 或更高版本的模拟器中配置主机文件。 为此,我从命令行执行后续步骤:

  • emulator -avd Pixel_4a_API_34 -writable-system //运行模拟器
  • adb root // 以 root 身份重新启动 adb 守护进程
  • adb remount // 重新挂载文件系统
  • adb -s Pixel_4a_API_34 ./hosts /system/etc/hosts // 将我的自定义主机文件上传到模拟器
  • 亚行重启

我的主机文件例如:

127.0.0.1 localhost
::1 ip6-localhost
192.168.1.1 testhost.loc

重新启动模拟器后,我会执行 adb shell cat /system/etc/hosts 来检查更改是否已完成且一切正常。该命令打印:

127.0.0.1 localhost
::1 ip6-localhost
192.168.1.1 testhost.loc

哦,好的,一切正常。

现在我关闭模拟器,并使用虚拟设备管理器从 Android Studio 启动它。如果我执行 adb shell cat /system/etc/hosts 命令会打印:

127.0.0.1 localhost
::1 ip6-localhost

什么???

最后我再次关闭模拟器并使用命令 emulator -avd Pixel_4a_API_34 -writable-system 运行并再次执行 adb shell cat /system/etc/hosts 它打印:

127.0.0.1 localhost
::1 ip6-localhost
192.168.1.1 testhost.loc

总而言之,如果我从 Android Studio 运行,则默认打印主机文件,但如果我使用带选项 -writable-system 的模拟器命令运行,则我有主机文件。 我也使用 emulator -avd Pixel_4a_API_34without -writable-system)测试运行模拟器,结果与在 android studio 中从 vmd 运行相同。

30 之前的 sdk 不会发生这种情况。使用以前的 sdk,您可以在主机文件中进行更改,如果您执行 cat,无论您是从 android studio 还是从控制台启动,它都会显示正确的内容。

有人可以向我解释发生了什么以及是否可以解决?

对我来说,使用命令和选项 writable-system 运行没有问题,但我想了解发生了什么。

谢谢。

android-studio adb emulation hosts hosts-file
1个回答
0
投票

如果您想从 Android Studio 运行带有可写系统的模拟器,您可以将

emulator
保存为
emulator.ORIG
并在同一目录中创建一个可执行 shell 脚本,命名为
emulator

#! /bin/bash
exec "$0.ORIG" -writable-system "$@"

这适用于 macOS 和 Linux。

如果需要,您可以进行更复杂的处理或命令行选项。

© www.soinside.com 2019 - 2024. All rights reserved.