find_java.bat无法正常运行-16.09.21
find_java.bat
无法正常运行
Hanford
2016年09月21日
目 录
第1章 说明2
1 Android SDK 无法正常更新2
2 测试GetShortPathName函数2
3 解决方案3
第1章 说明
1 Android SDK 无法正常更新
在Windows版的Android SDK中,可运行SDK Manager.exe下载最新的Android SDK。但是,有时它无法正常运行。这个问题很有可能是tools\lib\find_java.bat引起的。
find_java.bat的核心命令就一行,如下图所示:
其含义为:运行find_java.bat所在目录的find_java.exe。把find_java.exe -s返回的结果(JDK的安装目录)赋给环境变量java_exe。
find_java.exe -s通过查询环境变量JAVA_HOME获得JDK的安装目录。然后调用GetShortPathName函数把这个目录变换为短路径名。
问题就出在GetShortPathName函数身上,有时它并不能正常工作!如下图所示,返回的短路径名里竟然含有空格:
2 测试GetShortPathName函数
下面的VC++代码用来测试GetShortPathName函数:
char szShortPath[MAX_PATH];
wchar_t wzShortPath[MAX_PATH];
GetShortPathNameA( "C:\\Program Files",szShortPath,MAX_PATH);
GetShortPathNameW(L"C:\\Program Files",wzShortPath,MAX_PATH);
MessageBoxA(NULL,szShortPath, "A",MB_OK | MB_TOPMOST);
MessageBoxW(NULL,wzShortPath,L"W",MB_OK | MB_TOPMOST);
GetShortPathNameA( "C:\\Program Files (x86)",szShortPath,MAX_PATH);
GetShortPathNameW(L"C:\\Program Files (x86)",wzShortPath,MAX_PATH);
MessageBoxA(NULL,szShortPath, "A",MB_OK | MB_TOPMOST);
MessageBoxW(NULL,wzShortPath,L"W",MB_OK | MB_TOPMOST);同样的代码,同样的操作系统(64位Windows 7旗舰版),在不同的电脑上运行结果竟然不一致!
下图是在笔者台式机上的运行结果(一切正常):
下图是在笔者笔记本电脑上的运行结果(怎么会这样?):
也就是说:至少在64位 Windows 7 旗舰版上,GetShortPathNameA、GetShortPathNameW并不总能正常工作,具体原因笔者也不是很清楚。
3 解决方案
如果Android SDK 无法正常更新、Qt 无法打包 apk、……出现这些问题,有可能就是find_java.exe -s引起的。更进一步的说就是GetShortPathName函数出了问题。
解决办法:重新安装JDK,安装目录不要含汉字、空格、括弧等特殊字符(左右括弧也会影响find_java.bat的运行)。然后配置环境变量JAVA_HOME。
更进一步的,JDK、Android SDK、Android NDK、Qt……所有这些与Linux、跨平台相关的软件在安装时,其安装目录最好都不要包含汉字、空格、括弧等特殊字符。
目 录
I
第1章 说明
2