【问题标题】:'adb' is not recognized as a command'adb' 未被识别为命令
【发布时间】:2017-11-26 08:01:11
【问题描述】:

在我的新 MacBook 中,我安装了最新的 Android Studio。然后,在终端中,我创建了 .bash_profile,并将以下行添加到文件中:

export ANDROID_HOME=~/Library/Android/sdk

export ANDROID_TOOLS=$ANDROID_HOME/tools

export PATH=$PATH:$ANDROID_HOME/platform_tools

export PATH=$PATH:$ANDROID_TOOLS

之后,我运行命令source .bash_profile,然后我输入adb 命令,但得到错误,adb 未被识别为命令。为什么?我也是echo $PATH,我看到Android sdk的platform_tools目录在那里&那个目录下有adb文件。

====== 更新 =====

这很有趣,如果我遵循,它会起作用:

export PATH=$PATH:/Users/myname/Library/Android/sdk/platform-tools
export PATH=$PATH:/Users/myname/Library/Android/sdk/tools
export ANDROID_HOME=/Users/myname/Library/Android/sdk

为什么?上面的~ 不是和/Users/myname 相同吗?为什么我的原始脚本不起作用,但上面的脚本起作用?我不明白....请有人给我解释一下。

【问题讨论】:

  • 请发布find ~ -name 'adb*'的输出。此外,您应该导出ANDROID_SDK_ROOTANDROID_NDK_ROOTAccording to the NDK team,Android 工具使用变量来查找东西。在某些问题中还讨论了ANDROID_SDK_HOME,但未记录在案。我还没有看到它的规范参考。最后,ANDROID_HOME 看起来不正确。通常它类似于~/.android。它不指向 SDK 目录。
  • 另外值得一提... Bash 有一个“程序路径缓存”,有时需要更新。这是Apple Stack Exchange 上的Path not being honored? 等问题的原因。它是一个 Bash 问题;不是 OS X 问题。
  • 印刷错误 - platform_tools vs platform-tools
  • 嘿@AlexP。发布您的解决方案并获得 50 分。它们属于你。
  • @G.BlakeMeike,我不在乎这些点。如果这确实是 OP 问题的唯一原因 - 这个问题将是题外话,应该关闭。

标签: android bash macos adb


【解决方案1】:

在您的示例中,所有行都可以正常工作(但要特别注意platform_tools 文件夹的名称):

export ANDROID_HOME=~/Library/Android/sdk
export ANDROID_TOOLS=$ANDROID_HOME/tools
export PATH=$PATH:$ANDROID_HOME/platform_tools:$ANDROID_TOOLS

source .bash_profile
adb

所以,你搞错了:

platform_tools

代替:

platform-tools

另外,你可以试试这个解决方案,效果很好:

# print two export commands to your ~/.bash_profile
echo "export ANDROID_HOME=/Users/swift/Library/Android/sdk" >> ~/.bash_profile
echo "export PATH=${PATH}:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools" >> ~/.bash_profile

# Refresh bash profile (or restart Terminal.app)
source ~/.bash_profile

# Start using your adb command
adb --version
adb devices

【讨论】:

  • 谢谢,但请阅读我的问题,我知道如何让它发挥作用。
  • 您可以在路径中使用 'tilda'。
【解决方案2】:

根据 shell 的不同,export 变量定义的处理方式可能与普通赋值不同 — 特别是,tilde expansion 可能根本不会出现。

如果是这种情况,那么即使该变量在其他地方扩展,变量中的每个未解析的波浪号都将保持未解析状态。 According to the docs:

展开顺序为:大括号展开;波浪号展开,参数和变量展开

你可能想试试这个:

ANDROID_HOME=~/Library/Android/sdk
export ANDROID_HOME

export ANDROID_TOOLS=$ANDROID_HOME/tools

export PATH=$PATH:$ANDROID_HOME/platform_tools

export PATH=$PATH:$ANDROID_TOOLS

如果还是不行,你也可以试试$HOME

ANDROID_HOME=$HOME/Library/Android/sdk
export ANDROID_HOME

【讨论】:

  • @Leem.fin 显然 AlexP 是对的,问题应该结束了。
【解决方案3】:

这个非常基本的东西:
在当前目录(./)执行命令“adb”
./adb(你说这行得通)。
你想要的是 adb(执行从 PATH 变量中找到的命令 adb),如果在 PATH 变量中的所有路径中搜索后可以找到命令“adb”,则在找到的位置执行命令 adb .
路径条目中的一个常见前导是“。” (当前目录),但由于可执行文件名称滥用(随机目录中的同名)不鼓励使用。
不同的路径由路径分隔变量分隔(在 Windows 中它是分号“;”UNIX 通常是冒号“:”ALSO MAC)。 您的多个导出 SEEM 相互覆盖,请使用适当的分隔符“:”执行一次,并且所有路径合二为一(或 ALWAYS 包含 $PATH: 以保留所有以前的出口)。
它应该在 ../somewhere../sdk/platform-tools/adb
(您的 SDK 所在的位置) export PATH=$PATH:/Users/myname/Library/Android/sdk/platform-tools 似乎没问题(注意不要覆盖它[擦除])。
重新启动后,所有路径都应得到尊重。
NB
在 UNIX 中,我们有“which adb”命令,它告诉我们可执行文件所在的位置。在带有 cygwin 等工具的 Windows 中,我们也可以做同样的事情。
我相信 Mac 有 Homebrew。

【讨论】:

  • 问题不是这个
  • @Alex P 如果不是这个,那是怎么回事?
猜你喜欢
  • 2016-07-30
  • 2012-02-03
  • 2012-04-17
  • 2017-12-09
  • 2016-07-21
  • 2019-04-19
  • 1970-01-01
  • 2015-05-09
  • 1970-01-01
相关资源
最近更新 更多