在进行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