android 命令行的一个bug 之:android Usage: java [-options] class [args...]

在进行Android开发的时候

首先确保 java环境变量设置正确(具体略..) 

然后新建Android_SDK_HOME环境变量

并将其%Android_SDK_HOME%/tools放入到path中 

然后进入cmd窗口:  

c:> android _h  接着该命令会报如下信息:很明显是java的嘛 

 

 

查了半天, 遇到该问题的不再少数, 解决的却没几个..... 

于是乎。。 自己开始慢慢琢磨。。。。。

首先进入到 android 的home目录下的 tools 中 

cmd: cd E:/Java/Android/android-sdk-windows/tools

E:/Java/Android/android-sdk-windows/tools > android -h  

很正确的显示了该指令的用法信息

 执行 android 命令, 会调用该目录下响应的批处理程序即 android.bat 

在这之间我无意中在  C:/Documents and Settings/Administrator> 下执行了

android -h 却发现显示正常,感觉很奇怪, 我又进入到 e: 根目录下 执行(之前在C盘根目录)

发现同样不起作用,又进入c:/test执行android -h, 显示有问题。。。

于是我怀疑是目录在作怪。。。。

 最后我开始找到 android.bat 一点点的调试.. 

echo 一行行的查看, 一直知道最后

【在C盘根目录中执行 android命令,即执行android.bat批处理】

c:> android 


 

当 echo 到如上的时候一直没有发现问题, echo 的信息都可以成功显示

但是当执行以上java指令的实现却发现问题了

 

于是我在不同的目录中执行 调试:

echo  %java_exe% -Dcom.android.sdkmanager.toolsdir="%tools_dir%" -Dcom.android.sdkmanager.workdir=%work_dir% -classpath "%jar_path%;%swt_path%/swt.jar" com.android.sdkmanager.Main %*

输出的信息唯一不同的就是 =%work_dir% 

 

如在C盘根目录 会显示

 java -Dcom.android.sdkmanager.toolsdir="E:/Java/Android/android-sdk-windows/too
ls" -Dcom.android.sdkmanager.workdir="C:/" -classpath "lib/sdkmanager.jar;lib/x86
/swt.jar" com.android.sdkmanager.Main

 

E盘根目录 会显示

 java -Dcom.android.sdkmanager.toolsdir="E:/Java/Android/android-sdk-windows/too
ls" -Dcom.android.sdkmanager.workdir="E:/" -classpath "lib/sdkmanager.jar;lib/x86
/swt.jar" com.android.sdkmanager.Main

 

接着。。。。

 java -Dcom.android.sdkmanager.toolsdir="E:/Java/Android/android-sdk-windows/too
ls" -Dcom.android.sdkmanager.workdir="C:/test" -classpath "lib/sdkmanager.jar;lib/x86
/swt.jar" com.android.sdkmanager.Main

 

 java -Dcom.android.sdkmanager.toolsdir="E:/Java/Android/android-sdk-windows/too
ls" -Dcom.android.sdkmanager.workdir="C:/Documents and Settings/Administrator" -classpath "lib/sdkmanager.jar;lib/x86
/swt.jar" com.android.sdkmanager.Main

 

 

比较发现当在磁盘的根目录时候 ;末尾会多出一个 "/" 

既然问题出来了, 那就处理 work_dir 变量呗

 

然后在 andriod.bat文件中发现了如下:

set work_dir="%cd%"

 

 

接着我开始着手处理该变量了: 也就是如果以 / 结尾,则处理掉

 

:: echo %work_dir%  ==> "c:/" 注意带有双引号
:: echo %work_dir:~0,-2%" (注意最后一个"符号)  ==> "c:"  0,-2即是 "c: 最后加上一个"
:: echo %work_dir:~-2,-1%


if %work_dir:~-2,-1%==/ (
 set work_dir=%work_dir:~0,-2%"
)
::echo %work_dir%

 

至此 该问题解决。。。。。

 

哇哈哈。。。 顺便学了一些 bat 的语法。

 

补充一下:

 

if  条件后面需要有一个 (

 

)

 

且左括号 跟 if 条件句 之间需要有一个以上的 空格符号

work_dir:~0,-2 等是对字符串 work_dir的截取操作啦

 

ok

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值