如何在Android设备上安装缺少的命令行工具?


9

Android安装并不总是拥有人们希望在类Unix系统上拥有的所有工具。

例如,现在我有一个有问题的设备,没有findCLI实用程序。我的意思是,这是我在期间得到的adb shell

$ find
/system/bin/sh: find: not found

也:

$ /system/bin/toolbox find
find: no such tool

这个特定的设备运行的是Android 5.0(我想还有LG的一些专有功能),但是问题是所有Android版本都存在。

是否有find在Android上安装本机/ CLI工具(例如)的标准程序?(包管理器?)而且,无论如何,如何以最正确的方式来做?



是的,此设备已植根。但是,了解无根兼容方式也很有趣。:)
显示名称

Answers:


5

对于扎根的Android设备

您可以考虑安装Stephen的BusyBox应用。每个Play商店中,应用程序支持的最低Android版本为Android 1.6,并且它是更新良好的应用程序。本质上,它会将busybox二进制文件安装到其所有实用程序/system/xbin,并将符号链接放置在同一目录中。

什么是BusyBox(不是应用程序)?

BusyBox将许多常见UNIX实用程序的微型版本组合到单个小型可执行文件中。它代替了通常在GNU fileutils,shellutils等中发现的大多数实用程序。但是,所包含的选项提供了预期的功能,并且其行为与GNU对应项非常相似。BusyBox为任何小型或嵌入式系统提供了一个相当完整的环境。

是它提供的实用程序的正式列表。find工具可以在那找到。

可以代替 BusyBox的还有Toybox,它已取代棉花糖发行版中的Toolbox

什么是Toybox

Toybox将许多常见的Linux命令行实用程序组合在一起,成为一个BSD许可的可执行文件。它简单,小型,快速且合理地符合标准(POSIX-2008LSB 4.1)。

是toybox支持的实用程序的正式列表。目前,BusyBox似乎比Toybox支持更多的工具。

我认为不存在用于安装Toybox二进制文件的应用程序,因此您可以在此处使用我的答案进行安装。请注意,答案可用于Toybox和BusyBox的安装。仅前提条件是从官方资源下载二进制文件。

官方下载链接:

对于非root用户的Android设备

我不知道所有Android版本是否都具有通用方法。也就是说,对于Android 4.0及更高版本,BusyBox Install(无根)声称可以正常工作。BusyBox二进制文件可能附带一些终端应用程序。我没有亲自测试过任何此类终端应用程序,但是很容易理解它们的最大缺点是:您不能使用充分利用它们。

但是,有一种方法似乎适用于4.2以上的任何Android版本(根据我的测试)。/data/local/tmp是可以由shell用户编辑的目录。adb shell授予您设备上的远程Shell并以同一用户身份登录。

您要做的就是将BusyBox / Toybox二进制文件放入/data/local/tmp同一目录中,并为实用程序创建符号链接。您可以使用以下步骤。

(需要在PC中设置。)

adb push LOCAL_FILE / data / local / tmp /#在PC中将LOCAL_FILE替换为toybox / busybox二进制文件的文件路径
亚行外壳
chmod 755 / data / local / tmp / FILE#在推送的二进制文件上设置适当的权限。将FILE替换为您在第一步中推送的二进制文件的名称。推荐使用一个单词作为名称,并使用所有小写字母
box = / data / local / tmp / FILE#设置一个本地变量供下一步使用。适当替换文件
$ box | $ box sed's / \ / \ n / g'| $ box sed'$ d'| 边读边;做$ box ln -sf / data / local / tmp / FILE / data / local / tmp / $ line; #我们将执行$ box引用的二进制文件列出所有实用程序,然后创建一个列表,然后为列表中的每个项目在目录中创建符号链接。

Izzy建议使用最直接的方式放置BusyBox二进制文件的符号链接

adb shell / data / local / tmp / FILE --install -s / data / local / tmp /#适当地替换FILE。--install -s将在目录中为您创建所需的符号链接。目录的路径位于其旁边。 

现在可以使用绝对路径访问所有这些工具/data/local/tmp/TOOL。用实用程序名称替换TOOL。调用find命令的示例用法:

adb shell /data/local/tmp/find --help
adb shell /data/local/tmp/FILE find --help   # alternative way of using a tool

对于交互式Shell会话,可以使用export命令将FILE的位置添加到$ PATH中:

export PATH = / data / local / tmp:$ PATH#这是/ data / local / tmp前缀到$ PATH的现有值中。导出将确保子外壳在$ PATH中看到相同的值

完成后,您现在可以通过这种方式使用find或另一个BusyBox / Toybox实用程序:

亚行外壳 
查找-帮助

注意, $ PATH中的更改仅适用于当前的shell会话。这意味着每次使用adb启动shell时,都必须导出$ PATH。

就是说,除了找到一种创建变量的存在和值的方法,该变量的存在和值将持续存在于您PC上的当前Shell会话之外,不是Android之外,没有针对非交互式Shell会话的仅Android解决方案。例:

adb shell $lolcat   # $lolcat is a temporary variable in my shell on PC and it was assigned the value /system/xbin/toybox. My bash shell is replacing $lolcat with its value and then passing it to adb shell (or you can say, it first expanded the variable and then executed the whole command)

在busybox和toybox中找不到的工具,您必须自己为Android构建它们,如果尚未有人构建并发布在您可以信任的可信赖位置,则可以下载并安装。
Firelord
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.