android - 无法在 Windows 10 中安装 sdkmanager
问题描述
我正在尝试单独安装 sdk 管理器以将其与 Eclipse 一起使用。我下载了 google 提供的 zip 文件——
命令行工具-win-6200805_latest.zip
来自https://developer.android.com/studio
但是当我尝试运行 sdkmanager.bat 文件时它没有运行并且我收到以下错误:
Error: could not find or load main class com.android.sdklib.tool.sdkmanager.SdkManagerCli
请注意,Java jdk 路径设置正确,并且没有错误。
如果你有兴趣查看 bat 文件,这里是:
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem sdkmanager startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%..
@rem Add default JVM options here. You can also use JAVA_OPTS and SDKMANAGER_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS=-Dcom.android.sdklib.toolsdir=%~dp0\..
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto init
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
@rem set JAVA_EXE=C:/Program Files/Java/jdk1.8.0_241/bin/java.exe
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto init
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:init
@rem Get command-line arguments, handling Windows variants
if not "%OS%" == "Windows_NT" goto win9xME_args
:win9xME_args
@rem Slurp the command line arguments.
set CMD_LINE_ARGS=
set _SKIP=2
:win9xME_args_slurp
if "x%~1" == "x" goto execute
set CMD_LINE_ARGS=%*
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\lib\/sdkmanager-classpath.jar
@rem Execute sdkmanager
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %SDKMANAGER_OPTS% -classpath "%CLASSPATH%" com.android.sdklib.tool.sdkmanager.SdkManagerCli %CMD_LINE_ARGS%
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
:fail
rem Set variable SDKMANAGER_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%SDKMANAGER_EXIT_CONSOLE%" exit 1
exit /b 1
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega
任何帮助表示赞赏
解决方案
TL;博士;
- 复制到的
tools/lib/_
内容tools/lib
- 运行
sdkmanager
带--sdk_root
参数的命令。
细节
在sdkmanager.bat的第66行,CLASSPATH被定义成这样
set CLASSPATH=%APP_HOME%\lib\/sdkmanager-classpath.jar
在 lib 目录sdkmanager-classpath.jar
中,奇怪的是,在一个名为-
.
我试图更改批处理文件中的路径,但它不起作用,所以我将文件从复制..../tools/lib/_
到..../tools/lib
并且错误消失了。但是,出现了警告:
Warning: Could not create settings
java.lang.IllegalArgumentException
at com.android.sdklib.tool.sdkmanager.SdkManagerCliSettings.<init>(SdkManagerCliSettings.java:428)
at com.android.sdklib.tool.sdkmanager.SdkManagerCliSettings.createSettings(SdkManagerCliSettings.java:152)
at com.android.sdklib.tool.sdkmanager.SdkManagerCliSettings.createSettings(SdkManagerCliSettings.java:134)
at com.android.sdklib.tool.sdkmanager.SdkManagerCli.main(SdkManagerCli.java:57)
at com.android.sdklib.tool.sdkmanager.SdkManagerCli.main(SdkManagerCli.java:48)
根据这个答案,我尝试传递--sdk_root
没有问题的参数:
sdkmanager --sdk_root=%ANDROID_HOME% --list
# %ANDROID_HOME% is the environment variable that contains the path of android
# sdk installation. Typically, would be:
# `C:\Users\<USERNAME>\AppData\Local\Android\Sdk\tools`
PS:即使我能够解决这个问题,我也会说这个答案是一种解决方法,因为文档没有提到任何关于将文件复制到其他路径的内容
推荐阅读
- matlab - 从两个向量创建函数句柄以传递给 MATLAB 中的积分函数
- r - 如何标记一系列相同的值
- c# - Net Core 3.0 和桌面应用程序
- c# - 错误:远程服务器返回错误:(500)无效的 WSDL 访问,没有 SOAP 请求预期 C#
- sql - 在多对多(一张表)设计中苦苦挣扎
- python - 在数据框的每一列上使用具有不同功能的不同列上的 apply()
- python - 如何绘制具有不同颜色的不同变量的简单数据框
- ruby-on-rails-5 - 具有嵌套属性的活动记录导入
- php - 使用 self 从同一类的内部方法创建对象
- javascript - 具有最小值和最大值的随机值,并且值偏向于中心值