find java.exe_find_java.bat无法正常运行-16.09.21.doc

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值