14

问题:

  • 无法打开 SDK 管理器(仅闪烁一秒钟)
  • Eclipse 中没有构建路径目标

路径:

Android SDK: C:\Program Files\Android\android-sdk
JDK used for android: C:\Program Files\Java\jdk1.7.0_04 (There are other JDKs also in dir Java)

环境变量:

ANDROID_SDK_HOME: C:\Program Files\Android\android-sdk
JAVA_HOME: C:\Program Files\Java\jdk1.7.0_04;C:\Program Files (x86)\Java\jre1.6.0;C:\Program Files\Java\jre7;
System Path: C:\Program Files\Java\jdk1.7.0_04\bin;C:\Program Files\Java\jdk1.7.0_01\bin;C:\Program Files (x86)\Java\jdk1.5.0\bin;C:\Program Files\Android\android-sdk\tools\

错误:

SDK Manager on cmd
Failed to execute tools\android.bat. 
The system cannot find the file specified

Android.bat on cmd
Unable to access jar file lib\archquery.jar
Invalid path

find_java on cmd
nothing returned
4

7 回答 7

25

我有一个类似的问题 - 我必须编辑 android.bat (和 traceview.bat 当我需要它时)

在 android.bat 中寻找

for /f %%a in ('%java_exe% -jar %frameworkdir%archquery.jar') do set swt_path=%frameworkdir%%%a

用。。。来代替

set swt_path=lib\x86
于 2012-06-12T15:53:44.420 回答
8

YMMV,但除了编辑 android.bat,如上一个答案中所述,我仍然无法让 SDK 管理器在 Windows 8 64 位上运行,直到我首先:

  • 卸载所有版本的 Java
  • 重新启动*
  • 仅安装了 X86 JDK(包括安装程序中的 Public JRE 选项)

我已经尝试了所有这些事情,而且之前还尝试过更多 *没有重新启动,这是我让 SDK 管理器运行的唯一方法。希望这些信息可以使您免于经历我所经历的一些彻底的挫败感和浪费的时间。只是让工具开箱即用是多么痛苦。糟糕的经历。

我会作为对上一个答案的评论进行回复,但显然我没有足够的代表来做到这一点: https ://meta.stackexchange.com/questions/25725/how-do-you-comment-on-a -具体答案

编辑:下面更完整的答案。(我不认为重新启动与它有任何关系。)

似乎有几种方法可以启动 SDK 管理器:

  1. SDK Manager.exe在 Android SDK 的根目录中。
  2. SDK Manager.exesdk\tools\libAndroid SDK 中。
  3. Window -> Android SDK ManagerEclipse 中的菜单
  4. android.batsdk\toolsAndroid SDK 中。

就我而言,它看起来像是android.bat失败了:

for /f %%a in ('%java_exe% -jar lib\archquery.jar') do set swt_path=lib\%%a

至于那条线在做什么......如果我手动运行:"[path_to_java]java" -jar lib\archquery.jar

它成功返回:x86_64

但是当批处理文件运行相同的命令时,我不知道为什么但它失败并显示错误消息:

Unable to access jarfile lib\archquery.jar

所以变量swt_path被设置为一个空字符串。一切都从那里崩溃。

批处理文件为变量设置正确的值java_exe。其他人通常将此报告为一个问题,但这些解决方法与我的情况无关。

人们建议通过将 REM 添加到问题行的开头来注释掉问题行,并添加一行来手动设置swt_path变量,这是一种有效的解决方法:

REM for /f %%a in ('%java_exe% -jar lib\archquery.jar') do set swt_path=lib\%%a
set swt_path=lib\x86

但是,就我而言,关键问题是它选择从此处lib\x86的文件夹或lib\x86_64文件夹加载 jar 文件。在某些时候,BAT 文件错误、32 位 JDK 和 64 位 Android SDK 之间的关系变得混乱。

所以,在我的情况下,解决方法是:

  1. 卸载所有版本的 Java
  2. 安装 JDK
    • 您可以使用 32 位 Android SDK 并安装 32 位 JDK
    • 或者使用 64 位 Android SDK 并安装 64 位 JDK
    • 但是JDK的“位数”应该与Android SDK相匹配。看起来 32 位或 64 位都可以在 64 位计算机上运行,​​只要 JDK 位数与 Android SDK 位数匹配。
  3. 编辑“android.bat”

    • 如果使用 32 位 Android SDK/JDK,请使用lib\x86

      REM for /f %%a in ('%java_exe% -jar lib\archquery.jar') do set swt_path=lib\%%a
      set swt_path=lib\x86
      
    • 如果使用 64 位 Android SDK/JDK,请使用lib\x86_64

      REM for /f %%a in ('%java_exe% -jar lib\archquery.jar') do set swt_path=lib\%%a
      set swt_path=lib\x86_64
      

完成此操作后,我可以通过运行android.bat或从 Eclipse 菜单成功运行 SDK 管理器(但仍不能通过SDK Manager.exe直接运行任何一个文件)。

于 2013-03-13T11:58:22.147 回答
3

至少在 Windows 7 上,批处理“FOR”循环在执行列表命令时不使用当前工作目录,而是使用根目录。在这种情况下,命令是“%java_exe% -jar lib\archquery.jar”。但是,它实际上是从根目录运行的,例如'C:\'。您可以通过命令行中的这个简单测试亲自看到这一点:

for /f %a in ('CD') do echo %a

所以运行archquery的命令是寻找相对于根目录的jar,而不是你的ADT目录,因此找不到。

于 2013-03-13T16:22:18.363 回答
2

I had similar issue and this is how it is solved.

  1. Open android.bat file from \android-sdk-windows\tools in an editor.

  2. Find the line

    for /f "delims=" %%a in ('"%java_exe%" -jar lib\archquery.jar') do set swt_path=lib\%%a
    

    and add rem in front of this line.

  3. In the next line add set swt_path=lib\x86 (if you are using a 32-bit system) or set swt_path=lib\x86_64 (if you are using a 64-bit system).

  4. Save the file. Close the cmd if you have one open. Navigate to android-sdk-windows\tools\ and run android. This should open SDK manager. But be sure to have JAVA_HOME defined in your environment variables and should point to JDK home.

于 2014-12-15T16:04:28.130 回答
1

对 android.bat(如下)的更改为我解决了这个问题。我现在也可以从 Eclipse 启动 SDK 管理器。

for /f "delims=" %%a in ('"%java_exe%" -jar %~dp0\lib\archquery.jar') do set swt_path=lib\%%a

请参阅%~dp0 是什么意思,它是如何工作的?

于 2014-10-08T12:49:12.020 回答
0

我通过替换解决了这个问题:

for /f "delims=" %%a in ('"%java_exe%" -jar lib\archquery.jar') do set swt_path=lib\%%a

REM for /f "delims=" %%a in ('"%java_exe%" -jar lib\archquery.jar') do set swt_path=lib\%%a
set swt_path="lib\x86_64"

请注意,我用于"变量swt_path

希望可以帮助别人。

于 2015-10-16T18:26:32.500 回答
0

添加一个名为“ANDROID_SWT”的环境变量,指向保存 swt.jar 的目录,这对我有用。似乎比修改脚本更好。

于 2016-02-27T23:08:05.200 回答