Android SDK 和 AVD Manager 将无法运行

Posted

技术标签:

【中文标题】Android SDK 和 AVD Manager 将无法运行【英文标题】:Android SDK and AVD Manager will not run 【发布时间】:2012-06-16 21:37:01 【问题描述】:

我安装了 android SDK,但我无法使用它,因为 AVD 和 SDK 管理器没有运行。当我尝试打开其中任何一个时,命令提示符窗口会弹出大约半秒,然后关闭。我尝试从命令提示符运行 exe 以查看是否有错误消息但没有输出并且它的行为相同。我研究了这个问题,发现其他计算机也发生了同样的事情。我尝试了那里发布的一些解决方案:

似乎不起作用的解决方案

将 JDK 位置添加到 PATH 环境变量的开头 将 Android SDK 位置添加到 PATH 环境变量中 以管理员身份运行应用程序 从用户 (C:/Users/[User Name]) 目录中删除 .android 文件夹 安装在 C: 驱动器的根目录中,而不是在 Program Files 中

操作系统信息:Windows 7 Home Premium、管理员权限


更新

我想我找到了问题的根源,但我仍然不知道如何解决它。问题似乎与我在C:\Android\android-sdk\tools 目录中的android.bat 文件有关。它尝试调用find_java.bat,但由于一个小的语法问题而无法调用。这是输出:


'C:\Android\ANDROI~1\tools\lib\find_java.exe -s' 不是内部或外部命令、可运行程序或批处理文件。

错误:未找到合适的 Java。为了正确使用 Android Developer 工具,你需要在你的系统上安装一个合适版本的 Java JDK。 我们建议您安装 JavaSE 的 JDK 版本,可在此处获得: http://www.oracle.com/technetwork/java/javase/downloads

您可以在此处找到完整的 Android SDK 要求: http://developer.android.com/sdk/requirements.html


在对android.bat 进行一些修改后,我能够让它调用find_java.bat,不管我对它做了什么,它都会得到一堆错误。我终于感到沮丧并决定在java.exe 的位置进行硬编码。后来在批处理文件中还有另一个错误。我开始认为我的安装或批处理文件确实有问题。这是批处理文件(android.bat):

@echo off
rem Copyright (C) 2007 The Android Open Source Project
rem
rem Licensed under the Apache License, Version 2.0 (the "License");
rem you may not use this file except in compliance with the License.
rem You may obtain a copy of the License at
rem
rem      http://www.apache.org/licenses/LICENSE-2.0
rem
rem Unless required by applicable law or agreed to in writing, software
rem distributed under the License is distributed on an "AS IS" BASIS,
rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
rem See the License for the specific language governing permissions and
rem limitations under the License.

rem Useful links:
rem Command-line reference:
rem   http://technet.microsoft.com/en-us/library/bb490890.aspx

rem don't modify the caller's environment
setlocal

rem Set up prog to be the path of this script, including following symlinks,
rem and set up progdir to be the fully-qualified pathname of its directory.
set prog=%~f0

rem Grab current directory before we change it
set work_dir="%cd%"

rem Change current directory and drive to where the script is, to avoid
rem issues with directories containing whitespaces.
cd /d %~dp0


rem Check we have a valid Java.exe in the path.
set java_exe=
call lib\find_java.bat
if not defined java_exe goto :EOF

set jar_path=lib\sdkmanager.jar;lib\swtmenubar.jar

rem Set SWT.Jar path based on current architecture (x86 or x86_64)
for /f %%a in ('%java_exe% -jar lib\archquery.jar') do set swt_path=lib\%%a

:MkTempCopy
    rem Copy android.bat and its required libs to a temp dir.
    rem This avoids locking the tool dir in case the user is trying to update it.

    set tmp_dir=%TEMP%\temp-android-tool
    xcopy %swt_path% %tmp_dir%\%swt_path% /I /E /C /G /R /Y /Q > nul
    copy /B /D /Y lib\androidprefs.jar   %tmp_dir%\lib\        > nul
    copy /B /D /Y lib\org.eclipse.*      %tmp_dir%\lib\        > nul
    copy /B /D /Y lib\sdk*               %tmp_dir%\lib\        > nul
    copy /B /D /Y lib\common.jar         %tmp_dir%\lib\        > nul
    copy /B /D /Y lib\commons-compress*  %tmp_dir%\lib\        > nul
    copy /B /D /Y lib\swtmenubar.jar     %tmp_dir%\lib\        > nul
    copy /B /D /Y lib\commons-logging*   %tmp_dir%\lib\        > nul
    copy /B /D /Y lib\commons-codec*     %tmp_dir%\lib\        > nul
    copy /B /D /Y lib\httpclient*        %tmp_dir%\lib\        > nul
    copy /B /D /Y lib\httpcore*          %tmp_dir%\lib\        > nul
    copy /B /D /Y lib\httpmime*          %tmp_dir%\lib\        > nul

    rem jar_path and swt_path are relative to PWD so we don't need to adjust them, just change dirs.
    set tools_dir=%cd%
    cd /d %tmp_dir%

:EndTempCopy

rem The global ANDROID_SWT always override the SWT.Jar path
if defined ANDROID_SWT set swt_path=%ANDROID_SWT%

if exist %swt_path% goto SetPath
    echo ERROR: SWT folder '%swt_path%' does not exist.
    echo Please set ANDROID_SWT to point to the folder containing swt.jar for your platform.
    goto :EOF

:SetPath
rem Finally exec the java program and end here.
REM set REMOTE_DEBUG=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
call %java_exe% %REMOTE_DEBUG% -Dcom.android.sdkmanager.toolsdir="%tools_dir%" -Dcom.android.sdkmanager.workdir=%work_dir% -classpath "%jar_path%;%swt_path%\swt.jar" com.android.sdkmanager.Main %*

rem EOF

更新(再次)

我在运行于 virtualbox 的 WinXP 上安装了 Android SDK,它运行良好。不过我还是希望能在 Win7 上使用它。

【问题讨论】:

以防万一:你使用JDK 6吗?我在某处读到它不会在 JDK 7 上运行,它应该是 JDK 6 才能运行 Android SDK。 @Arhimed 我试过这个解决方案(你是对的,它在 Android SDK 网站上说要使用 JDK6),但遗憾的是它似乎没有任何改变。 相关:***.com/questions/33367823/… 【参考方案1】:

这就是我让它在 Windows 8 上工作的方式

    添加 JAVA_HOME 环境变量并将其设置为您的 java 安装位置(即C:\Program Files (x86)\Java\jdk1.6.0_39\bin

    下一步编辑 C:\UsersYOUR USERNAME\AppData\Local\Android\android-sdk\tools\android.bat 查找 set java_exe= call lib\find_java.bat 行并将其更改为 set java_exe=java.exe

    保存文件,它应该会运行

注意如果您收到有关 swt 位置的错误,只需硬编码路径即可。将其设置为 lib\x86 或 lib\x86_64

希望对你有帮助

【讨论】:

【参考方案2】:

我安装了新的 x64 版本的 JDK 并解决了我的问题

【讨论】:

【参考方案3】:

我在全新安装 64 位 win 7 pro、使用和全新安装 64 位 JDK 时遇到了这个问题。

Kenton Price 在这篇文章中的解决方案解决了我的问题,现在一切正常。

Android SDK installation doesn't find JDK

出于某种原因,我系统上的(最初是 linux 开发的)ADK 需要使用 linux 样式的正斜杠而不是 windows 样式的反斜杠定义的 JAVA_HOME。

【讨论】:

我尝试用正斜杠替换反斜杠,但它似乎也没有做任何事情。 该死的......你所做的所有黑客攻击都可能破坏其他东西吗?我的 win764 安装对 ADK 很满意,所以它可以以某种方式工作......很高兴你有一些工作。 ADB 从 VM 到 android 设备的工作情况如何? (或者你只是在使用模拟器?) 我重新安装了 ADK,然后尝试将反斜杠更改为正斜杠,但仍然无法正常工作。 :( 您是否尝试过仅使用 32 位 Java?我知道这有点承认失败,但据我了解,这将在 Win7 上运行,并且可能比一直使用运行 32 位 java 的 32 位 VM 更容易。 (我只是选择使用 64 位 java 安装来对抗不工作的工具链,因为我对终于拥有一个 64 位系统感到兴奋,并且不想放弃在可能的情况下使用完整的 64 位软件)【参考方案4】:

我发现 Rajesh 从上面的评论中发现了同样的问题。 此行括号中的命令未执行

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

编辑:有些人可能有这行: for /f "delims=" %%a in ('"%~dps0find_java%arch_ext%.exe" -s') 设置 java_exe=%%a

此行来自sdk的tools\lib\目录中的find_java.bat

我有一个 Win 7 x64 系统,我不打算重新加载整个操作系统,所以我硬编码了 MZB 从他上面的帖子中建议的内容:

在这一行之后:

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

编辑:或这一行:

for /f "delims=" %%a in ('"%~dps0find_java%arch_ext%.exe" -s') 设置 java_exe=%%a

我添加了这一行:

set java_exe=%JAVA_HOME%\bin\java.exe

这假设您已将 JAVA_HOME 环境变量设置为 Java JDK 文件夹(不带 \bin

如果您的 JAVA_HOME 变量包含 \bin,则将其设置为:

set java_exe=%JAVA_HOME%\java.exe

如果您没有设置 JAVA_HOME 环境,那么您需要使用您机器上的实际路径对其进行硬编码,就像 MZB 在他的帖子中所做的那样。

我也为 javaw 逻辑做了它:

set javaw_exe=%JAVA_HOME%\bin\javaw.exe

我终于可以访问 SDK 管理器了。


2015 年 6 月 1 日更新:

致在我提交这篇文章后更新了这篇文章的 Ken Y-N:

当我创建这篇文章时,我引用了这一行:

for /f "delims=" %%a in ('"%~dps0find_java%arch_ext%.exe" -s') 设置 java_exe=%%a

这在我当前的 find_java.bat 文件夹 ...\sdk\tools\lib 中,我昨天刚刚从当前版本的 Android Studio Windows x64 版本 (android-studio-bundle-141.1903250-windows.exe) 更新.变量 %arch_ext% 将包含 32 或 64,具体取决于它们拥有的系统。

但我不知道上面的行是如何转换成的:

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

在 Ken Y-N 进行编辑之后。

但也许有些人的 find_java.bat 文件中有您的版本,但我相信有些人会像我一样拥有其他版本。我只是为那些无法打开 SDK 管理器的人指出这一点。

另外我应该提到我在 JDK1.7 和 JDK1.8 上都有这个问题。本来是装JDK1.8的,昨天看Android Studio的需求,说需要JDK1.7,所以昨晚装了JDK1.7,以为可以解决我的问题,但是find_java.bat的问题是一样的使用任一版本的 JDK。

我也应该指出,当我用两个版本的 JDK 安装 Android Studio 时,我最初能够在第一次打开 Android Studio 之前访问 SDK Manager。但是当我打开 Android Studio 时,它首先开始更新 SDK Manager,这可能就是问题发生的时候,因为在启动 IDEA 项目后,我无法打开 SDK Manager。

所以也许 find_java.bat 在第一次打开 Android Studio 之前有这行:

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

而当 Adroid Studio 更新 SDK 时,是否有这一行?

for /f "delims=" %%a in ('"%~dps0find_java%arch_ext%.exe" -s') 设置 java_exe=%%a

我没有时间对此进行测试 - 我已经浪费了很多时间试图弄清楚如何访问 SDK。如果其他人遇到同样的问题,也许其他人可以确认这一点。

【讨论】:

【参考方案5】:

我也有同样的问题,无法打开 Android SDK 管理器,但是通过从用户 (C:/Users/[用户名]) 目录中删除 .android 文件夹,它可以工作...

谢谢

【讨论】:

【参考方案6】:

我刚刚遇到了与 loplateral98 类似的问题,并在这里尝试了所有解决方案,但没有结果。然后我记得我必须先添加一个环境变量来定位java,然后才能让android studio首先启动,所以我只是尝试为Android_home添加一个新的系统变量并将其定向到我的android文件夹C:\Program Files (x86)\Android。就像我在设置 java 时所做的那样,然后它启动时没有问题。 SDK 管理器也已启动并正在工作。如果您仍然遇到问题,我希望这会有所帮助

这是我在设置 java 部分时发现的,只是想我也可以在 android 上尝试一下。

在某些 Windows 系统上,启动器脚本找不到 Java 的安装位置。如果遇到此问题,则需要设置一个环境变量来指示正确的位置。

选择开始菜单 > 计算机 > 系统属性 > 高级系统 属性。

然后打开Advanced tab > Environment Variables 并添加一个新的系统变量JAVA_HOME 指向你的JDK 文件夹,例如

C:\Program Files\Java\jdk1.7.0_21.

【讨论】:

【参考方案7】:

不要删除 .android 文件夹。 Juz 删除 .android 文件夹中的 avd 文件夹。它会对你的工作有很大的帮助。

提前欢呼。 普拉卡什。

【讨论】:

【参考方案8】:

我遇到了这个问题,结果问题是这样的:

D:\dev\adt-bundle-windows-x86_64-20130522\sdk>"tools\lib\find_java.exe"
C:\Windows\system32\java.exe

我隐约记得很久以前有一个程序发现 Java 并将其复制到 system32 目录以“解决”它。

我删除了这些文件,现在:

D:\dev\adt-bundle-windows-x86_64-20130522\sdk>"tools\lib\find_java.exe"
C:\Program Files\Java\jre7\bin\java.exe

SDK/ADK 管理器现在可以正常运行了。

【讨论】:

【参考方案9】:

我在 windows-8 64 位机器上遇到了同样的问题。将问题缩小到 特别声明 for /f "delims=" %%a in ('"%~dps0\find_java.exe" -s') do set java_exe=%%a 在 find_java.bat 文件中。

由于某种原因,括号中的语句没有作为命令执行。 我尝试了上面所有建议的解决方案,但都没有奏效。最后发现这个特定的语句在另一台 Windows 8 64 位机器上运行良好,所以我的 Windows 8 安装存在一些问题。我检查了我的操作系统系统文件,发现其中一些文件已损坏,因此我修复了我的 Windows 8 安装,之后一切正常。

【讨论】:

【参考方案10】:

如果问题出在 Windows 机器上,则只需以管理员身份运行 AVD 管理器或 SDK 管理器

【讨论】:

【参考方案11】:

\tools\lib\find_java.bat 可能存在问题,无法成功确定 java.exe 和 javaw.exe 可执行文件的位置。

这里的解决方法:http://www.gmansoft.com/android-sdk-manager-find-java-problem/ 为我工作。请注意,如果您“修复” android.bat 中的问题,其他批处理文件仍然会被破坏。

如果上述链接中断,解决方法是硬连线 find_java.bat 的结果以返回 java 可执行文件的实际位置。例如将其编辑为:

rem Check we have a valid Java.exe in the path. The return code will
rem be 0 if the command worked or 1 if the exec failed (program not found).
rem for /f "delims=" %%a in ('"%~dps0\find_java%arch_ext%.exe" -s') do set java_exe=%%a
set java_exe=c:\program files\Java\jdk1.8.0_25\bin\java.exe
if not defined java_exe goto :CheckFailed

:SearchJavaW
rem Check if we can find a javaw.exe at the same location than java.exe.
rem If that doesn't work, just fall back on the java.exe we just found.
rem for /f "delims=" %%a in ('"%~dps0\find_java%arch_ext%.exe" -s -w') do set javaw_exe=%%a
set javaw_exe=c:\program files\Java\jdk1.8.0_25\bin\javaw.exe
if not exist "%javaw_exe%" set javaw_exe=%java_exe%
goto :EOF

【讨论】:

【参考方案12】:

我在升级工作环境时遇到了同样的问题。问题出在<AndroidSDK>\tools\lib\find_java.bat(感谢指向此文件的任何人)。它搜索 64 位版本的 Java,而我安装了 32 位版本。 find_java.bat 中的简单而肮脏的 set arch_ext=32 为我解决了这个问题。

【讨论】:

【参考方案13】:

我在 Windows 8.1 上遇到了同样的问题,通过以管理员身份运行 Android Studio 解决了这个问题

【讨论】:

以上是关于Android SDK 和 AVD Manager 将无法运行的主要内容,如果未能解决你的问题,请参考以下文章

Android SDK 和 AVD Manager 将无法运行

执行android工具命令时看不到Android SDK和AVD Manager

Android SDK Manager和AVD Manager使用(win7_64bit下测试)

AVD,SDK manager 闪退

android SDK- 使用 AVD Manager.exe 创建虚拟机遇到报错 emulator - arm.exe 已停止工作 我的解决方案,记录下

android SDK- 使用 AVD Manager.exe 创建虚拟机遇到报错 emulator - arm.exe 已停止工作 我的解决方案,记录下