当前位置: 首页 > 知识库问答 >
问题:

如何在Android设备上本地运行终端模拟器中的“adb shell”命令?

伍宝
2023-03-14

从PC上的shell中,我可以运行adb shell cmd package list packages,获得所有已安装软件包的列表。我想在我的Android手机(Nexus 6P)的终端模拟器(目前使用Termux)中本地运行这个和类似的命令。

如果我用/system/bin/sh打开同一个shell,然后尝试运行/system/bin/cmd package list packages,则不会发生任何情况(没有错误,只输出任何内容并重新加载提示)。

如果运行/system/bin/cmd-l,选项列表将按预期显示。$PATH$LD_LIBRARY_PATH在这两种环境中是相同的。一个主要区别是echo$useradb shell返回“shell”,但从Termux启动的/system/bin/sh返回我的本地用户名。

是否有任何方法可以在Android本地的终端模拟器中复制从adb shell运行的命令的行为?

编辑:我的设备是根的,我可以使用根仅解决方案。

共有1个答案

贺善
2023-03-14

问题是Termux。按照设计,Termux只运行(或者大部分运行?)使用apt或更新的“本机”包管理界面(例如apt install bsdtar)从Termux中安装的Linux命令行程序。运行adb shell命令所需要的是一个终端模拟器,它可以真正访问底层的Android文件系统,而不仅仅是Termux,它实际上是一个chroot保存,因为它知道它不是从文件系统root/运行命令。

作为一个简单的测试,运行以下命令:

    which ls

它应该返回类似/system/bin/ls的内容。但是如果它返回类似/data/data/com.termux/files/usr/bin/applets/ls的内容,则必须将终端仿真器更改为其他内容。我怀疑Termux的设计是为了考虑到谷歌在KitKat或Android4.x之后实施的更严格的shell执行策略。

我使用的Android发行版LineageOS14.1带有一个内置的shell模拟器,允许我运行/system/bin/ls中的命令。

 类似资料:
  • 从我电脑上的shell中,我可以运行,并获得所有已安装软件包的列表。我想在我的Android手机(Nexus 6P)上的终端模拟器(目前使用Termux)上本地运行这个和类似的命令。 如果我用打开同一个shell,然后尝试运行,什么都不会发生(没有错误,只是什么都不输出并重新加载提示)。 如果我运行,选项列表将按预期显示。和在两个环境中是相同的。一个主要的区别是从返回shell,但从Termux启

  • 理想情况下,我希望能够创建一个像.azcli这样的脚本,我可以在CosmosDB模拟器上本地运行,然后在我的devops管道中使用相同的脚本将资源上传到Azure。 这是我当前的 CLI 命令。 deploy-cosmos.azcli 我在Azure CLI文档中找不到任何提及CosmosDB模拟器的内容,并且CLI命令本身的参数似乎都无法直接指向模拟器。 https://docs.microso

  • 这个应用程序有多个环境,其中这是托管,如,qa,UAT,生产。我可以通过一个屏幕改变环境,只有在摇动一个真正的设备后才来。 不幸的是,Android Studio3没有给出一个直接摇晃设备的选项。如何在模拟器中实现此抖动动作?

  • 我想在Android设备上运行一些需要根权限的命令。这些命令应该使用java代码执行,因此应用程序本身应该能够运行这些命令,而不需要将设备连接到个人电脑并使用shell运行这些命令。 我使用了,然后使用了我想要运行的命令(chmod 666)。chmod666需要一个根设备才能正常运行,因此我尝试先使用获得超级用户权限,然后尝试运行它。我将java代码放在onCreate方法中。这是我的密码: 但

  • 应用程序不能在MAC上的模拟器和设备上运行,我只得到一个错误,说客户端还没有准备好。 我试图使Android studio失效并重新启动,试图关闭应用程序,卸载,重新运行,禁用即时运行,清理项目,重建,删除Gradle,但这些都不起作用。 下面是我得到的运行日志。 $adb推送 /Users/username/app/App/build/generalDebug-1.6.1-530966e6.ap

  • 我正在运行最新版本的Mac OS,我想通过命令行工具运行android模拟器。我在Mac终端上运行了以下命令,得到了以下错误。 我还使用以下可用选项运行命令,这些选项也可以在官方文档developer.android.com上找到 我需要做什么,这样我就不需要每次都打开Android Studio而只打开模拟器。